Skip to content

.github: Added attic configuration and more builders to workflows #332

.github: Added attic configuration and more builders to workflows

.github: Added attic configuration and more builders to workflows #332

Workflow file for this run

name: check

Check failure on line 1 in .github/workflows/main.yml

View workflow run for this annotation

GitHub Actions / check

Invalid workflow file

The workflow is not valid. .github/workflows/main.yml: Anchors are not currently supported. Remove the anchor 'free-space'
on:
push:
pull_request:
workflow_dispatch:
jobs:
prebuild:
name: Get nixosConfiguration outputs of the flake to populate build matrix
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
strategy:
matrix: ${{ fromJson(needs.prebuild.outputs.matrix) }}
steps:
# Taken from https://github.com/lilyinstarlight/foosteros/blob/aa611d0cf03bd82f6c1c701e73f86f27abb8d8e4/.github/workflows/installer.yml
# MIT licensed
- &free-space
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
- &install-nix
uses: DeterminateSystems/nix-installer-action@main
with:
extra-conf: |
extra-trusted-substituters = https://helix.cachix.org https://cache.thalheim.io https://nix-community.cachix.org https://cache.garnix.io https://numtide.cachix.org https://staging.attic.rs/attic-ci
extra-trusted-public-keys = helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= cache.thalheim.io-1:R7msbosLEZKrxk/lKxf9BTjOOH7Ax3H0Qj0/6wiHOgc= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g= numtide.cachix.org-1:2ps1kLBUWjxIneOy1Ik6cQjb41X0iXVXeHigGmycPPE= attic-ci:U5Sey4mUxwBXM3iFapmP0/ogODXywKLRNgRPQpEXxbo=
- uses: DeterminateSystems/magic-nix-cache-action@main
- &install-attic
name: Install and configure attic
continue-on-error: true
run: |
echo ATTIC_CACHE=$ATTIC_CACHE >>$GITHUB_ENV
nix profile install 'github:zhaofengli/attic#attic-client'
export PATH=$HOME/.nix-profile/bin:$PATH
attic login --set-default ci "$ATTIC_SERVER" "$ATTIC_TOKEN"
attic use "$ATTIC_CACHE"
env:
ATTIC_SERVER: ${{ secrets.ATTIC_SERVER }}
ATTIC_CACHE: ${{ secrets.ATTIC_CACHE }}
ATTIC_TOKEN: ${{ secrets.ATTIC_TOKEN }}
- name: Build configuration ${{ matrix.configuration }}
run: |
export PATH=$HOME/.nix-profile/bin:$PATH
attic watch-store "ci:$ATTIC_CACHE" &
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
kill %1
prebuildpkgs:
name: Get package outputs of the flake to populate build matrix
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 '.packages."x86_64-linux" | keys | {package: .}' |
awk '{print "matrix="$0}' >> $GITHUB_OUTPUT
buildpkgs:
name: build nixos configurations
runs-on: ubuntu-latest
needs: prebuildpkgs
strategy:
matrix: ${{ fromJson(needs.prebuildpkgs.outputs.matrix) }}
steps:
- *free-space
- uses: actions/checkout@v4
- *install-nix
- uses: DeterminateSystems/magic-nix-cache-action@main
- *install-attic
- name: Build package ${{ matrix.package }}
run: |
export PATH=$HOME/.nix-profile/bin:$PATH
attic watch-store "ci:$ATTIC_CACHE" &
nix build '.#${{ matrix.configuration }}'
kill %1
check:
name: check nix flake
runs-on: ubuntu-latest
steps:
- *free-space
- uses: actions/checkout@v4
- *install-nix
- uses: DeterminateSystems/magic-nix-cache-action@main
- *install-attic
- name: Run flake checks
run: |
export PATH=$HOME/.nix-profile/bin:$PATH
attic watch-store "ci:$ATTIC_CACHE" &
nix flake check
kill %1