From 8f9d7de04f4da4abc8a097c2021c8e4723c25dc7 Mon Sep 17 00:00:00 2001 From: seth Date: Wed, 27 Dec 2023 06:07:26 -0500 Subject: Revert "actions: use nix2workflow again" This reverts commit 0cc0ada5d44ade6cab2e9220f7993aaf77985e1b. --- .github/eval-flake.sh | 85 +++++++++++++++++++++++++++++++++++++++++++++++ .github/workflows/ci.yaml | 27 ++++++--------- dev/ci.nix | 2 -- flake.lock | 21 ------------ flake.nix | 6 ---- 5 files changed, 95 insertions(+), 46 deletions(-) create mode 100755 .github/eval-flake.sh diff --git a/.github/eval-flake.sh b/.github/eval-flake.sh new file mode 100755 index 0000000..5bc79c4 --- /dev/null +++ b/.github/eval-flake.sh @@ -0,0 +1,85 @@ +#!/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=( + --check-cache-status + --force-recurse + --option allow-import-from-derivation 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 "
Evaluation error:
"
+        log "$error"
+        log "
" + had_error=1 + fi +done + +echo "matrix=$(jq -r 'tostring' matrix.json)" >> "$GITHUB_OUTPUT" +rm matrix.json +exit "$had_error" diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b1a1b25..58d1966 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -5,7 +5,7 @@ on: workflow_call: secrets: CACHIX_AUTH_TOKEN: - description: "auth token for cachi" + description: "auth token for cachix" workflow_dispatch: jobs: @@ -31,7 +31,9 @@ jobs: - name: Evaluate jobs id: eval run: | - echo "matrix=$(nix eval --show-trace --json .#workflowMatrix)" >> "$GITHUB_OUTPUT" + nix shell --inputs-from . \ + nixpkgs#{bash,coreutils,jq,nix-eval-jobs} \ + --command bash ./.github/eval-flake.sh build: needs: eval @@ -43,9 +45,6 @@ jobs: name: Build (${{ matrix.attr }}) runs-on: ${{ matrix.os }} - env: - JOBS: "hydraJobs" - steps: - uses: actions/checkout@v4 @@ -59,22 +58,16 @@ jobs: authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} - 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 at $url! - exit 0 - fi - done - - nix build --print-build-logs --fallback \ - .#"$JOBS".${{ matrix.attr }} + nix build \ + --accept-flake-config \ + --print-build-logs \ + --fallback \ + .#hydraJobs.${{ matrix.attr }} check: strategy: - fail-fast: false matrix: os: [ubuntu-latest, macos-latest] diff --git a/dev/ci.nix b/dev/ci.nix index 1eb78e3..94eac3e 100644 --- a/dev/ci.nix +++ b/dev/ci.nix @@ -3,8 +3,6 @@ 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 3284b97..3763371 100644 --- a/flake.lock +++ b/flake.lock @@ -382,26 +382,6 @@ "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, @@ -595,7 +575,6 @@ "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 09d59dc..6086bec 100644 --- a/flake.nix +++ b/flake.nix @@ -81,11 +81,6 @@ }; }; - nix2workflow = { - url = "github:getchoo/nix2workflow"; - inputs.nixpkgs-lib.follows = "nixpkgs"; - }; - nix-index-database = { url = "github:nix-community/nix-index-database"; inputs.nixpkgs.follows = "nixpkgs"; @@ -140,7 +135,6 @@ parts.lib.mkFlake {inherit inputs;} { imports = [ inputs.pre-commit.flakeModule - inputs.nix2workflow.flakeModule ./dev ./modules -- cgit v1.2.3