48 lines
1.1 KiB
Bash
Executable File
48 lines
1.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Build a single-output derivation and store it in 'cachixCache'.
|
|
# Skip the build if it is already cached.
|
|
# Accepts the same arguments as nix-instantiate.
|
|
|
|
set -euo pipefail
|
|
|
|
CACHIX_SIGNING_KEY="${CACHIX_SIGNING_KEY:-}"
|
|
cachixCache=nix-bitcoin
|
|
|
|
trap 'echo Error at line $LINENO' ERR
|
|
|
|
tmpDir=$(mktemp -d -p /tmp)
|
|
trap 'rm -rf $tmpDir' EXIT
|
|
|
|
## Instantiate
|
|
|
|
time nix-instantiate "$@" --add-root "$tmpDir/drv" --indirect > /dev/null
|
|
printf "instantiated "; realpath "$tmpDir/drv"
|
|
|
|
outPath=$(nix-store --query "$tmpDir/drv")
|
|
if nix path-info --store "https://${cachixCache}.cachix.org" "$outPath" &>/dev/null; then
|
|
echo "$outPath has already been built successfully."
|
|
exit 0
|
|
fi
|
|
|
|
## Build
|
|
|
|
if [[ -v CIRRUS_CI ]]; then
|
|
cachix use "$cachixCache"
|
|
fi
|
|
|
|
if [[ $CACHIX_SIGNING_KEY ]]; then
|
|
# Speed up task by uploading store paths as soon as they are created
|
|
buildCmd="cachix watch-exec $cachixCache nix-build --"
|
|
else
|
|
buildCmd=nix-build
|
|
fi
|
|
|
|
$buildCmd --out-link "$tmpDir/result" "$tmpDir/drv" >/dev/null
|
|
|
|
if [[ $CACHIX_SIGNING_KEY ]]; then
|
|
cachix push "$cachixCache" "$outPath"
|
|
fi
|
|
|
|
echo "$outPath"
|