ljdsalkjdaslkj

This commit is contained in:
2025-06-05 11:54:17 +02:00
parent 2fc467e534
commit 2629e8651c

162
justfile
View File

@@ -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 <packages.json --arg github_handle "$github_handle" 'to_entries[] | select((.value.meta.maintainers // [])[]|select(.github == $github_handle)) | .key' -r \
| just _list_packages_attrpath_filtered
list-packages-by-maintainer *github_handles: _packages_json
#!/usr/bin/env -S bash -euo pipefail
declare -a maintainers=("$@")
[[ "${#maintainers[@]}" -gt 0 ]] || readarray -td $'\n' maintainers < <( just _some_maintainers )
[[ "${#maintainers[@]}" -gt 0 ]]
#grep </tmp/nixpkgs-maintainers.tsv -F "$(printf "%s\t\n" "${maintainers[@]}")"
maintainers_json=$(printf "%s\n" "${maintainers[@]}" | jq -sR 'split("\n")|map(select(.==""|not))' -c)
jq <packages.json --argjson maintainers "$maintainers_json" 'to_entries[] | select([.value.meta.maintainers // [] | .[] | .github as $maintainer | $maintainers[] | . == $maintainer] | any) | .key' -r \
| tr '0123456789' '9876543210' | sort -u | tr '0123456789' '9876543210'
[no-cd]
@list-ripgrepped-packages +$ripgrep_args:
@@ -433,13 +437,15 @@ _build_package_sources $system +packages:
[no-cd]
@commit-staged *$message:
test -n "$(git diff HEAD --name-only --staged)" || ! echo >&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 </tmp/nixpkgs-maintainers.tsv -F "$(printf "%s\t\n" "${attrpaths[@]}")"
attrpath_json=$(printf "%s\n" "${attrpaths[@]}" | jq -sR 'split("\n")|map(select(.==""|not))' -c)
jq <packages.json --argjson attrs "$attrpath_json" '. as $pkgs | $attrs[] | $pkgs[.].meta.maintainers // [] | .[] | .github' -r
get-versions $attrpath=`just _a_package` *paths: setup
#!/usr/bin/env -S bash -euo pipefail
declare -a paths=("${@:2}")
if [[ "${#paths[@]}" -eq 0 ]]; then
readarray -td $'\n' paths < <( just _upstream_release_branches "upstream/" "" )
readarray -td $'\n' paths < <( just _list_upstream_release_branches "upstream/" "" )
paths=(master "${paths[@]}")
fi
just _get_version "$attrpath" "${paths[@]}" | column --table --separator ":" --output-separator " : " | bat -l conf --style=plain --paging=never
@@ -924,7 +941,7 @@ test-merge $rev=`cd "$invokedir"; just _a_commit` *branches:
declare -a branches=("${@:2}")
[[ "${#branches[@]}" -gt 0 ]] || {
just setup # update
# readarray -td $'\n' branches < <( just _upstream_release_branches "upstream/" "" )
# readarray -td $'\n' branches < <( just _list_upstream_release_branches "upstream/" "" )
readarray -td $'\n' branches < <( prefix=upstream/ just _some_upstream_release_branches "Select targets" )
}
[[ "${#branches[@]}" -gt 0 ]] || ! echo >&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