also looking at this
fix(ci): stop evaluating `pantry env`, which sometimes re-installs JS deps mid-job
#107
6 files
+16
-17
| @@ -6,7 +6,7 @@ Thank you for your interest in contributing to Craft! This document provides gui | ||
| 6 | 6 | |
| 7 | 7 | ### Prerequisites |
| 8 | 8 | |
| 9 | - **Pantry-managed stable Zig**: run `eval "$(pantry env | sed -n '/^export /,$p')"`, then invoke `zig` | |
| 9 | - **Pantry-managed stable Zig**: run `eval "$(pantry env | sed -n '/^export /,$p')"`, then invoke `zig` (locally only — CI does not: the pantry action already puts `zig` on PATH, and `pantry env` runs a workspace setup that re-installs JS deps with its own `--linker`, rewriting `node_modules` mid-job) | |
| 10 | 10 | - **Bun**: Install from [bun.sh](https://bun.sh) |
| 11 | 11 | |
| 12 | 12 | #### Platform-specific Dependencies |
| @@ -82,7 +82,7 @@ jobs: | ||
| 82 | 82 | - name: Build binary |
| 83 | 83 | working-directory: packages/zig |
| 84 | 84 | run: | |
| 85 | eval "$(pantry env | sed -n '/^export /,$p')" && zig build -Doptimize=ReleaseFast | |
| 85 | zig build -Doptimize=ReleaseFast | |
| 86 | 86 | mkdir -p "$RUNNER_TEMP/bench" |
| 87 | 87 | cp zig-out/bin/craft "$RUNNER_TEMP/bench/craft-head" |
| 88 | 88 | |
| @@ -71,7 +71,7 @@ jobs: | ||
| 71 | 71 | - name: Build release binary |
| 72 | 72 | working-directory: packages/zig |
| 73 | 73 | run: | |
| 74 | eval "$(pantry env | sed -n '/^export /,$p')" && zig build -Doptimize=ReleaseSafe | |
| 74 | zig build -Doptimize=ReleaseSafe | |
| 75 | 75 | |
| 76 | 76 | - name: Measure binary size |
| 77 | 77 | id: size |
| @@ -123,7 +123,7 @@ jobs: | ||
| 123 | 123 | git checkout origin/main -- packages/zig |
| 124 | 124 | |
| 125 | 125 | cd packages/zig |
| 126 | eval "$(pantry env | sed -n '/^export /,$p')" && zig build -Doptimize=ReleaseSafe | |
| 126 | zig build -Doptimize=ReleaseSafe | |
| 127 | 127 | |
| 128 | 128 | if [ -f "zig-out/bin/craft" ]; then |
| 129 | 129 | BASELINE=$(wc -c < "zig-out/bin/craft" | tr -d ' ') |
| @@ -35,7 +35,7 @@ jobs: | ||
| 35 | 35 | uses: pantry-pm/pantry/packages/action@235036fa0f48bae99b2293df5a3dc35c809b1777 # pinned: last SHA whose bundled typescript resolves on linux-x64 |
| 36 | 36 | |
| 37 | 37 | - name: Verify Zig installation |
| 38 | run: eval "$(pantry env | sed -n '/^export /,$p')" && zig version | |
| 38 | run: zig version | |
| 39 | 39 | |
| 40 | 40 | - name: Cache Zig artifacts |
| 41 | 41 | uses: actions/cache@v5 |
| @@ -58,14 +58,14 @@ jobs: | ||
| 58 | 58 | |
| 59 | 59 | - name: Build Zig core |
| 60 | 60 | working-directory: packages/zig |
| 61 | run: eval "$(pantry env | sed -n '/^export /,$p')" && zig build | |
| 61 | run: zig build | |
| 62 | 62 | |
| 63 | 63 | - name: First-party Zig dependencies |
| 64 | 64 | uses: ./.github/actions/first-party-zig-deps |
| 65 | 65 | |
| 66 | 66 | - name: Test Zig core |
| 67 | 67 | working-directory: packages/zig |
| 68 | run: eval "$(pantry env | sed -n '/^export /,$p')" && zig build test | |
| 68 | run: zig build test | |
| 69 | 69 | |
| 70 | 70 | - name: Check binary size |
| 71 | 71 | if: runner.os == 'Linux' |
| @@ -163,7 +163,7 @@ jobs: | ||
| 163 | 163 | |
| 164 | 164 | - name: Check Zig formatting |
| 165 | 165 | working-directory: packages/zig |
| 166 | run: eval "$(pantry env | sed -n '/^export /,$p')" && zig fmt --check src/ build.zig | |
| 166 | run: zig fmt --check src/ build.zig | |
| 167 | 167 | |
| 168 | 168 | - name: Audit Zig C imports |
| 169 | 169 | run: bun run verify:cimports |
| @@ -194,7 +194,7 @@ jobs: | ||
| 194 | 194 | |
| 195 | 195 | - name: Build Zig core |
| 196 | 196 | working-directory: packages/zig |
| 197 | run: eval "$(pantry env | sed -n '/^export /,$p')" && zig build | |
| 197 | run: zig build | |
| 198 | 198 | |
| 199 | 199 | - name: Build TypeScript SDK |
| 200 | 200 | working-directory: packages/typescript |
| @@ -74,7 +74,7 @@ jobs: | ||
| 74 | 74 | run: | |
| 75 | 75 | # Build iOS simulator static libraries using dedicated build step |
| 76 | 76 | # (not the default target which builds macOS executables) |
| 77 | eval "$(pantry env | sed -n '/^export /,$p')" && zig build build-ios-simulator -Doptimize=ReleaseSafe -Dmacos-sdk="$(xcrun --sdk iphonesimulator --show-sdk-path)" | |
| 77 | zig build build-ios-simulator -Doptimize=ReleaseSafe -Dmacos-sdk="$(xcrun --sdk iphonesimulator --show-sdk-path)" | |
| 78 | 78 | |
| 79 | 79 | - name: First-party Zig dependencies |
| 80 | 80 | uses: ./.github/actions/first-party-zig-deps |
| @@ -85,7 +85,7 @@ jobs: | ||
| 85 | 85 | # `zig build test` reports through its exit code. The old form piped |
| 86 | 86 | # it to a file and grepped for "mobile"/"ios", which fails under |
| 87 | 87 | # `set -e` whenever the run is clean and the file is therefore empty. |
| 88 | eval "$(pantry env | sed -n '/^export /,$p')" && zig build test | |
| 88 | zig build test | |
| 89 | 89 | |
| 90 | 90 | - name: Build iOS test app |
| 91 | 91 | if: hashFiles('packages/ios/TestApp/TestApp.xcodeproj') != '' |
| @@ -176,7 +176,7 @@ jobs: | ||
| 176 | 176 | # builds the desktop binaries — and since an android triple reports |
| 177 | 177 | # os_tag == .linux, that links GTK3/WebKit2GTK against a sysroot that |
| 178 | 178 | # does not exist for Android. |
| 179 | eval "$(pantry env | sed -n '/^export /,$p')" && zig build build-android -Doptimize=ReleaseSafe | |
| 179 | zig build build-android -Doptimize=ReleaseSafe | |
| 180 | 180 | |
| 181 | 181 | - name: First-party Zig dependencies |
| 182 | 182 | uses: ./.github/actions/first-party-zig-deps |
| @@ -187,7 +187,7 @@ jobs: | ||
| 187 | 187 | # `zig build test` reports through its exit code. The old form piped |
| 188 | 188 | # it to a file and grepped for "mobile"/"android", which fails under |
| 189 | 189 | # `set -e` whenever the run is clean and the file is therefore empty. |
| 190 | eval "$(pantry env | sed -n '/^export /,$p')" && zig build test | |
| 190 | zig build test | |
| 191 | 191 | |
| 192 | 192 | - name: Enable KVM |
| 193 | 193 | run: | |
| @@ -74,7 +74,7 @@ jobs: | ||
| 74 | 74 | mkdir -p zig-out/cross |
| 75 | 75 | |
| 76 | 76 | echo "::group::Cross-compile darwin-x64" |
| 77 | eval "$(pantry env | sed -n '/^export /,$p')" && zig build -Doptimize=ReleaseSafe -Dversion="$VERSION" -Dtarget="$X64_TARGET" -Dmacos-sdk="$SDK_PATH" | |
| 77 | zig build -Doptimize=ReleaseSafe -Dversion="$VERSION" -Dtarget="$X64_TARGET" -Dmacos-sdk="$SDK_PATH" | |
| 78 | 78 | mkdir -p zig-out/cross/darwin-x64 && cp zig-out/bin/craft zig-out/cross/darwin-x64/craft |
| 79 | 79 | echo "::endgroup::" |
| 80 | 80 | |
| @@ -87,7 +87,7 @@ jobs: | ||
| 87 | 87 | # cross-compilation mode, where it stops looking for the system SDK |
| 88 | 88 | # on its own and every `-framework Cocoa` fails to resolve. |
| 89 | 89 | rm -rf zig-out/bin |
| 90 | eval "$(pantry env | sed -n '/^export /,$p')" && zig build -Doptimize=ReleaseSafe -Dversion="$VERSION" -Dtarget="$ARM64_TARGET" -Dmacos-sdk="$SDK_PATH" | |
| 90 | zig build -Doptimize=ReleaseSafe -Dversion="$VERSION" -Dtarget="$ARM64_TARGET" -Dmacos-sdk="$SDK_PATH" | |
| 91 | 91 | |
| 92 | 92 | # AppKit decides how it draws a window's controls from the SDK recorded |
| 93 | 93 | # in LC_BUILD_VERSION, so that it can restyle them without restyling |
| @@ -144,7 +144,6 @@ jobs: | ||
| 144 | 144 | "x86_64-windows:windows-x64:craft.exe"; do |
| 145 | 145 | IFS=: read -r zig_target dir_name bin_name <<< "$target_spec" |
| 146 | 146 | echo "::group::Cross-compile $dir_name" |
| 147 | eval "$(pantry env | sed -n '/^export /,$p')" | |
| 148 | 147 | zig build -Doptimize=ReleaseSafe -Dversion="$VERSION" -Dtarget="$zig_target" |
| 149 | 148 | mkdir -p "zig-out/cross/$dir_name" && cp "zig-out/bin/$bin_name" "zig-out/cross/$dir_name/$bin_name" |
| 150 | 149 | echo "Built $dir_name" |
| @@ -157,7 +156,7 @@ jobs: | ||
| 157 | 156 | # so craft-linux-x64.zip shipped a Windows PE binary alongside the |
| 158 | 157 | # Linux one. |
| 159 | 158 | rm -rf zig-out/bin |
| 160 | eval "$(pantry env | sed -n '/^export /,$p')" && zig build -Doptimize=ReleaseSafe -Dversion="$VERSION" | |
| 159 | zig build -Doptimize=ReleaseSafe -Dversion="$VERSION" | |
| 161 | 160 | |
| 162 | 161 | # ── macOS Code Signing & Notarization ────────────────────────── |
| 163 | 162 | # The signing credentials live encrypted in `.env.production`, not as |