From 7f0a1917d86d3dff0259738fa1080c25728bf70a Mon Sep 17 00:00:00 2001 From: Libby Date: Mon, 9 Nov 2026 13:30:06 +0000 Subject: [PATCH 1/4] CI: forge runner label is docker, not ubuntu-latest Co-Authored-By: Claude Sonnet 5.5 --- .github/workflows/portable-contracts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/portable-contracts.yml b/.github/workflows/portable-contracts.yml index 616651d..a116ea9 100644 --- a/.github/workflows/portable-contracts.yml +++ b/.github/workflows/portable-contracts.yml @@ -16,7 +16,7 @@ jobs: strategy: fail-fast: false matrix: - os: [windows-latest, ubuntu-latest] + os: [windows-latest, docker] package: [eve-contracts, eve-browser-lowering] steps: -- 2.47.3 From f25a43d5f8ce22485e179d6ef14d30f0bba76bcc Mon Sep 17 00:00:00 2001 From: Libby Date: Mon, 9 Nov 2026 13:32:42 +0000 Subject: [PATCH 2/4] CI: windows-latest leg is workflow_dispatch only (no Windows runner exists) Co-Authored-By: Claude Sonnet 5.5 --- .github/workflows/portable-contracts.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/portable-contracts.yml b/.github/workflows/portable-contracts.yml index a116ea9..b71d7b0 100644 --- a/.github/workflows/portable-contracts.yml +++ b/.github/workflows/portable-contracts.yml @@ -16,7 +16,10 @@ jobs: strategy: fail-fast: false matrix: - os: [windows-latest, docker] + # No Windows runner exists: the windows-latest leg runs on workflow_dispatch only (GitHub or a + # Windows runner), the docker leg gates push and PR. Windows push/PR triggers return in the PR + # that registers a Windows runner. + os: ${{ fromJSON(github.event_name == 'workflow_dispatch' && '["windows-latest", "docker"]' || '["docker"]') }} package: [eve-contracts, eve-browser-lowering] steps: -- 2.47.3 From 27ab8fb543a63d936e313dd81de2e507568cbcf1 Mon Sep 17 00:00:00 2001 From: Libby Date: Mon, 9 Nov 2026 15:26:28 +0000 Subject: [PATCH 3/4] CI: back to ubuntu-latest, install PowerShell where a Linux job needs pwsh The forge has two labels: docker (node 22, py 3.11) and ubuntu-latest (act-latest, node 24, py 3.12); neither carries pwsh. Windows legs stay workflow_dispatch only. Co-Authored-By: Claude Sonnet 5.5 --- .github/workflows/portable-contracts.yml | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/.github/workflows/portable-contracts.yml b/.github/workflows/portable-contracts.yml index b71d7b0..93b1a74 100644 --- a/.github/workflows/portable-contracts.yml +++ b/.github/workflows/portable-contracts.yml @@ -17,9 +17,9 @@ jobs: fail-fast: false matrix: # No Windows runner exists: the windows-latest leg runs on workflow_dispatch only (GitHub or a - # Windows runner), the docker leg gates push and PR. Windows push/PR triggers return in the PR + # Windows runner), the ubuntu-latest leg gates push and PR. Windows push/PR triggers return in the PR # that registers a Windows runner. - os: ${{ fromJSON(github.event_name == 'workflow_dispatch' && '["windows-latest", "docker"]' || '["docker"]') }} + os: ${{ fromJSON(github.event_name == 'workflow_dispatch' && '["windows-latest", "ubuntu-latest"]' || '["ubuntu-latest"]') }} package: [eve-contracts, eve-browser-lowering] steps: @@ -41,6 +41,23 @@ jobs: working-directory: packages/${{ matrix.package }} run: npm test + # The forge runner images carry no pwsh; GitHub's Windows and hosted images do. + - name: Install PowerShell + if: runner.os == 'Linux' + shell: bash + run: | + set -euo pipefail + if command -v pwsh >/dev/null; then pwsh -Version; exit 0; fi + SUDO=""; [ "$(id -u)" -eq 0 ] || SUDO="sudo" + PWSH_VERSION=7.4.6 + curl -fsSL "https://github.com/PowerShell/PowerShell/releases/download/v${PWSH_VERSION}/powershell-${PWSH_VERSION}-linux-x64.tar.gz" -o "${RUNNER_TEMP:-/tmp}/powershell.tar.gz" + $SUDO mkdir -p /opt/microsoft/powershell/7 + $SUDO tar -xzf "${RUNNER_TEMP:-/tmp}/powershell.tar.gz" -C /opt/microsoft/powershell/7 + $SUDO chmod +x /opt/microsoft/powershell/7/pwsh + $SUDO ln -sf /opt/microsoft/powershell/7/pwsh /usr/local/bin/pwsh + echo "DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1" >> "$GITHUB_ENV" + DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1 pwsh -Version + - name: Reject stale generated output shell: pwsh run: | -- 2.47.3 From 27161afe9ecfb5a2d24f407e8e9e12dfb46c8fcf Mon Sep 17 00:00:00 2001 From: Libby Date: Mon, 9 Nov 2026 15:24:40 +0000 Subject: [PATCH 4/4] CI: install eve-contracts dependencies before a package that links it Co-Authored-By: Claude Sonnet 5.5 --- .github/workflows/portable-contracts.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/portable-contracts.yml b/.github/workflows/portable-contracts.yml index 93b1a74..cc939f9 100644 --- a/.github/workflows/portable-contracts.yml +++ b/.github/workflows/portable-contracts.yml @@ -33,6 +33,14 @@ jobs: cache: npm cache-dependency-path: packages/${{ matrix.package }}/package-lock.json + # eve-browser-lowering links eve-contracts as file:../eve-contracts; npm installs none of the + # linked package's dependencies, and tsc resolves its declarations from the real path, so + # ajv must be installed in eve-contracts itself. + - name: Install eve-contracts dependencies + if: matrix.package != 'eve-contracts' + working-directory: packages/eve-contracts + run: npm ci + - name: Install package dependencies working-directory: packages/${{ matrix.package }} run: npm ci -- 2.47.3