From 2935a6e15fed7b1439a3ad4a9c75b42b1d50f75e Mon Sep 17 00:00:00 2001 From: Peder Bergebakken Sundt Date: Mon, 24 Mar 2025 17:42:28 +0100 Subject: [PATCH] lkjsadljkdsalkjdsa --- justfile | 107 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 43 deletions(-) diff --git a/justfile b/justfile index 96dcb31..ca6bffd 100644 --- a/justfile +++ b/justfile @@ -183,6 +183,55 @@ _build_packages $outdir +$attrpaths: chmod +x "$outdir"/_rerun.sh fd . "$outdir" -l +# TODO: use in 'bump' +[no-cd] +build-package-sources +packages: + #!/usr/bin/env -S bash -euo pipefail -x + [[ -e .git && -f flake.nix ]] || { printf >&2 "%s\n" "ERROR: not in repo root!"; false; } + declare packages=("$@") + # TODO: allow selecting different names than result-src and results-src-writeable + just _build_packages results-src "${packages[@]/%/.src}" + [[ -d results-src-writeable ]] && rm -rf results-src-writeable ||: + mkdir -p results-src-writeable + for result in results-src/* ; do + [[ -L "$result" ]] || continue + result_writeable=results-src-writeable/"$(basename "$result")" + mkdir -p "$result_writeable" + if [[ -d "$(readlink "$result")" ]]; then + rsync -rxL "$result/" "$result_writeable/" && + chmod -R +w "$result_writeable/" ||: + elif [[ -f "$(readlink "$result")" ]]; then + atool "$(readlink "$result")" --extract-to="$result_writeable/" ||: + if [[ $(ls --almost-all "$result_writeable" | wc -l ) -eq 1 ]] && test -d "$result_writeable"/*; then + mv "$result_writeable"{,-old} + mv "$result_writeable"-old/* "$result_writeable" + rmdir "$result_writeable"-old + fi + fi + ( + # todo: should i eval nix and query for upstream remote and ref? + cd "$result_writeable" + $GIT init + $GIT add . + $GIT commit -m "Base" >/dev/null + ) ||: + done + { + # printf "#!/usr/bin/env -S nom-build\n" + printf "#!/usr/bin/env -S nom build -f\n" + printf "let pkgs = import ./. { }; in {\n" + for package in "${packages[@]}"; do + # printf " # ./build.nix -A %q" "$package" + printf " # ./build.nix %q\n" "$package" + printf " %s = pkgs.%s.overrideAttrs { src = ./results-src-writeable/%s.src; };\n" "$package" "$package" "$package" + done + printf "}\n" + # printf "# ./build.nix$(printf " -A %q" "${packages[@]}")\n" + printf "# ./build.nix$(printf " %q" "${packages[@]}")\n" + printf "# ./build.nix\n" + } >build.nix + chmod +x build.nix + @build-pr-packages $pr=`just _a_pr` $merge=`gum choose --header="which refs/pull//xxx ?" merge head` $attrpaths=`just _some_packages` $args=`gum choose --no-limit -- -j0 "--system "{aarch64,x86_64}-{darwin,linux} --rebuild`: -printf "github:nixos/nixpkgs/refs/pull/"$(just _sanitize_pr_url "$pr")"/$merge#%s" $attrpaths | xargs echo + nom build $args -(printf "github:nixos/nixpkgs/refs/pull/"$(just _sanitize_pr_url "$pr")"/$merge#%s" $attrpaths | xargs nom build $args) || true @@ -280,55 +329,27 @@ _bump +$packages: $GIT diff printf "delta results-src-{old,new}/%s/.\n" "$@" -@fix +packages: - [[ $# -gt 0 ]] || set -- $(just _some_packages); \ - cd "$(just _new_worktree fix "$(echo "$package" | rev | cut -d. -f1 | rev)")"; \ - just _fix "$package" && $SHELL +fix *packages: + #!/usr/bin/env -S bash -euo pipefail + declare packages=("$@") + [[ "${#packages[@]}" -gt 0 ]] || packages=($(just _some_packages)) + [[ "${#packages[@]}" -gt 0 ]] || { printf >&2 "%s\n" "ERROR: no packages chosen..."; false; } + cd "$(just _new_worktree fix "$(echo "${packages[0]}" | rev | cut -d. -f1 | rev)")" + just _fix "${packages[@]}" ||: + $SHELL [no-cd] _fix +packages: #!/usr/bin/env -S bash -euo pipefail - [[ -e .git && flake.nix ]] - local packages=("$@") - just _build_packages results-src "${packages[@]/%/.src}" ||: - # TODO: make this rutine reuseable? - mkdir -p result-src-writeable - for result in results-src/*; do; - result_writeable=result-src-writeable/$(basename "$result") - mkdir -p "$result_writeable" - if [[ -d $(readlink "$result") ]]; then - rsync -rxL "$result/" "$result_writeable/" && - chmod -R +w "$result_writeable/" ||: - elif [[ -f $(readlink "$result") ]]; then - atool "$(readlink result-src)" --extract-to="$result_writeable/" ||: - if [[ $(ls "$result_writeable" | wc -l ) -eq 1 && test -d "$result_writeable"/* ]]; then - mv "$result_writeable"{,-old} - mv "$result_writeable"-old/* "$result_writeable" - rmdir "$result_writeable"-old - fi - fi - ( - cd "$result_writeable" - $GIT init - $GIT add . - $GIT commit -m "Base" >/dev/null - ) ||: - done - printf >build.nix "#!/usr/bin/env -S nom build -f\n" - printf >build.nix "let pkgs = import ./. { }; in {\n%s\n}\n" "$( - for package in "${packages[@]}"; do - printf " %s = pkgs.%s.overrideAttrs { src = ./result-src-writeable/%s-src; };" "$package" "$package" "$package" - done - )" - chmod +x build.nix + [[ -e .git && -f flake.nix ]] || { printf >&2 "%s\n" "ERROR: not in repo root!"; false; } + declare packages=("$@") + just build-package-sources "${packages[@]}" + NIXPKGS_ALLOW_UNFREE=1 just build-packages "${packages[@]}" ||: if command -v bat >/dev/null; - then bat build.nix + then bat build.nix --style header-filename else cat build.nix fi - NIXPKGS_ALLOW_UNFREE=1 just build-packages "${packages[@]}" ||: - echo "# $package" - echo " ./build.nix "${packages[*]/#/-A }" - echo " ./results/_rerun.sh" + echo "./results/_rerun.sh --system $(nix config show system)" pr $number=`just _a_pr`: #!/usr/bin/env -S bash -euo pipefail @@ -587,7 +608,7 @@ _mk_clean_list: cd "$path" ! $GIT diff HEAD --quiet --exit-code >&/dev/null || $GIT ls-files --others --exclude-standard | - grep -qEv '^(update-executables\.txt|results|build\.nix|(asd|do|foo|test|spismeg|packages)[2-9]?.(sh|txt|json)|eval.json|[^/]*\.log)$' + grep -qEv '^(update-executables\.txt|results(-.*)?|build\.nix|(asd|do|foo|test|spismeg|packages)[2-9]?\.(sh|txt|json)|(eval|packages)\.json|[^/]*\.log)$' ) ; then continue fi