2020-11-09 17:04:43 +02:00
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
|
|
# Ensure that binary substitution works properly with ca derivations
|
|
|
|
|
|
|
|
|
|
source common.sh
|
|
|
|
|
|
|
|
|
|
sed -i 's/experimental-features .*/& ca-derivations ca-references/' "$NIX_CONF_DIR"/nix.conf
|
|
|
|
|
|
2021-03-26 18:10:15 +02:00
|
|
|
|
rm -rf $TEST_ROOT/binary_cache
|
|
|
|
|
|
2021-04-22 18:54:02 +03:00
|
|
|
|
export REMOTE_STORE_DIR=$TEST_ROOT/binary_cache
|
|
|
|
|
export REMOTE_STORE=file://$REMOTE_STORE_DIR
|
2020-11-09 17:04:43 +02:00
|
|
|
|
|
|
|
|
|
buildDrvs () {
|
|
|
|
|
nix build --file ./content-addressed.nix -L --no-link "$@"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Populate the remote cache
|
2021-03-26 18:10:15 +02:00
|
|
|
|
clearStore
|
2021-05-19 15:51:34 +03:00
|
|
|
|
nix copy --to $REMOTE_STORE --file ./content-addressed.nix
|
2020-11-09 17:04:43 +02:00
|
|
|
|
|
|
|
|
|
# Restart the build on an empty store, ensuring that we don't build
|
|
|
|
|
clearStore
|
2021-05-19 15:51:34 +03:00
|
|
|
|
buildDrvs --substitute --substituters $REMOTE_STORE --no-require-sigs -j0 transitivelyDependentCA
|
|
|
|
|
# Check that the thing we’ve just substituted has its realisation stored
|
|
|
|
|
nix realisation info --file ./content-addressed.nix transitivelyDependentCA
|
|
|
|
|
# Check that its dependencies have it too
|
|
|
|
|
nix realisation info --file ./content-addressed.nix dependentCA rootCA
|
2020-11-09 17:04:43 +02:00
|
|
|
|
|
2021-04-22 18:54:02 +03:00
|
|
|
|
# Same thing, but
|
|
|
|
|
# 1. With non-ca derivations
|
|
|
|
|
# 2. Erasing the realisations on the remote store
|
|
|
|
|
#
|
|
|
|
|
# Even in that case, realising the derivations should still produce the right
|
|
|
|
|
# realisations on the local store
|
|
|
|
|
#
|
|
|
|
|
# Regression test for #4725
|
|
|
|
|
clearStore
|
|
|
|
|
nix build --file ../simple.nix -L --no-link --post-build-hook ../push-to-store.sh
|
|
|
|
|
clearStore
|
|
|
|
|
rm -r "$REMOTE_STORE_DIR/realisations"
|
|
|
|
|
nix build --file ../simple.nix -L --no-link --substitute --substituters "$REMOTE_STORE" --no-require-sigs -j0
|
2021-04-23 10:34:16 +03:00
|
|
|
|
# There's no easy way to check whether a realisation is present on the local
|
|
|
|
|
# store − short of manually querying the db, but the build environment doesn't
|
|
|
|
|
# have the sqlite binary − so we instead push things again, and check that the
|
|
|
|
|
# realisations have correctly been pushed to the remote store
|
|
|
|
|
nix copy --to "$REMOTE_STORE" --file ../simple.nix
|
|
|
|
|
if [[ -z "$(ls "$REMOTE_STORE_DIR/realisations")" ]]; then
|
2021-04-22 18:54:02 +03:00
|
|
|
|
echo "Realisations not rebuilt"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
2021-05-06 17:45:09 +03:00
|
|
|
|
|
|
|
|
|
# Test the local realisation disk cache
|
|
|
|
|
buildDrvs --post-build-hook ../push-to-store.sh
|
|
|
|
|
clearStore
|
|
|
|
|
# Add the realisations of rootCA to the cachecache
|
|
|
|
|
clearCacheCache
|
|
|
|
|
export _NIX_FORCE_HTTP=1
|
|
|
|
|
buildDrvs --substitute --substituters $REMOTE_STORE --no-require-sigs -j0
|
|
|
|
|
# Try rebuilding, but remove the realisations from the remote cache to force
|
|
|
|
|
# using the cachecache
|
|
|
|
|
clearStore
|
|
|
|
|
rm $REMOTE_STORE_DIR/realisations/*
|
|
|
|
|
buildDrvs --substitute --substituters $REMOTE_STORE --no-require-sigs -j0
|