85 lines
3.0 KiB
YAML
85 lines
3.0 KiB
YAML
name: Nix CI
|
|
on:
|
|
push:
|
|
# don't run on tags, run on commits
|
|
# https://github.com/orgs/community/discussions/25615
|
|
tags-ignore:
|
|
- "**"
|
|
branches:
|
|
- main
|
|
merge_group:
|
|
schedule:
|
|
- cron: 0 0 * * *
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
# Merge similar `individual` caches
|
|
# Purge `individual` caches and old `common` caches
|
|
# Save new `common` caches
|
|
merge-similar-caches:
|
|
name: Merge similar caches
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest]
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- name: Checkout this repo
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install nix
|
|
uses: https://github.com/DeterminateSystems/nix-installer-action@main
|
|
|
|
- uses: nix-community/cache-nix-action@v6
|
|
name: create and purge common cache
|
|
with:
|
|
primary-key: similar-cache-${{ matrix.os }}-common-${{ hashFiles('flake.lock') }}
|
|
# if no hit on the primary key, restore individual caches that match `ci.yaml`
|
|
restore-prefixes-all-matches: |
|
|
similar-cache-${{ matrix.os }}-individual-${{ hashFiles('flake.lock', '*.nix') }}
|
|
# do purge caches
|
|
purge: true
|
|
# purge old versions of the `common` cache and any versions of individual caches
|
|
purge-prefixes: |
|
|
similar-cache-${{ matrix.os }}-common-
|
|
# created more than 0 seconds ago relative to the start of the `Post Restore` phase
|
|
purge-created: 0
|
|
# except the version with the `primary-key`, if it exists
|
|
purge-primary-key: never
|
|
|
|
- uses: nix-community/cache-nix-action@v6
|
|
name: purge some individual caches
|
|
with:
|
|
primary-key: similar-cache-${{ matrix.os }}-common-${{ hashFiles('flake.lock') }}
|
|
# if no hit on the primary key, restore individual caches that match `ci.yaml`
|
|
restore-prefixes-all-matches: |
|
|
similar-cache-${{ matrix.os }}-individual-${{ hashFiles('flake.lock', '*.nix') }}
|
|
# do purge caches
|
|
purge: true
|
|
# purge old versions of the `common` cache and any versions of individual caches
|
|
purge-prefixes: |
|
|
similar-cache-${{ matrix.os }}-individual-
|
|
# created more than 0 seconds ago relative to the start of the `Post Restore` phase
|
|
purge-created: 259200
|
|
# except the version with the `primary-key`, if it exists
|
|
purge-primary-key: never
|
|
|
|
# Check that the `common` cache is restored correctly
|
|
merge-similar-caches-check:
|
|
name: Check a `common` cache is restored correctly
|
|
needs: merge-similar-caches
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest]
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- name: Checkout this repo
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install nix
|
|
uses: https://github.com/DeterminateSystems/nix-installer-action@main
|
|
|
|
- name: Restore Nix store
|
|
- uses: nix-community/cache-nix-action@v6
|
|
with:
|
|
primary-key: similar-cache-${{ matrix.os }}-common-${{ hashFiles('flake.lock') }}
|