summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorseth <[email protected]>2023-12-29 00:51:14 -0500
committerseth <[email protected]>2023-12-29 03:19:10 -0500
commit4c86caefc587fafd7050b1407be7508a01622b6d (patch)
treea3de67d27f585ded673053b3588b1a4d02614bb3
parentab3ea6d89795f0413b0e7a4b5c65bff989f7f284 (diff)
ci: cleanup eval-flake.sh
-rwxr-xr-x.github/eval-flake.sh97
-rw-r--r--.github/workflows/ci.yaml12
-rw-r--r--.gitignore2
3 files changed, 35 insertions, 76 deletions
diff --git a/.github/eval-flake.sh b/.github/eval-flake.sh
index 5bc79c4..57f52c3 100755
--- a/.github/eval-flake.sh
+++ b/.github/eval-flake.sh
@@ -1,85 +1,36 @@
#!/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
+ --option accept-flake-config true
--show-trace
--flake
'.#hydraJobs'
)
-if [ "${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
-
-echo "matrix=$(jq -r 'tostring' matrix.json)" >> "$GITHUB_OUTPUT"
-rm matrix.json
-exit "$had_error"
+jobs=$(nix-eval-jobs "${args[@]}" | tee eval.json | jq -s '.')
+
+errors=$(echo "$jobs" | jq -r '.[] | select(.error)')
+[ "$errors" != "" ] && exit 1
+
+echo "$jobs" | jq -c '
+ def to_os:
+ if .system == "x86_64-linux" then "ubuntu-latest"
+ elif .system == "x86_64-darwin" then "macos-latest"
+ else null
+ end;
+
+ {
+ "include": [
+ .[] | {
+ attr,
+ isCached,
+ "os": to_os
+ }
+ ]
+ }
+'
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 4c03f04..c852112 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -31,9 +31,13 @@ jobs:
- name: Evaluate jobs
id: eval
run: |
- nix shell --inputs-from . \
+ set -euo pipefail
+
+ matrix=$(nix shell --inputs-from . \
nixpkgs#{bash,coreutils,jq,nix-eval-jobs} \
- --command bash ./.github/eval-flake.sh
+ --command ./.github/eval-flake.sh)
+
+ echo "matrix=$matrix" >> "$GITHUB_OUTPUT"
build:
needs: eval
@@ -47,6 +51,7 @@ jobs:
steps:
- uses: actions/checkout@v4
+ if: ${{ !matrix.isCached }}
- name: Install Nix
if: ${{ !matrix.isCached }}
@@ -91,10 +96,11 @@ jobs:
- name: Run check
run: |
nix flake check \
+ --accept-flake-config \
--print-build-logs \
--fallback \
--show-trace \
- --option allow-import-from-derivation true
+ --allow-import-from-derivation
gate:
needs: [build, check]
diff --git a/.gitignore b/.gitignore
index c546a18..e5b20e9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,8 @@
# nix build artifacts
result*
repl-result-out*
+gc-roots/
+eval.json
# dev shell
.pre-commit-config.yaml