Skip to content

Cache NixOS system closures in Garnix #129

Cache NixOS system closures in Garnix

Cache NixOS system closures in Garnix #129

Workflow file for this run

name: Build NixOS Image
on:
workflow_dispatch:
push:
branches:
- main
jobs:
build-image:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Nix
uses: cachix/install-nix-action@v27
with:
nix_path: nixpkgs=channel:nixos-unstable
extra_nix_config: |
extra-substituters = https://cache.garnix.io
extra-trusted-public-keys = cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=
- name: Cache Nix store
uses: nix-community/cache-nix-action@v5
with:
nix: false
primary-key: nix-${{ runner.os }}-${{ hashFiles('**/flake.lock') }}
restore-prefixes-first-match: |
nix-${{ runner.os }}-
paths-linux: |
/nix/store
- name: Free disk space
run: |
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc /usr/local/share/boost /opt/hostedtoolcache
df -h
- name: Install tooling
run: |
nix profile install \
nixpkgs#nixos-generators \
nixpkgs#awscli2 \
nixpkgs#age \
nixpkgs#jq
- name: Write agenix image key
env:
CLAWDINATOR_AGE_KEY: ${{ secrets.CLAWDINATOR_AGE_KEY }}
run: |
mkdir -p nix/keys
printf '%s' "${CLAWDINATOR_AGE_KEY}" > nix/keys/clawdinator.agekey
chmod 600 nix/keys/clawdinator.agekey
- name: Fetch age secrets
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
S3_BUCKET: ${{ secrets.S3_BUCKET }}
run: |
mkdir -p nix/age-secrets
aws s3 sync "s3://${S3_BUCKET}/age-secrets" nix/age-secrets
for file in \
nix/age-secrets/clawdinator-github-app.pem.age \
nix/age-secrets/clawdinator-discord-token.age \
nix/age-secrets/clawdinator-anthropic-api-key.age \
nix/age-secrets/clawdinator-openai-api-key-peter-2.age
do
test -f "$file"
done
- name: Mint GitHub App token
env:
GITHUB_APP_ID: "2607181"
GITHUB_APP_INSTALLATION_ID: "102951645"
run: |
age -d -i nix/keys/clawdinator.agekey \
-o /tmp/clawdinator-github-app.pem \
nix/age-secrets/clawdinator-github-app.pem.age
export GITHUB_APP_PEM_FILE=/tmp/clawdinator-github-app.pem
token="$(scripts/mint-github-app-token.sh)"
echo "GITHUB_TOKEN=${token}" >> "${GITHUB_ENV}"
- name: Prepare repo seeds
env:
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
run: |
scripts/prepare-repo-seeds.sh repo-seeds
- name: Build image
run: scripts/build-image.sh
- name: Upload image to S3
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
S3_BUCKET: ${{ secrets.S3_BUCKET }}
run: |
key="$(scripts/upload-image.sh)"
echo "S3_KEY=${key}" >> "${GITHUB_ENV}"
- name: Import image into AMI
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
S3_BUCKET: ${{ secrets.S3_BUCKET }}
S3_KEY: ${{ env.S3_KEY }}
AMI_DESCRIPTION: clawdinator-nixos
run: |
ami_id="$(scripts/import-image.sh)"
echo "AMI_ID=${ami_id}" >> "${GITHUB_ENV}"