From a4c973e57eded43c850868c46768b7a9e30c2ab1 Mon Sep 17 00:00:00 2001 From: Charles Hall Date: Sun, 5 May 2024 09:25:39 +0100 Subject: [PATCH] build and cache all packages and CI dependencies This fixes the problem where some artifacts were not being cached when they should have been. The secret sauce is the `nix-store` command. --- bin/nix-build-and-cache | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/bin/nix-build-and-cache b/bin/nix-build-and-cache index 42c37709..6bd62664 100755 --- a/bin/nix-build-and-cache +++ b/bin/nix-build-and-cache @@ -17,15 +17,24 @@ if [ ! -z ${ATTIC_TOKEN+x} ]; then "${ATTIC_ENDPOINT:-https://attic.conduit.rs/conduit}" \ "$ATTIC_TOKEN" - readarray -t outputs < <(nix path-info "$@") readarray -t derivations < <(nix path-info "$@" --derivation) + for derivation in "${derivations[@]}"; do + cache+=( + "$(nix-store --query --requisites --include-outputs "$derivation")" + ) + done + + # Upload them to Attic + # + # Use `xargs` and a here-string because something would probably explode if + # several thousand arguments got passed to a command at once. Hopefully no + # store paths include a newline in them. + ( + IFS=$'\n' + nix shell --inputs-from . attic -c xargs \ + attic push conduit <<< "${cache[*]}" + ) - # Push the target installable and its build dependencies - nix run --inputs-from . attic -- \ - push \ - conduit \ - "${outputs[@]}" \ - "${derivations[@]}" else echo "\$ATTIC_TOKEN is unset, skipping uploading to the binary cache" fi