diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d1b9c97..a4f1729 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -29,18 +29,53 @@ jobs: ssh-agent -a $SSH_AUTH_SOCK > /dev/null ssh-add /home/runner/.ssh/* ssh-keyscan ${{ secrets.INSTANCE_IP }} >> /home/runner/.ssh/known_hosts - - uses: cachix/install-nix-action@v14.1 + - uses: cachix/install-nix-action@v17 with: extra_nix_config: | + # save space on disk and in cache + auto-optimise-store = true + # keep all store paths necessary to build the outputs + keep-outputs = true + keep-derivations = true + # Enable flakes experimental-features = nix-command flakes + # Deploy tokens access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} - uses: actions/cache@v2 with: path: | /nix/store - key: ${{ runner.os }}-${{ hashFiles('flake.lock') }} + key: nki-nix-${{ github.sha }} + restore-keys: | + nki-nix- + path: | + nix_store_dir + nix_store_db.sqlite + - name: restore cached nix store + run: | + if [ -e nix_store_db.sqlite ]; then + sudo systemctl stop nix-daemon + # put cached store paths back in their proper locations + sudo rm -rf /nix/store /nix/var/nix/db/db.sqlite + sudo mv nix_store_dir /nix/store + sudo cp nix_store_db.sqlite /nix/var/nix/db/db.sqlite + # fix store permissions + sudo chmod 1775 /nix/store + sudo chown root:nixbld /nix/store + sudo chmod 0644 /nix/var/nix/db/db.sqlite + sudo chown -R root:root /nix/store /nix/var/nix/db/db.sqlite + sudo systemctl start nix-daemon + fi - name: Deploy with deploy-rs env: SSH_AUTH_SOCK: /tmp/ssh_agent.sock run: | nix run -L github:Serokell/deploy-rs . -- --hostname ${{ secrets.INSTANCE_IP }} -- -L + - name: prepare nix store for caching + run: | + # delete old stuff not relevant to this build + nix store gc + sudo systemctl stop nix-daemon + # move store to a place where the cache action can read it + sudo mv /nix/store nix_store_dir + sudo mv /nix/var/nix/db/db.sqlite nix_store_db.sqlite