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