summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorseth <[email protected]>2023-12-25 05:00:05 -0500
committerseth <[email protected]>2023-12-25 05:10:04 -0500
commit0cc0ada5d44ade6cab2e9220f7993aaf77985e1b (patch)
tree122d23d5cd27144fd491ea43f7082bfaf9ae8f76
parentd3572003f2aee35d7cfa3457dfe4fa4309a55ff1 (diff)
actions: use nix2workflow again
-rwxr-xr-x.github/eval-flake.sh90
-rw-r--r--.github/workflows/ci.yaml25
-rw-r--r--ci.nix2
-rw-r--r--flake.lock21
-rw-r--r--flake.nix6
5 files changed, 44 insertions, 100 deletions
diff --git a/.github/eval-flake.sh b/.github/eval-flake.sh
deleted file mode 100755
index ceebcc9..0000000
--- a/.github/eval-flake.sh
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/env bash
-set -euo pipefail
-### this is inspired by the ci script in [nixpkgs-unfree](https://github.com/numtide/nixpkgs-unfree)
-### link: https://github.com/numtide/nixpkgs-unfree/blob/127b9b18583de04c6207c2a0e674abf64fc4a3b1/ci.sh
-#
-## MIT License
-##
-## Copyright (c) 2022 Jonas Chevalier
-##
-## Permission is hereby granted, free of charge, to any person obtaining a copy
-## of this software and associated documentation files (the "Software"), to deal
-## in the Software without restriction, including without limitation the rights
-## to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-## copies of the Software, and to permit persons to whom the Software is
-## furnished to do so, subject to the following conditions:
-##
-## The above copyright notice and this permission notice shall be included in all
-## copies or substantial portions of the Software.
-##
-## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-## SOFTWARE.
-
-function get_os() {
- case "$1" in
- "x86_64-linux") echo "ubuntu-latest" ;;
- "x86_64-darwin") echo "macos-latest" ;;
- "aarch64-linux") echo "ubuntu-latst" ;;
- esac
-}
-
-args=(
- --gc-roots-dir gc-roots
- --check-cache-status
- --force-recurse
- --option allow-import-from-derivation true
- --show-trace
- --flake
- '.#hydraJobs'
-)
-
-if [[ -n "${GITHUB_STEP_SUMMARY-}" ]]; then
- log() {
- echo "$*" >> "$GITHUB_STEP_SUMMARY"
- }
-else
- log() {
- echo "$*"
- }
-fi
-
-jobs=$(nix-eval-jobs "${args[@]}" | jq -r '. | @base64')
-jq -n '{"include": []}' > matrix.json
-
-had_error=0
-echo "$jobs" | while read -r job; do
- job=$(echo "$job" | base64 -d)
- attr=$(echo "$job" | jq -r .attr)
- echo "## $attr"
-
- error=$(echo "$job" | jq -r '.error')
- if [[ $error == null ]]; then
- log "### ✅ $attr"
-
- system=$(echo "$job" | jq -r .system)
- isCached=$(echo "$job" | jq -r .isCached)
-
- jq ".include += [{\"attr\": \"$attr\", \"os\": \"$(get_os "$system")\", \"isCached\": $isCached}]" < matrix.json > matrix.json.tmp
- mv matrix.json.tmp matrix.json
- else
- log "### ❌ $attr"
- log
- log "<details><summary>Evaluation error:</summary><pre>"
- log "$error"
- log "</pre></details>"
- had_error=1
- fi
-done
-
-if [[ $had_error -gt 0 ]]; then
- rm matrix.json
- exit 1
-fi
-
-echo "matrix=$(jq -r 'tostring' matrix.json)" >> "$GITHUB_OUTPUT"
-rm matrix.json
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index c4fc11e..f8e429e 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -31,19 +31,21 @@ jobs:
- name: Evaluate jobs
id: eval
run: |
- nix shell --inputs-from . \
- nixpkgs#{bash,coreutils,jq,nix-eval-jobs} \
- --command bash ./.github/eval-flake.sh
+ echo "matrix=$(nix eval --show-trace --json .#workflowMatrix)" >> "$GITHUB_OUTPUT"
build:
needs: eval
strategy:
+ fail-fast: false
matrix: ${{ fromJSON(needs.eval.outputs.matrix) }}
name: Build (${{ matrix.attr }})
runs-on: ${{ matrix.os }}
+ env:
+ JOBS: "hydraJobs"
+
steps:
- uses: actions/checkout@v4
@@ -56,19 +58,22 @@ jobs:
name: getchoo
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
- - name: Check if cached
- if: ${{ matrix.isCached }}
- run: |
- echo ${{ matrix.attr }} is already built!
-
- name: Run build
- if: ${{ !matrix.isCached }}
run: |
+ for url in "https://cache.nixos.org" "https://getchoo.cachix.org"; do
+ if nix eval --raw .#"$JOBS".${{ matrix.attr }} \
+ | cut -c12-43 \
+ | xargs -I {} curl -f "$url"/{}.narinfo &> /dev/null; then
+ echo ${{ matrix.attr }} is already cached in $url!
+ fi
+ done
+
nix build --print-build-logs --fallback \
- .#hydraJobs.${{ matrix.attr }}
+ .#"$JOBS".${{ matrix.attr }}
check:
strategy:
+ fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
diff --git a/ci.nix b/ci.nix
index 94eac3e..1eb78e3 100644
--- a/ci.nix
+++ b/ci.nix
@@ -3,6 +3,8 @@
self,
...
}: {
+ nix2workflow.output = self.hydraJobs;
+
flake.hydraJobs = let
ciSystems = ["x86_64-linux" "x86_64-darwin"];
recursiveMerge = builtins.foldl' lib.recursiveUpdate {};
diff --git a/flake.lock b/flake.lock
index afc727e..7e89c3f 100644
--- a/flake.lock
+++ b/flake.lock
@@ -382,6 +382,26 @@
"type": "github"
}
},
+ "nix2workflow": {
+ "inputs": {
+ "nixpkgs-lib": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1703496925,
+ "narHash": "sha256-Ayz0FD8ptejT9Uq7Rm1h9iv2PaPQg8zCMGuMSA/ib3k=",
+ "owner": "getchoo",
+ "repo": "nix2workflow",
+ "rev": "ee728efb75096431bb94f746d990f2dc786b0be2",
+ "type": "github"
+ },
+ "original": {
+ "owner": "getchoo",
+ "repo": "nix2workflow",
+ "type": "github"
+ }
+ },
"nixos-hardware": {
"locked": {
"lastModified": 1702453208,
@@ -575,6 +595,7 @@
"hm": "hm",
"lanzaboote": "lanzaboote",
"nix-index-database": "nix-index-database",
+ "nix2workflow": "nix2workflow",
"nixos-hardware": "nixos-hardware",
"nixos-wsl": "nixos-wsl",
"nixpkgs": "nixpkgs",
diff --git a/flake.nix b/flake.nix
index 8629c1a..c580600 100644
--- a/flake.nix
+++ b/flake.nix
@@ -81,6 +81,11 @@
};
};
+ nix2workflow = {
+ url = "github:getchoo/nix2workflow";
+ inputs.nixpkgs-lib.follows = "nixpkgs";
+ };
+
nix-index-database = {
url = "github:nix-community/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs";
@@ -135,6 +140,7 @@
parts.lib.mkFlake {inherit inputs;} {
imports = [
inputs.pre-commit.flakeModule
+ inputs.nix2workflow.flakeModule
./modules
./overlay