diff --git a/.forgejo/workflows/eval-shell.yaml b/.forgejo/workflows/eval-shell.yaml index 6f94edf..971801d 100644 --- a/.forgejo/workflows/eval-shell.yaml +++ b/.forgejo/workflows/eval-shell.yaml @@ -8,7 +8,7 @@ jobs: STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} STORE_USER: admin name: Build and cache shell - run: nix-shell -A eval-shell --run "nix-cache -A devShell" + run: nix-shell -A eval-shell --run "nix-instantiate-and-cache -A devShell" name: Build the shell on: pull_request: diff --git a/default.nix b/default.nix index 3b34cfb..81ea098 100644 --- a/default.nix +++ b/default.nix @@ -180,7 +180,7 @@ in pre-commit.shellHook = git-checks.shellHook; check-workflows.shellHook = workflows.shellHook; eval-nodes.packages = [ scripts.cache-node ]; - eval-shell.packages = [ scripts.nix-cache ]; + eval-shell.packages = [ scripts.nix-instantiate-and-cache ]; }; }; } diff --git a/scripts/cache-node.sh b/scripts/cache-node.sh index 1445255..6d3c71d 100755 --- a/scripts/cache-node.sh +++ b/scripts/cache-node.sh @@ -35,23 +35,4 @@ esac drv=$(colmena eval --instantiate -E "{ nodes, ... }: nodes.${BUILD_NODE}.${toplevel_path}" --show-trace) # Build the derivation and send it to the great beyond -nix-store --query --requisites --force-realise --include-outputs "$drv" | grep -v '.*\.drv' >paths.txt - -if [ "$STORE_PASSWORD" == "" ]; then - echo "No password given for the remote cache, uploading cannot take place." - exit 0 -fi - -cat <.netrc -default -login $STORE_USER -password $STORE_PASSWORD -EOF - -nix copy \ - --extra-experimental-features nix-command \ - --to "$STORE_ENDPOINT?compression=none" \ - --netrc-file .netrc \ - "$(nix-store --realise "$drv")" - -rm .netrc +nix-cache "$drv" diff --git a/scripts/default.nix b/scripts/default.nix index 95f012b..9db49f0 100644 --- a/scripts/default.nix +++ b/scripts/default.nix @@ -20,8 +20,12 @@ let ; scripts = { - cache-node = [ colmena ]; - nix-cache = [ colmena ]; + cache-node = [ + colmena + self.nix-cache + ]; + nix-cache = [ ]; + nix-instantiate-and-cache = [ self.nix-cache ]; check-deployment = [ colmena jq @@ -30,13 +34,14 @@ let launch-vm = [ colmena ]; list-nodes = [ jq ]; }; + + self = mapAttrs ( + name: runtimeInputs: + writeShellApplication { + inherit name runtimeInputs; + + text = builtins.readFile ./${name}.sh; + } + ) scripts; in - -mapAttrs ( - name: runtimeInputs: - writeShellApplication { - inherit name runtimeInputs; - - text = builtins.readFile ./${name}.sh; - } -) scripts +self diff --git a/scripts/nix-cache.sh b/scripts/nix-cache.sh index b8a4d71..c0c116e 100644 --- a/scripts/nix-cache.sh +++ b/scripts/nix-cache.sh @@ -6,8 +6,15 @@ # Build the derivation and send it to the great beyond -drv=$(nix-instantiate "$@") -nix-store --query --requisites --force-realise --include-outputs "$drv" | grep -v '.*\.drv' > paths.txt +if [ $# -eq 0 ]; then + echo "No arguments provided. Please provide a drv path." + exit 1 +elif [ $# -gt 1 ]; then + echo "Too many arguments provided." + exit 1 +fi + +nix-store --query --requisites --force-realise --include-outputs "$1" | grep -v '.*\.drv' > paths.txt if [ "$STORE_PASSWORD" == "" ]; then echo "No password given for the remote cache, uploading cannot take place." @@ -24,6 +31,6 @@ nix copy \ --extra-experimental-features nix-command \ --to "$STORE_ENDPOINT?compression=none" \ --netrc-file .netrc \ - "$(nix-store --realise "$drv")" + "$(nix-store --realise "$1")" rm .netrc diff --git a/scripts/nix-instantiate-and-cache.sh b/scripts/nix-instantiate-and-cache.sh new file mode 100644 index 0000000..90e0e7a --- /dev/null +++ b/scripts/nix-instantiate-and-cache.sh @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: 2024 Maurice Debray +# +# SPDX-License-Identifier: EUPL-1.2 + +nix-cache "$(nix-instantiate "$@")" diff --git a/workflows/eval-shell.nix b/workflows/eval-shell.nix index a350542..f9d5dcd 100644 --- a/workflows/eval-shell.nix +++ b/workflows/eval-shell.nix @@ -16,7 +16,7 @@ { uses = "actions/checkout@v3"; } { name = "Build and cache shell"; - run = "nix-shell -A eval-shell --run \"nix-cache -A devShell\""; + run = ''nix-shell -A eval-shell --run "nix-instantiate-and-cache -A devShell"''; env = { STORE_ENDPOINT = "https://tvix-store.dgnum.eu/infra-signing/"; STORE_USER = "admin";