Skip to content

chore: build action #947

chore: build action

chore: build action #947

Workflow file for this run

name: Nix CI
"on":
push:
# don't run on tags, run on commits
# https://github.com/orgs/community/discussions/25615
tags-ignore:
- '**'
branches:
- '**'
pull_request: {}
release:
types: [edited]
schedule:
- cron: 0 0 * * *
workflow_dispatch: {}
env:
# https://stackoverflow.com/a/71158878
git_pull: git pull --rebase origin ${{ github.head_ref || github.ref_name }}
jobs:
# Build the action
# Commit and push the built code
build:
name: Build the action
runs-on: ubuntu-20.04
permissions:
contents: write
actions: write
steps:
- uses: actions/checkout@v4
- uses: nixbuild/nix-quick-install-action@v26
- name: Restore and save Nix store
uses: ./.
with:
primary-key: build-${{ runner.os }}-${{ hashFiles('**/package-lock.json', 'package.json', 'flake.nix', 'flake.lock') }}
paths: |
~/.npm
# do purge caches
purge: true
# purge all versions of the cache
purge-prefixes: build-${{ runner.os }}-
# 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
# # Uncomment to debug this job
# - name: Setup tmate session
# uses: mxschmitt/action-tmate@v3
- name: Configure github-actions bot
run: |
git config --global user.name github-actions
git config --global user.email [email protected]
- name: Rebase
run: ${{ env.git_pull }}
- name: Install packages & Build the action
run: nix run .#install
- name: Update docs
run: nix run .#write
- name: Commit & push changes
run: |
git add dist
git commit -m "chore: build the action" || echo ""
git add .
git commit -m "chore: update docs" || echo ""
git push
# Make individual caches with an `id` infix (`id` caches)
# Restore `id` or `common` caches
# Usually, there should be no `id` caches as they're purged by `merge-similar-caches`
make-similar-caches:
name: Make similar caches
needs: build
permissions:
actions: write
strategy:
matrix:
os:
- macos-11
- macos-12
- ubuntu-20.04
- ubuntu-22.04
id:
- 1
- 2
runs-on: ${{ matrix.os }}
steps:
- name: Checkout this repo
uses: actions/checkout@v4
- name: Rebase
run: ${{ env.git_pull }}
- uses: nixbuild/nix-quick-install-action@v26
- name: Restore and save Nix store - ${{ matrix.id }}
uses: ./.
with:
# save a new cache every time `ci.yaml` changes
primary-key: similar-cache-${{ matrix.os }}-individual-${{ matrix.id }}-${{ hashFiles('.github/workflows/ci.yaml') }}
# otherwise, restore a common cache if and only if it matches the current `ci.yaml`
restore-prefixes-first-match: similar-cache-${{ matrix.os }}-common-${{ hashFiles('.github/workflows/ci.yaml') }}
# do purge caches
purge: true
# purge all versions of the cache
purge-prefixes: similar-cache-${{ matrix.os }}-individual-${{ matrix.id }}-
# 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
# Merge similar individual `id` caches
# Purge individual caches and old `common` caches
# Save new `common` caches
merge-similar-caches:
name: Merge similar caches
needs: make-similar-caches
permissions:
actions: write
strategy:
matrix:
os:
- macos-11
- macos-12
- ubuntu-20.04
- ubuntu-22.04
runs-on: ${{ matrix.os }}
steps:
- name: Checkout this repo
uses: actions/checkout@v4
- name: Rebase
run: ${{ env.git_pull }}
- uses: nixbuild/nix-quick-install-action@v26
- name: Restore and save Nix store
uses: ./.
with:
primary-key: similar-cache-${{ matrix.os }}-common-${{ hashFiles('.github/workflows/ci.yaml') }}
# when there's a common cache hit, don't restore individual caches
skip-restore-on-hit-primary-key: true
# otherwise, restore individual caches, but not their old versions
restore-prefixes-all-matches: |
similar-cache-${{ matrix.os }}-individual-1-${{ hashFiles('.github/workflows/ci.yaml') }}
similar-cache-${{ matrix.os }}-individual-2-${{ hashFiles('.github/workflows/ci.yaml') }}
# do purge caches
purge: true
# purge all versions of the cache
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
compare-run-times:
name: Job with caching
needs: merge-similar-caches
permissions:
actions: write
strategy:
matrix:
do-cache:
- true
- false
os:
- macos-11
- macos-12
- ubuntu-20.04
- ubuntu-22.04
runs-on: ${{ matrix.os }}
steps:
- name: Checkout this repo
uses: actions/checkout@v4
- name: Rebase
run: ${{ env.git_pull }}
- uses: nixbuild/nix-quick-install-action@v26
- name: Restore and save Nix store
if: ${{ matrix.do-cache }}
uses: ./.
with:
# save a new cache every time ci file changes
primary-key: cache-${{ matrix.os }}-${{ hashFiles('.github/workflows/ci.yaml') }}
restore-prefixes-first-match: cache-${{ matrix.os }}-
# do purge caches
purge: true
# purge all versions of the cache
purge-prefixes: cache-${{ matrix.os }}-
# 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
# and collect garbage in the Nix store until it reaches this size in bytes
gc-max-store-size: 8000000000
# Uncomment to debug this job
# - name: Setup tmate session
# uses: mxschmitt/action-tmate@v3
- name: Show profile
run: nix profile list
- name: Lock and install nixpkgs
run: |
nix registry add nixpkgs github:NixOS/nixpkgs/5daaa32204e9c46b05cd709218b7ba733d07e80c
nix registry list
nix profile install $(nix flake archive nixpkgs --json | jq -r '.path')
- name: Show profile
run: nix profile list
- name: Install nixpkgs#hello
run: |
nix profile install nixpkgs#hello
- name: Install nixpkgs#cachix
run: |
nix profile install nixpkgs#cachix
- name: Install nixpkgs#nixpkgs-fmt
run: |
nix profile install nixpkgs#nixpkgs-fmt
- name: Install nixpkgs#alejandra
run: |
nix profile install nixpkgs#alejandra
- name: Install nixpkgs#nixd
run: |
nix profile install nixpkgs#nixd
- name: Install nixpkgs#ghc
run: |
nix profile install nixpkgs#ghc
- name: Install nixpkgs#haskell-language-server
run: |
nix profile install nixpkgs#haskell-language-server
- name: Install nixpkgs#purescript
run: |
nix profile install nixpkgs#purescript
- name: Install nixpkgs#nodejs
run: |
nix profile install nixpkgs#nodejs
- name: Show profile
run: nix profile list