Skip to content

.github: Restart nix-daemon after applying attic changes to configura… #350

.github: Restart nix-daemon after applying attic changes to configura…

.github: Restart nix-daemon after applying attic changes to configura… #350

Workflow file for this run

name: check
on:
push:
pull_request:
workflow_dispatch:
jobs:
bootstrap:
name: Bootstrap nix.conf options
runs-on: ubuntu-latest
outputs:
substituters: ${{ steps.getconf.outputs.substituters }}
trustedPublicKeys: ${{ steps.getconf.outputs.trustedPublicKeys }}
steps:
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
- id: getconf
name: Get nix.conf configuration options
run: |
nix eval '.#extra.substituters' --apply 'builtins.toString' | tr -d '"' | awk '{print "substituters="$0}' | tee -a "$GITHUB_OUTPUT"
nix eval '.#extra.trusted-public-keys' --apply 'builtins.toString' | tr -d '"' | awk '{print "trustedPublicKeys="$0}' | tee -a "$GITHUB_OUTPUT"
attic:
name: Build attic-client
runs-on: ubuntu-latest
needs: bootstrap
steps:
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
with:
extra-conf: |
extra-substituters = ${{ needs.bootstrap.outputs.substituters }}
extra-trusted-public-keys = ${{ needs.bootstrap.outputs.trustedPublicKeys }}
- uses: DeterminateSystems/magic-nix-cache-action@main
- name: Build attic
timeout-minutes: 60
run: |
nix build '.#attic-client'
nix run '.#attic-client' -- login --set-default ci "$ATTIC_SERVER" "$ATTIC_TOKEN"
nix-store --query --requisites --include-outputs ./result | xargs nix run '.#attic-client' -- push "ci:$ATTIC_CACHE"
env:
ATTIC_SERVER: ${{ secrets.ATTIC_SERVER }}
ATTIC_CACHE: ${{ secrets.ATTIC_CACHE }}
ATTIC_TOKEN: ${{ secrets.ATTIC_TOKEN }}
prebuild:
name: Get nixosConfiguration outputs of the flake to populate build matrix
needs: attic
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.getconfigs.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
- name: Get configurations
id: getconfigs
run: >
nix flake show --json |
jq -c '.nixosConfigurations | keys | {configuration: .}' |
awk '{print "matrix="$0}' >> $GITHUB_OUTPUT
build:
name: build nixos configurations
runs-on: ubuntu-latest
needs:
- prebuild
- bootstrap
strategy:
matrix: ${{ fromJson(needs.prebuild.outputs.matrix) }}
fail-fast: false
steps:
# Taken from https://github.com/lilyinstarlight/foosteros/blob/aa611d0cf03bd82f6c1c701e73f86f27abb8d8e4/.github/workflows/installer.yml
# MIT licensed
- name: Free up runner disk space
run: |
# Large docker images
sudo docker image prune --all --force
# Large packages
sudo apt-get purge -y '^llvm-.*' 'php.*' '^mongodb-.*' '^mysql-.*' azure-cli google-cloud-cli google-chrome-stable firefox powershell microsoft-edge-stable
sudo apt-get autoremove -y
sudo apt-get clean
# Large folders
sudo rm -rf /var/lib/apt/lists/* /opt/hostedtoolcache /usr/local/games /usr/local/sqlpackage /usr/local/.ghcup /usr/local/share/powershell /usr/local/share/edge_driver
sudo rm -rf /usr/local/share/gecko_driver /usr/local/share/chromium /usr/local/share/chromedriver-linux64 /usr/local/share/vcpkg /usr/local/lib/python*
sudo rm -rf /usr/local/lib/node_modules /usr/local/julia* /opt/mssql-tools /etc/skel /usr/share/vim /usr/share/postgresql /usr/share/man /usr/share/apache-maven-*
sudo rm -rf /usr/share/R /usr/share/alsa /usr/share/miniconda /usr/share/grub /usr/share/gradle-* /usr/share/locale /usr/share/texinfo /usr/share/kotlinc /usr/share/swift
sudo rm -rf /usr/share/doc /usr/share/az_9.3.0 /usr/share/sbt /usr/share/ri /usr/share/icons /usr/share/java /usr/share/fonts /usr/lib/google-cloud-sdk /usr/lib/jvm
sudo rm -rf /usr/lib/mono /usr/lib/R /usr/lib/postgresql /usr/lib/heroku /usr/lib/gcc
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
with:
extra-conf: |
extra-substituters = ${{ needs.bootstrap.outputs.substituters }}
extra-trusted-public-keys = ${{ needs.bootstrap.outputs.trustedPublicKeys }}
- uses: DeterminateSystems/magic-nix-cache-action@main
- name: Install and configure attic
continue-on-error: true
timeout-minutes: 20
run: |
echo ATTIC_CACHE=$ATTIC_CACHE >>$GITHUB_ENV
nix profile install '.#attic-client'
attic login --set-default ci "$ATTIC_SERVER" "$ATTIC_TOKEN"
attic use "$ATTIC_CACHE"
sudo nix-daemon -k
env:
ATTIC_SERVER: ${{ secrets.ATTIC_SERVER }}
ATTIC_CACHE: ${{ secrets.ATTIC_CACHE }}
ATTIC_TOKEN: ${{ secrets.ATTIC_TOKEN }}
- name: Build configuration ${{ matrix.configuration }}
timeout-minutes: 120
run: |
if [[ "${{ matrix.configuration }}" =~ ^iso- ]] ; then
nix build '.#nixosConfigurations.${{ matrix.configuration }}.config.system.build.isoImage'
else
nix build '.#nixosConfigurations.${{ matrix.configuration }}.config.system.build.toplevel'
fi
nix-store --query --requisites --include-outputs ./result | xargs attic push "ci:$ATTIC_CACHE"
prebuildpkgs:
name: Get package outputs of the flake to populate build matrix
needs: attic
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.getpkgs.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
- name: Get packages
id: getpkgs
run: >
nix flake show --json |
jq -c '.packages."x86_64-linux" | keys | {package: .}' |
awk '{print "matrix="$0}' >> $GITHUB_OUTPUT
buildpkgs:
name: build nix packages
runs-on: ubuntu-latest
needs:
- prebuildpkgs
- bootstrap
strategy:
matrix: ${{ fromJson(needs.prebuildpkgs.outputs.matrix) }}
fail-fast: false
steps:
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
with:
extra-conf: |
extra-substituters = ${{ needs.bootstrap.outputs.substituters }}
extra-trusted-public-keys = ${{ needs.bootstrap.outputs.trustedPublicKeys }}
- uses: DeterminateSystems/magic-nix-cache-action@main
- name: Install and configure attic
timeout-minutes: 20
continue-on-error: true
run: |
echo ATTIC_CACHE=$ATTIC_CACHE >>$GITHUB_ENV
nix profile install '.#attic-client'
attic login --set-default ci "$ATTIC_SERVER" "$ATTIC_TOKEN"
attic use "$ATTIC_CACHE"
sudo nix-daemon -k
env:
ATTIC_SERVER: ${{ secrets.ATTIC_SERVER }}
ATTIC_CACHE: ${{ secrets.ATTIC_CACHE }}
ATTIC_TOKEN: ${{ secrets.ATTIC_TOKEN }}
- name: Build package ${{ matrix.package }}
timeout-minutes: 120
run: |
nix build '.#${{ matrix.package }}'
nix-store --query --requisites --include-outputs ./result | xargs attic push "ci:$ATTIC_CACHE"
check:
name: check nix flake
needs:
- attic
- bootstrap
runs-on: ubuntu-latest
steps:
# Taken from https://github.com/lilyinstarlight/foosteros/blob/aa611d0cf03bd82f6c1c701e73f86f27abb8d8e4/.github/workflows/installer.yml
# MIT licensed
- name: Free up runner disk space
run: |
# Large docker images
sudo docker image prune --all --force
# Large packages
sudo apt-get purge -y '^llvm-.*' 'php.*' '^mongodb-.*' '^mysql-.*' azure-cli google-cloud-cli google-chrome-stable firefox powershell microsoft-edge-stable
sudo apt-get autoremove -y
sudo apt-get clean
# Large folders
sudo rm -rf /var/lib/apt/lists/* /opt/hostedtoolcache /usr/local/games /usr/local/sqlpackage /usr/local/.ghcup /usr/local/share/powershell /usr/local/share/edge_driver
sudo rm -rf /usr/local/share/gecko_driver /usr/local/share/chromium /usr/local/share/chromedriver-linux64 /usr/local/share/vcpkg /usr/local/lib/python*
sudo rm -rf /usr/local/lib/node_modules /usr/local/julia* /opt/mssql-tools /etc/skel /usr/share/vim /usr/share/postgresql /usr/share/man /usr/share/apache-maven-*
sudo rm -rf /usr/share/R /usr/share/alsa /usr/share/miniconda /usr/share/grub /usr/share/gradle-* /usr/share/locale /usr/share/texinfo /usr/share/kotlinc /usr/share/swift
sudo rm -rf /usr/share/doc /usr/share/az_9.3.0 /usr/share/sbt /usr/share/ri /usr/share/icons /usr/share/java /usr/share/fonts /usr/lib/google-cloud-sdk /usr/lib/jvm
sudo rm -rf /usr/lib/mono /usr/lib/R /usr/lib/postgresql /usr/lib/heroku /usr/lib/gcc
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
with:
extra-conf: |
extra-substituters = ${{ needs.bootstrap.outputs.substituters }}
extra-trusted-public-keys = ${{ needs.bootstrap.outputs.trustedPublicKeys }}
- uses: DeterminateSystems/magic-nix-cache-action@main
- name: Install and configure attic
timeout-minutes: 20
continue-on-error: true
run: |
echo ATTIC_CACHE=$ATTIC_CACHE >>$GITHUB_ENV
nix profile install '.#attic-client'
attic login --set-default ci "$ATTIC_SERVER" "$ATTIC_TOKEN"
attic use "$ATTIC_CACHE"
sudo nix-daemon -k
env:
ATTIC_SERVER: ${{ secrets.ATTIC_SERVER }}
ATTIC_CACHE: ${{ secrets.ATTIC_CACHE }}
ATTIC_TOKEN: ${{ secrets.ATTIC_TOKEN }}
- name: Run flake checks
run: |
attic watch-store "ci:$ATTIC_CACHE" &
nix flake check
kill %1