diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b9dbd784..3aecebf6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -49,6 +49,9 @@ ci: stage: ci image: nixos/nix:2.20.4 script: + # Cache attic client + - ./bin/nix-build-and-cache --inputs-from . attic + # Cache the inputs required for the devShell - ./bin/nix-build-and-cache .#devShells.x86_64-linux.default.inputDerivation diff --git a/bin/nix-build-and-cache b/bin/nix-build-and-cache index 967c16ae..42c37709 100755 --- a/bin/nix-build-and-cache +++ b/bin/nix-build-and-cache @@ -2,11 +2,13 @@ set -euo pipefail -# The first argument must be the desired installable -INSTALLABLE="$1" - -# Build the installable and forward any other arguments too -nix build "$@" +# Build the installable and forward any other arguments too. Also, use +# nix-output-monitor instead if it's available. +if command -v nom &> /dev/null; then + nom build "$@" +else + nix build "$@" +fi if [ ! -z ${ATTIC_TOKEN+x} ]; then nix run --inputs-from . attic -- \ @@ -15,12 +17,15 @@ 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) + # Push the target installable and its build dependencies nix run --inputs-from . attic -- \ push \ conduit \ - "$(nix path-info "$INSTALLABLE" --derivation)" \ - "$(nix path-info "$INSTALLABLE")" + "${outputs[@]}" \ + "${derivations[@]}" else echo "\$ATTIC_TOKEN is unset, skipping uploading to the binary cache" fi