Add a nightly job to build for MacOS #124
Workflow file for this run
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
# Copyright lowRISC contributors. | |
# | |
# SPDX-License-Identifier: MIT | |
name: CI | |
on: | |
push: | |
branches: ["main"] | |
pull_request: | |
branches: ["main"] | |
# Cancel existing runs if a pull request is pushed. | |
# For branch pushes, this will queue a new run and cancel the existing one. This allows the cache | |
# of the run to be used by the new run. | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
jobs: | |
# checks: | |
# name: Quality Check | |
# runs-on: nixos-23.11 | |
# steps: | |
# - name: checkout | |
# uses: actions/checkout@v4 | |
# - name: Install Nix | |
# uses: cachix/install-nix-action@v24 | |
# - name: Nix Format Check | |
# run: nix fmt -- . --check | |
# - name: Run Nix Checks | |
# run: nix flake check -L | |
build-plan: | |
# Save some computation. If the checks fail, don't build. | |
# needs: checks | |
name: Generate Build Plan | |
runs-on: nixos-23.11 | |
outputs: | |
attrs: ${{ steps.plan.outputs.ATTRS }} | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- name: Install Nix | |
uses: cachix/install-nix-action@v24 | |
with: | |
nix_path: nixpkgs=channel:nixos-23.11 | |
extra_nix_config: | | |
substituters = https://nix-cache.lowrisc.org/public/ https://cache.nixos.org/ | |
trusted-public-keys = nix-cache.lowrisc.org-public-1:O6JLD0yXzaJDPiQW1meVu32JIDViuaPtGDfjlOopU7o= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= | |
- name: Generate Build Plan | |
id: plan | |
run: | | |
REBUILD=() | |
echo '| Package | Status |' >> $GITHUB_STEP_SUMMARY | |
echo '|---------|--------|' >> $GITHUB_STEP_SUMMARY | |
for LINE in $(nix-shell -p nix-eval-jobs --run 'nix-eval-jobs --accept-flake-config --flake .#packages.x86_64-linux'); do | |
ATTR=$(echo "$LINE" | jq -r .attr) | |
OUTPUTS=$(echo "$LINE" | jq -r '.outputs | keys | join(",")') | |
# Check if all outputs are cached. We don't use nix-eval-jobs's cache check because it also includes local path | |
CACHED=y | |
for OUTPUT in ${OUTPUTS//,/ }; do | |
HASH=$(echo "$LINE" | jq -r ".outputs.$OUTPUT" | cut -d '/' -f4 | cut -d '-' -f1) | |
if ! curl -sSfL "https://nix-cache.lowrisc.org/public/$HASH.narinfo"; then | |
CACHED=n | |
fi | |
done | |
if [[ $CACHED == y ]]; then | |
echo "| $ATTR | ✅ Cached |" | tee -a $GITHUB_STEP_SUMMARY | |
else | |
REBUILD+=($ATTR) | |
echo "| $ATTR | ⏳ Need Rebuild |" | tee -a $GITHUB_STEP_SUMMARY | |
fi | |
done | |
echo 'ATTRS<<EOF' >> $GITHUB_OUTPUT | |
jq --null-input '$ARGS.positional' --args -- "${REBUILD[@]}" >> $GITHUB_OUTPUT | |
echo 'EOF' >> $GITHUB_OUTPUT | |
build: | |
needs: build-plan | |
name: Build | |
runs-on: nixos-23.11 | |
# Matrix can't be empty, so skip the job entirely if nothing needs to be rebuilt. | |
if: fromJSON(needs.build-plan.outputs.attrs)[0] != null | |
strategy: | |
matrix: | |
attr: ${{fromJSON(needs.build-plan.outputs.attrs)}} | |
steps: | |
- name: checkout | |
uses: actions/checkout@v4 | |
- name: Install Nix | |
uses: cachix/install-nix-action@v24 | |
with: | |
extra_nix_config: | | |
substituters = https://nix-cache.lowrisc.org/public/ https://cache.nixos.org/ | |
trusted-public-keys = nix-cache.lowrisc.org-public-1:O6JLD0yXzaJDPiQW1meVu32JIDViuaPtGDfjlOopU7o= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= | |
- name: Setup Cache | |
if: github.event_name != 'pull_request' | |
run: | | |
nix profile install nixpkgs#attic-client | |
attic login --set-default lowrisc https://nix-cache.lowrisc.org/ ${{ secrets.NIX_CACHE_TOKEN }} | |
- name: Build | |
run: | | |
# For derivations with multiple outputs, this produces a list that references all the outputs. | |
OUTPUTS=$(nix eval .#${{ matrix.attr }} --apply 'd: d.outputs' --json | jq -r 'map(".#${{ matrix.attr }}." + .) | join(" ")') | |
nix build $OUTPUTS --accept-flake-config | |
- name: Upload Cache | |
if: github.event_name != 'pull_request' | |
run: | | |
attic push public result* |