#!/usr/bin/env bash set -euo pipefail # 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 -- \ login \ conduit \ "${ATTIC_ENDPOINT:-https://attic.conduit.rs/conduit}" \ "$ATTIC_TOKEN" 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[*]}" ) else echo "\$ATTIC_TOKEN is unset, skipping uploading to the binary cache" fi