Răsfoiți Sursa

ci: add nix-eval workflow for cross-platform flake evaluation (#12175)

Jérôme Benoit 1 lună în urmă
părinte
comite
1109a282e0
2 a modificat fișierele cu 95 adăugiri și 46 ștergeri
  1. 0 46
      .github/workflows/nix-desktop.yml.disabled
  2. 95 0
      .github/workflows/nix-eval.yml

+ 0 - 46
.github/workflows/nix-desktop.yml.disabled

@@ -1,46 +0,0 @@
-name: nix-desktop
-
-on:
-  push:
-    branches: [dev]
-    paths:
-      - "flake.nix"
-      - "flake.lock"
-      - "nix/**"
-      - "packages/app/**"
-      - "packages/desktop/**"
-      - ".github/workflows/nix-desktop.yml"
-  pull_request:
-    paths:
-      - "flake.nix"
-      - "flake.lock"
-      - "nix/**"
-      - "packages/app/**"
-      - "packages/desktop/**"
-      - ".github/workflows/nix-desktop.yml"
-  workflow_dispatch:
-
-jobs:
-  nix-desktop:
-    strategy:
-      fail-fast: false
-      matrix:
-        os:
-          - blacksmith-4vcpu-ubuntu-2404
-          - blacksmith-4vcpu-ubuntu-2404-arm
-          - macos-15-intel
-          - macos-latest
-    runs-on: ${{ matrix.os }}
-    timeout-minutes: 60
-    steps:
-      - name: Checkout repository
-        uses: actions/checkout@v6
-
-      - name: Setup Nix
-        uses: nixbuild/nix-quick-install-action@v34
-
-      - name: Build desktop via flake
-        run: |
-          set -euo pipefail
-          nix --version
-          nix build .#desktop -L

+ 95 - 0
.github/workflows/nix-eval.yml

@@ -0,0 +1,95 @@
+name: nix-eval
+
+on:
+  push:
+    branches: [dev]
+  pull_request:
+    branches: [dev]
+  workflow_dispatch:
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: true
+
+permissions:
+  contents: read
+
+jobs:
+  nix-eval:
+    runs-on: blacksmith-4vcpu-ubuntu-2404
+    timeout-minutes: 15
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v6
+
+      - name: Setup Nix
+        uses: nixbuild/nix-quick-install-action@v34
+
+      - name: Evaluate flake outputs (all systems)
+        run: |
+          set -euo pipefail
+          nix --version
+
+          echo "=== Flake metadata ==="
+          nix flake metadata
+
+          echo ""
+          echo "=== Flake structure ==="
+          nix flake show --all-systems
+
+          SYSTEMS="x86_64-linux aarch64-linux x86_64-darwin aarch64-darwin"
+          PACKAGES="opencode"
+          # TODO: move 'desktop' to PACKAGES when #11755 is fixed
+          OPTIONAL_PACKAGES="desktop"
+
+          echo ""
+          echo "=== Evaluating packages for all systems ==="
+          for system in $SYSTEMS; do
+            echo ""
+            echo "--- $system ---"
+            for pkg in $PACKAGES; do
+              printf "  %s: " "$pkg"
+              if output=$(nix eval ".#packages.$system.$pkg.drvPath" --raw 2>&1); then
+                echo "✓"
+              else
+                echo "✗"
+                echo "::error::Evaluation failed for packages.$system.$pkg"
+                echo "$output"
+                exit 1
+              fi
+            done
+          done
+
+          echo ""
+          echo "=== Evaluating optional packages ==="
+          for system in $SYSTEMS; do
+            echo ""
+            echo "--- $system ---"
+            for pkg in $OPTIONAL_PACKAGES; do
+              printf "  %s: " "$pkg"
+              if output=$(nix eval ".#packages.$system.$pkg.drvPath" --raw 2>&1); then
+                echo "✓"
+              else
+                echo "✗"
+                echo "::warning::Evaluation failed for packages.$system.$pkg"
+                echo "$output"
+              fi
+            done
+          done
+
+          echo ""
+          echo "=== Evaluating devShells for all systems ==="
+          for system in $SYSTEMS; do
+            printf "%s: " "$system"
+            if output=$(nix eval ".#devShells.$system.default.drvPath" --raw 2>&1); then
+              echo "✓"
+            else
+              echo "✗"
+              echo "::error::Evaluation failed for devShells.$system.default"
+              echo "$output"
+              exit 1
+            fi
+          done
+
+          echo ""
+          echo "=== All evaluations passed ==="