Merge pull request #34 from devholic/master #272
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI/CD | |
on: | |
pull_request: | |
push: | |
branches: | |
- master | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
build: | |
strategy: | |
fail-fast: true | |
matrix: | |
os: [ubuntu-22.04, macos-12] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./ | |
with: | |
nix_archives_url: https://github.com/nixbuild/nix-quick-install-action/releases/download/v25 | |
nix_version: 2.16.1 | |
- uses: cachix/cachix-action@v12 | |
with: | |
name: nixbuild | |
signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' | |
- name: Build nix archives | |
id: build-nix-archives | |
run: | | |
nix build .#nix-archives | |
echo "result=$(readlink result)" >> "$GITHUB_OUTPUT" | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: nix-archives-${{ runner.os }} | |
path: ${{ steps.build-nix-archives.outputs.result }}/ | |
test: | |
needs: build | |
strategy: | |
fail-fast: true | |
matrix: | |
os: | |
- ubuntu-22.04 | |
- ubuntu-20.04 | |
- macos-12 | |
- macos-11 | |
nix_version: | |
- 2.16.1 | |
- 2.15.1 | |
- 2.14.1 | |
- 2.13.3 | |
- 2.12.1 | |
- 2.11.1 | |
- 2.10.3 | |
- 2.9.2 | |
- 2.8.1 | |
- 2.7.0 | |
- 2.6.1 | |
- 2.5.1 | |
- 2.4 | |
- 2.3.16 | |
- 2.2.2 | |
- 2.1.3 | |
- 2.0.4 | |
exclude: | |
- os: macos-11 | |
nix_version: 2.0.4 | |
- os: macos-12 | |
nix_version: 2.0.4 | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: divnix/nix-cache-action@v3.0.11-nix | |
with: | |
key: test-${{matrix.os}}-nix-${{matrix.nix_version}}-${{github.run_id}}-${{github.run_attempt}} | |
path: | | |
/nix | |
~/.cache/nix | |
- uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
id: nix-archives | |
with: | |
name: nix-archives-${{ runner.os }} | |
- uses: ./ | |
with: | |
nix_archives_url: file://${{steps.nix-archives.outputs.download-path}} | |
nix_version: ${{ matrix.nix_version }} | |
nix_on_tmpfs: true | |
- name: Test nix | |
run: nix-build -v --version | |
- name: Add to store | |
run: | | |
file="$(mktemp)" | |
echo "$RANDOM" > "$file" | |
path="$(nix-store --add "$file")" | |
mkdir -p ~/.cache/nix | |
ln -s "$path" ~/.cache/nix/test-path | |
test-cachix: | |
needs: build | |
strategy: | |
fail-fast: true | |
matrix: | |
os: | |
- ubuntu-22.04 | |
- ubuntu-20.04 | |
- macos-12 | |
- macos-11 | |
nix_version: | |
- 2.16.1 | |
- 2.15.1 | |
- 2.14.1 | |
- 2.13.3 | |
- 2.12.1 | |
- 2.11.1 | |
- 2.10.3 | |
- 2.9.2 | |
- 2.8.1 | |
- 2.7.0 | |
- 2.6.1 | |
- 2.5.1 | |
- 2.4 | |
- 2.3.16 | |
- 2.2.2 | |
include: | |
- nix_version: 2.12.1 | |
nix_conf: experimental-features = nix-command | |
- nix_version: 2.11.1 | |
nix_conf: experimental-features = nix-command | |
- nix_version: 2.10.3 | |
nix_conf: experimental-features = nix-command | |
- nix_version: 2.9.2 | |
nix_conf: experimental-features = nix-command | |
- nix_version: 2.8.1 | |
nix_conf: experimental-features = nix-command | |
- nix_version: 2.7.0 | |
nix_conf: experimental-features = nix-command | |
- nix_version: 2.6.1 | |
nix_conf: experimental-features = nix-command | |
- nix_version: 2.5.1 | |
nix_conf: experimental-features = nix-command | |
- nix_version: 2.4 | |
nix_conf: experimental-features = nix-command | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
id: nix-archives | |
with: | |
name: nix-archives-${{ runner.os }} | |
- uses: ./ | |
with: | |
nix_archives_url: file://${{steps.nix-archives.outputs.download-path}} | |
nix_version: ${{ matrix.nix_version }} | |
nix_conf: ${{ matrix.nix_conf }} | |
- uses: cachix/cachix-action@v12 | |
with: | |
name: nixbuild | |
signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' | |
skipPush: true | |
- name: Verify nix config | |
run: | | |
if ! egrep -q "^substituters = https://cache.nixos.org https://nixbuild.cachix.org$" "$HOME/.config/nix/nix.conf"; then | |
echo "Invalid substituters config" | |
exit 1 | |
fi | |
- name: Push to Cachix | |
if: github.event_name == 'push' && github.repository_owner == 'nixbuild' | |
run: | | |
dd if=/dev/urandom of=random count=1 | |
cachix push nixbuild "$(nix add-to-store random)" | |
test-overwrite-nix-dir: | |
needs: test | |
strategy: | |
fail-fast: true | |
matrix: | |
os: | |
- ubuntu-22.04 | |
- ubuntu-20.04 | |
- macos-12 | |
- macos-11 | |
nix_version: | |
- 2.16.1 | |
- 2.15.1 | |
- 2.14.1 | |
- 2.13.3 | |
- 2.12.1 | |
- 2.11.1 | |
- 2.10.3 | |
- 2.9.2 | |
- 2.8.1 | |
- 2.7.0 | |
- 2.6.1 | |
- 2.5.1 | |
- 2.4 | |
- 2.3.16 | |
- 2.2.2 | |
- 2.1.3 | |
- 2.0.4 | |
exclude: | |
- os: macos-11 | |
nix_version: 2.0.4 | |
- os: macos-12 | |
nix_version: 2.0.4 | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
id: nix-archives | |
with: | |
name: nix-archives-${{ runner.os }} | |
# For MacOS, we'll run our action before restoring the cache, in order | |
# to create the /nix directory, so the cache can be restored. Then we run | |
# the action again after the cache has been restored. I guess | |
# divnix/nix-cache-action could be changed to create the /nix directory | |
# on MacOS. | |
- name: Create /nix on MacOS | |
if: ${{ startsWith(matrix.os, 'macos-') }} | |
uses: ./ | |
with: | |
nix_archives_url: file://${{steps.nix-archives.outputs.download-path}} | |
nix_version: ${{ matrix.nix_version }} | |
- name: Restore cache | |
uses: divnix/nix-cache-action@v3.0.11-nix | |
with: | |
key: test-${{matrix.os}}-nix-${{matrix.nix_version}}-${{github.run_id}}-${{github.run_attempt}} | |
path: | | |
/nix | |
~/.cache/nix | |
- uses: ./ | |
with: | |
nix_archives_url: file://${{steps.nix-archives.outputs.download-path}} | |
nix_version: ${{ matrix.nix_version }} | |
nix_on_tmpfs: true | |
- name: Test nix | |
run: nix-build -v --version | |
- name: Verify store path | |
run: | | |
stat ~/.cache/nix/test-path | |
nix-store --verify-path ~/.cache/nix/test-path | |
test-nix-config-eval: | |
needs: build | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
id: nix-archives | |
with: | |
name: nix-archives-${{ runner.os }} | |
- uses: ./ | |
with: | |
nix_archives_url: file://${{steps.nix-archives.outputs.download-path}} | |
- name: Verify Nix config | |
run: | | |
nix build --version # check if new style command is enabled | |
nix show-config | grep -q 'stalled-download-timeout = 333' | |
release: | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
- test | |
- test-cachix | |
- test-overwrite-nix-dir | |
- test-nix-config-eval | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
with: | |
name: nix-archives-Linux | |
path: /tmp/archives | |
- uses: actions/download-artifact@v3 | |
with: | |
name: nix-archives-macOS | |
path: /tmp/archives | |
- uses: ./ | |
with: | |
nix_archives_url: file:///tmp/archives | |
nix_version: 2.16.1 | |
- uses: cachix/cachix-action@v12 | |
with: | |
name: nixbuild | |
signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' | |
- name: Build release script | |
run: nix build .#release | |
- name: Release if needed | |
run: ./result/bin/release /tmp/archives ./RELEASE | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |