From 2629e8651c04a408bf2a4b16ebe967d2e749776c Mon Sep 17 00:00:00 2001 From: Peder Bergebakken Sundt Date: Thu, 5 Jun 2025 11:54:17 +0200 Subject: [PATCH] ljdsalkjdaslkj --- justfile | 162 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 107 insertions(+), 55 deletions(-) diff --git a/justfile b/justfile index 2084cb0..9ad961b 100644 --- a/justfile +++ b/justfile @@ -127,11 +127,15 @@ __list_packages_attrpath_filtered +attrpaths: # printf >&1 "'%s'\n" "${attrpaths[@]}" just list-packages | grep "$(printf "%s\n" "${attrpaths[@]}")" -@list-maintainer-packages $github_handle=`just _a_maintainer`: _packages_json - # TODO: maybe add github handles to packages tsv? - [[ -n "$github_handle" ]] || ! echo >&2 "ERROR: No github handle" - jq &2 "No files are staged!" + test -n "$($GIT diff HEAD --name-only --staged)" || ! echo >&2 "No files are staged!" || false + $GIT diff HEAD --name-only --staged | sort -u | xe nixfmt --check $GIT -c commit.template=<(git diff HEAD --name-only --staged | just _list_packages_fname_filtered | cut -f1 | just _attrpaths_2_aliases | xargs {{XARGS_NL}} printf "%s: ${*//%/%%}\n") commit && git show [no-cd] commit-dirty-packages +$message=`gum input --placeholder="commit message, (attrpath: this message)"`: #!/usr/bin/env -S bash -euo pipefail [[ -n "$message" ]] + $GIT ls-files --modified | sort -u | xe nixfmt --check || ! echo >&2 "Consider running 'just format-files-dirty'" || false just list-dirty-packages | while read attrpath position row; do [[ -f "$position" ]] || continue @@ -815,7 +821,7 @@ setup: fi ) declare -a branches=() - readarray -td $'\n' branches < <( just _upstream_release_branches "" "" ) + readarray -td $'\n' branches < <( just _list_upstream_release_branches "" "" ) # TODO: clean old release branches for branch in "${branches[@]}"; do add_upstream "$branch" @@ -833,7 +839,7 @@ _mk_clean_list: ( cd master # TODO: assert "upstream" present? - just _upstream_release_branches "" | xargs {{XARGS_NL}} $GIT fetch upstream + just _list_upstream_release_branches "" | xargs {{XARGS_NL}} $GIT fetch upstream ) porcelain2jsonl() { uniq | ( @@ -852,13 +858,13 @@ _mk_clean_list: #cat <<<"$worktrees" ( cd master - just _upstream_release_branches | xe -j0 $GIT branch --merged ||: + just _list_upstream_release_branches | xe -j0 $GIT branch --merged ||: ) | sort -u | while IFS= read line; do branch="$(cut <<<"$line" -c3-)" if [[ "$branch" = "master" ]] \ - || grep <<<"$branch" "$(just _upstream_release_branches '^' '$')" --quiet \ - || grep <<<"$branch" "$(just _upstream_release_branches '^upstream-' '$')" --quiet; then + || grep <<<"$branch" "$(just _list_upstream_release_branches '^' '$')" --quiet \ + || grep <<<"$branch" "$(just _list_upstream_release_branches '^upstream-' '$')" --quiet; then continue fi #jq <<<"$worktrees" '.branch' @@ -895,11 +901,22 @@ _mk_clean_list: # === get/is/test === +#get-maintainers-for-packages *attrpaths: _maintainers_tsv +get-maintainers-for-packages *attrpaths: _packages_json + #!/usr/bin/env -S bash -euo pipefail + declare -a attrpaths=("$@") + [[ "${#attrpaths[@]}" -gt 0 ]] || readarray -td $'\n' attrpaths < <( just _some_packages ) + [[ "${#attrpaths[@]}" -gt 0 ]] + #grep &2 "ERROR: no target branches chosen" || false @@ -962,9 +979,9 @@ open-package-urls $package=`just _a_package`: #!/usr/bin/env -S bash -euo pipefail fpkg="$(jq -rn --arg x "$package" '$x | @uri')" bpkg="$(jq -rn --arg x "$(rev <<<"$package" | cut -d. -f1 | rev)" '$x | @uri')" - # homepage="$(nix eval {{NIX_EVAL_OPTS}} --file master/default.nix "$package".meta.homepage --raw ||:)" - srcpage="$(nix eval {{NIX_EVAL_OPTS}} --file master/default.nix "$package".src.meta.homepage --raw ||:)" - position="$({ nix eval {{NIX_EVAL_OPTS}} --file master/default.nix "$package".meta.position --raw ||: ; } | rev | cut -d: -f2- | rev | sd -F "$PWD/master/" "")" + # homepage="$(nix eval {{NIX_EVAL_OPTS}} --file upstream/master/default.nix "$package".meta.homepage --raw ||:)" + srcpage="$(nix eval {{NIX_EVAL_OPTS}} --file upstream/master/default.nix "$package".src.meta.homepage --raw ||:)" + position="$({ nix eval {{NIX_EVAL_OPTS}} --file upstream/master/default.nix "$package".meta.position --raw ||: ; } | rev | cut -d: -f2- | rev | sd -F "$PWD/master/" "")" declare -a urls=() urls+=("https://hydra.nixos.org/job/nixos/trunk-combined/nixpkgs.${fpkg}.x86_64-linux") urls+=("https://github.com/NixOS/nixpkgs/pulls?q=is%3Apr+in%3Atitle+${bpkg}") @@ -1036,6 +1053,23 @@ enqueue-nixpkgs-review *$prs: (set -x; "${cmd[@]}" ) done + +# === format helpers === + +[no-cd] +format-files-dirty: + #!/usr/bin/env -S bash -euo pipefail + git ls-files --modified | sort -u | grep . | xe nixfmt + +[no-cd] +format-files-touched-by-commit *commits: + #!/usr/bin/env -S bash -euo pipefail + declare -a commits=("$@") + [[ "${#commits[@]}" -gt 0 ]] || readarray -td $'\n' commits < <( just _some_commits ) + [[ "${#commits[@]}" -gt 0 ]] + printf "%s\n" "${commits[@]}" | xe -s 'git log --pretty=format: --name-only "$1"^.."$1"' | sort -u | grep . | xe nixfmt + + # === internal helpers === [no-cd] @@ -1083,14 +1117,22 @@ _packages_json: @_this_commit: cd "$invokedir"; $GIT log -n1 --pretty='format:%H' -@_a_commit *extra_revs: +# CONCEPT: +# These getters generally have a environ JUST_{{foo}} variable which they will just print instead of doing their interactive prompt +# This allows top-level recipes to ask once and have all recursive just calls re-use the response + +_a_commit *extra_revs: + #!/usr/bin/env -S bash -euo pipefail + [[ -n "${JUST_COMMIT:-}" ]] && { head -n1 <<<"$JUST_COMMIT"; exit 0; } ||: # TODO: check if in a nixpkgs git repo - { \ - [[ $# -eq 0 ]] || printf "%s\n" "$@"; \ - cd "$invokedir"; $GIT log --oneline -n800; \ + { + [[ $# -eq 0 ]] || printf "%s\n" "$@"; + cd "$invokedir"; $GIT log --oneline -n800; } | gum filter --placeholder "Pick commit..." --height 10 | cut -d' ' -f1 | grep . -@_some_commits: +_some_commits: + #!/usr/bin/env -S bash -euo pipefail + [[ -n "${JUST_COMMIT:-}" ]] && { cat <<<"$JUST_COMMIT"; exit 0; } ||: # TODO: check if in a git repo #cd "$invokedir"; $GIT log --oneline -n800 | gum filter --placeholder "Pick commit..." --height 10 --no-limit | cut -d' ' -f1 cd "$invokedir"; $GIT log --oneline -n800 | fzf --layout=reverse --multi | cut -d' ' -f1 @@ -1098,13 +1140,16 @@ _packages_json: @_a_commit_title: cd "$invokedir"; rev="$(just _a_commit)" || exit $?; [[ -n "$rev" ]] && git log --format="%s" -n1 "$rev" | grep . -@_a_package: _packages_json +_a_package: _packages_json + #!/usr/bin/env -S bash -euo pipefail + [[ -n "${JUST_PACKAGE:-}" ]] && { head -n1 <<<"$JUST_PACKAGE"; exit 0; } ||: #gum spin --show-output just list-packages | cut -f1 | fzf --sync --layout=reverse | grep . - just list-packages >/dev/null + just list-packages >/dev/null # HACK just list-packages | cut -f1 | fzf --sync --layout=reverse | grep . _some_packages: _packages_json #!/usr/bin/env -S bash -euo pipefail + [[ -n "${JUST_PACKAGE:-}" ]] && { cat <<<"$JUST_PACKAGE" ; exit 0; } ||: #gum spin --show-output just list-packages | cut -f1 | fzf --sync --layout=reverse --multi | grep . just list-packages >/dev/null if [[ -n "${JUST_USE_ALIASES:-}" ]]; then @@ -1122,12 +1167,9 @@ _some_packages: _packages_json _a_system: #!/usr/bin/env -S bash -euo pipefail - if [[ -n "${JUST_SYSTEM:-}" ]]; then - head <<<"$JUST_SYSTEM" -n1 - exit 0 - fi - # nix eval --file master/default.nix lib.systems.flakeExposed --json | jq .[] -r | xargs {{XARGS_NL}} gum choose --selected "$(just _this_system)" - systems="$(nix eval {{NIX_EVAL_OPTS}} --file master/default.nix lib.systems.flakeExposed --json)" + [[ -n "${JUST_SYSTEM:-}" ]] && { head -n1 <<<"$JUST_SYSTEM"; exit 0; } ||: + # nix eval --file upstream/master/default.nix lib.systems.flakeExposed --json | jq .[] -r | xargs {{XARGS_NL}} gum choose --selected "$(just _this_system)" + systems="$(nix eval {{NIX_EVAL_OPTS}} --file upstream/master/default.nix lib.systems.flakeExposed --json)" system="$(just _this_system)" # system="aarch64-darwin" jq <<<"$systems" .[] -r | fzf --sync --layout=reverse $( @@ -1137,12 +1179,9 @@ _a_system: _some_systems: #!/usr/bin/env -S bash -euo pipefail - if [[ -n "${JUST_SYSTEM:-}" ]]; then - cat <<<"$JUST_SYSTEM" - exit 0 - fi - # nix eval {{NIX_EVAL_OPTS}} --file master/default.nix lib.systems.flakeExposed --json | jq .[] -r | xargs {{XARGS_NL}} gum choose --no-limit --selected "$(just _this_system)" - systems="$(nix eval {{NIX_EVAL_OPTS}} --file master/default.nix lib.systems.flakeExposed --json)" + [[ -n "${JUST_SYSTEM:-}" ]] && { cat -n1 <<<"$JUST_SYSTEM"; exit 0; } ||: + # nix eval {{NIX_EVAL_OPTS}} --file upstream/master/default.nix lib.systems.flakeExposed --json | jq .[] -r | xargs {{XARGS_NL}} gum choose --no-limit --selected "$(just _this_system)" + systems="$(nix eval {{NIX_EVAL_OPTS}} --file upstream/master/default.nix lib.systems.flakeExposed --json)" system="$(just _this_system)" # system="aarch64-darwin" jq <<<"$systems" .[] -r | fzf --sync --layout=reverse --multi $( @@ -1151,24 +1190,38 @@ _some_systems: ) _a_maintainer: - nix eval {{NIX_EVAL_OPTS}} --file master/maintainers/maintainer-list.nix \ - --apply 'x: builtins.attrValues (builtins.mapAttrs (k: v: v.github or k) x)' --json \ - | jq .[] -r \ - | fzf --sync --layout=reverse + #!/usr/bin/env -S bash -euo pipefail + [[ -n "${JUST_MAINTAINER:-}" ]] && { head -n1 <<<"$JUST_MAINTAINER"; exit 0; } ||: + nix eval {{NIX_EVAL_OPTS}} --file upstream/master/maintainers/maintainer-list.nix \ + --apply 'x: builtins.attrValues (builtins.mapAttrs (k: v: let user = v.github or k; name = v.name or null; in [user (if name != user then name else null) (v.email or null)]) x)' --json \ + | jq '.[]|@tsv' -r \ + | column -t -s$'\t' \ + | fzf --sync --layout=reverse \ + | cut -d' ' -f1 _some_maintainers: - nix eval {{NIX_EVAL_OPTS}} --file master/maintainers/maintainer-list.nix \ - --apply 'x: builtins.attrValues (builtins.mapAttrs (k: v: v.github or k) x)' --json \ - | jq .[] -r \ - | fzf --sync --layout=reverse --multi + #!/usr/bin/env -S bash -euo pipefail + [[ -n "${JUST_MAINTAINER:-}" ]] && { cat <<<"$JUST_MAINTAINER"; exit 0; } ||: + nix eval {{NIX_EVAL_OPTS}} --file upstream/master/maintainers/maintainer-list.nix \ + --apply 'x: builtins.attrValues (builtins.mapAttrs (k: v: let user = v.github or k; name = v.name or null; in [user (if name != user then name else null) (v.email or null)]) x)' --json \ + | jq '.[]|@tsv' -r \ + | column -t -s$'\t' \ + | fzf --sync --layout=reverse --multi \ + | cut -d' ' -f1 -@_a_pr: - cd master; gh pr list --limit 1000 --json 'number,title' --state open | jq '.[]|"\(.number) - \(.title)"' -r | gum filter --placeholder "Pick PR..." --height 15 | cut -d' ' -f1 +_a_pr: + #!/usr/bin/env -S bash -euo pipefail + [[ -n "${JUST_PR:-}" ]] && { head -n1 <<<"$JUST_PR"; exit 0; } ||: + cd upstream/master + gh pr list --limit 1000 --json 'number,title' --state open | jq '.[]|"\(.number) - \(.title)"' -r | gum filter --placeholder "Pick PR..." --height 15 | cut -d' ' -f1 -@_some_prs: - cd master; gh pr list --limit 1000 --json 'number,title' --state open | jq '.[]|"\(.number) - \(.title)"' -r | gum filter --placeholder "Pick PR..." --height 15 --no-limit | cut -d' ' -f1 +_some_prs: + #!/usr/bin/env -S bash -euo pipefail + [[ -n "${JUST_PR:-}" ]] && { cat <<<"$JUST_PR"; exit 0; } ||: + cd upstream/master + gh pr list --limit 1000 --json 'number,title' --state open | jq '.[]|"\(.number) - \(.title)"' -r | gum filter --placeholder "Pick PR..." --height 15 --no-limit | cut -d' ' -f1 -@_upstream_release_branches $prefix="upstream/" $suffix="": +@_list_upstream_release_branches $prefix="upstream/" $suffix="": printf "${prefix//%/%%}%s${suffix//%/%%}\n" \ master \ staging \ @@ -1176,17 +1229,14 @@ _some_maintainers: python-updates \ release-25.05 \ staging-25.05 \ - staging-next-25.05 \ - release-24.11 \ - staging-24.11 \ - staging-next-24.11 + staging-next-25.05 @_a_upstream_release_branch $header *extra_branches: - shift; gum filter --header="$header" "$@" $(just _upstream_release_branches "${prefix:-upstream/}" "${suffix:-}") + gum filter --header="$header" "${@:2}" $(just _list_upstream_release_branches "${prefix:-upstream/}" "${suffix:-}") # --ordered @_some_upstream_release_branches $header *extra_branches: - shift; gum filter --header="$header" "$@" $(just _upstream_release_branches "${prefix:-upstream/}" "${suffix:-}") --no-limit + gum filter --header="$header" "${@:2}" $(just _list_upstream_release_branches "${prefix:-upstream/}" "${suffix:-}") --no-limit # --ordered @_sanitize_pr_url $number: @@ -1196,6 +1246,8 @@ _some_maintainers: cd master; $GIT fetch "$remote" cd master; $GIT for-each-ref --sort=committerdate refs/remotes --format='%(committerdate:short) %(refname:short)' | sort -r | grep " $remote/" | gum filter --height=15 --no-sort | cut -d' ' -f2- -@_fmt: +# maintenance + +@_fmt_justfile: just --unstable --fmt #sd "\n+(@_[a-zA-Z_-]+:)" "\n" justfile