diff options
| -rwxr-xr-x | .github/eval-flake.sh | 90 | ||||
| -rw-r--r-- | .github/workflows/ci.yaml | 25 | ||||
| -rw-r--r-- | ci.nix | 2 | ||||
| -rw-r--r-- | flake.lock | 21 | ||||
| -rw-r--r-- | flake.nix | 6 |
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] @@ -3,6 +3,8 @@ self, ... }: { + nix2workflow.output = self.hydraJobs; + flake.hydraJobs = let ciSystems = ["x86_64-linux" "x86_64-darwin"]; recursiveMerge = builtins.foldl' lib.recursiveUpdate {}; @@ -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", @@ -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 |
