diff options
Diffstat (limited to '.github')
| -rwxr-xr-x | .github/eval-flake.sh | 97 | ||||
| -rw-r--r-- | .github/workflows/ci.yaml | 12 |
2 files changed, 33 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] |
