Skip to content

try: use github_token in the ci file #711

try: use github_token in the ci file

try: use github_token in the ci file #711

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: {}
jobs:
# Check if the action code changed
check-action-code-changes:
name: Check if action code changed
runs-on: ubuntu-latest
outputs:
any_changed: ${{ steps.any_changed.outputs.any_changed }}
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 2
- uses: tj-actions/changed-files@v38
id: any_changed
with:
files: |
src/**
package.*
# Build the action if there are changes
# Commit and push the built code
build:
name: Build the action
runs-on: ubuntu-20.04
permissions:
contents: write
actions: write
needs: check-action-code-changes
if: needs.check-action-code-changes.outputs.any_changed
steps:
- uses: actions/checkout@v3
# http://man7.org/linux/man-pages/man1/date.1.html
- name: Get Date
id: get-date
run: |
echo "date=$(/bin/date -u "+date-%Y-%m-%d-time-%H-%M-%S")" >> $GITHUB_OUTPUT
shell: bash
- uses: actions/cache@v3
with:
path: |
~/.npm
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json', 'package.json') }}-${{ steps.get-date.outputs.date }}
restore-keys: |
${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json', 'package.json') }}-
- name: Install packages & Build the action
run: npm ci
- name: Commit & Push changes
if: github.event_name == 'push'
run: |
git config --global user.name github-actions
git config --global user.email [email protected]
git pull --rebase --autostash
git add dist
git commit -m "action: build the action" || echo ""
git push
# If ci.yaml changes, need to save a new cache with an updated key
# For the sake of testing, we assume that ci.yaml changes on every commit
check-cache-changes:
name: Check cache changes
needs: build
runs-on: ubuntu-20.04
if: always()
outputs:
# assume files-changed so that the 'similar-caches' jobs run always
files-changed: true
# the following line is more fair
# files-changed: ${{ steps.files-changed.outputs.any_changed }}
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 2
- uses: tj-actions/changed-files@v38
id: files-changed
with:
files: |
.github/workflows/ci.yaml
# 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: check-cache-changes
strategy:
matrix:
os:
- macos-11
- macos-12
- ubuntu-20.04
- ubuntu-22.04
id:
- 1
- 2
runs-on: ${{ matrix.os }}
if: always() && needs.check-cache-changes.outputs.files-changed
steps:
- name: Checkout this repo
uses: actions/checkout@v3
- name: Rebase
run: git pull --rebase
- uses: nixbuild/nix-quick-install-action@v26
with:
nix_conf: |
substituters = https://cache.nixos.org/ https://nix-community.cachix.org
trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
keep-outputs = true
- name: Restore and cache Nix store - ${{ matrix.id }}
uses: ./.
with:
# save a new cache every time ci file changes
primary-key: similar-cache-${{ matrix.os }}-individual-${{ matrix.id }}-${{ hashFiles('.github/workflows/ci.yaml') }}
restore-prefixes-first-match: similar-cache-${{ matrix.os }}-common-
# remove own old versions
purge: true
purge-created: 0
purge-prefixes: similar-cache-${{ matrix.os }}-individual-${{ matrix.id }}-
token: ${{ secrets.GITHUB_TOKEN }}
# Merge similar individual `id` caches
# Purge individual caches and old `common` caches
# Save new `common` caches
merge-similar-caches:
name: Merge similar caches
needs: [check-cache-changes, make-similar-caches]
permissions:
actions: write
strategy:
matrix:
os:
- macos-11
- macos-12
- ubuntu-20.04
- ubuntu-22.04
runs-on: ${{ matrix.os }}
if: always() && needs.check-cache-changes.outputs.files-changed
steps:
- name: Checkout this repo
uses: actions/checkout@v3
- name: Rebase
run: git pull --rebase
- uses: nixbuild/nix-quick-install-action@v25
with:
nix_conf: |
substituters = https://cache.nixos.org/ https://nix-community.cachix.org
trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
keep-outputs = true
- name: Save Nix store
uses: ./.
with:
primary-key: similar-cache-${{ matrix.os }}-common-${{ hashFiles('.github/workflows/ci.yaml') }}
restore-prefixes-all-matches: similar-cache-${{ matrix.os }}-individual-
purge: true
purge-prefixes: |
similar-cache-${{ matrix.os }}-individual-
similar-cache-${{ matrix.os }}-common-
purge-created: 0
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 }}
if: always()
steps:
- name: Checkout this repo
uses: actions/checkout@v3
- name: Rebase
run: git pull --rebase
- uses: nixbuild/nix-quick-install-action@v25
with:
nix_conf: |
substituters = https://cache.nixos.org/ https://nix-community.cachix.org
trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
keep-outputs = true
- name: Restore and cache Nix store
if: ${{ matrix.do-cache }}
uses: ./.
with:
# save a new cache every time ci file changes
key: cache-${{ matrix.os }}-${{ hashFiles('.github/workflows/ci.yaml') }}
restore-prefixes-first-match: cache-${{ matrix.os }}-
gc-max-store-size-linux: 8000000000
gc-max-store-size-macos: 8000000000
purge: true
purge-prefixes: cache-${{ matrix.os }}-
purge-created: 172800
# Uncomment to debug this job
# - name: Setup tmate session
# uses: mxschmitt/action-tmate@v3
- name: Show profile
run: nix profile list
- name: Lock nixpkgs
run: |
nix registry add nixpkgs github:NixOS/nixpkgs/5daaa32204e9c46b05cd709218b7ba733d07e80c
nix profile install $(nix flake archive nixpkgs --json | jq -r '.path')
- name: Show profile
run: nix profile list
- name: Run commands
run: |
nix run nixpkgs#hello
nix profile install nixpkgs#hello
nix profile install nixpkgs#cachix
nix profile install nixpkgs#nixpkgs-fmt
nix profile install nixpkgs#alejandra
nix profile install nixpkgs#nixd
nix profile install nixpkgs#ghc
nix profile install nixpkgs#haskell-language-server
nix profile install nixpkgs#purescript
nix profile install nixpkgs#nodejs_18
- name: Show profile
run: nix profile list