Summary
On darwin-arm64 GitHub-hosted runners (macos-latest, Apple Silicon), @vscode/test-electron@3.0.0 downloads the VS Code Insiders archive successfully, then fails to launch it:
✔ Downloaded VS Code (07b4ff1883f94da91f6d698744fc7c3638b59720) into
.vscode-test/vscode-darwin-arm64-insiders
Test error: Error: spawn .../Visual Studio Code - Insiders.app/Contents/MacOS/Electron ENOENT
The same test suite passes on ubuntu-latest + Insiders, windows-latest + Insiders, and every macOS Stable / pinned-version cell on the same commit. The failure is scoped strictly to darwin-arm64 + Insiders.
Root cause
Fully diagnosed in #349 (thanks @aasimkhan30). Summary of that thread as it applies here:
- VS Code renamed the macOS executable from
Electron to the product name (Code / Code - Insiders) in microsoft/vscode#291948, merged 2026-02-03, first shipping in 1.110.
- The
Electron compatibility symlink was removed in microsoft/vscode#326502, merged 2026-07-20.
@vscode/test-electron still hardcodes the old Electron path, so any post-symlink-removal build produces the ENOENT above.
darwin-arm64 + Insiders surfaced this first because Insiders leads Stable through both the rename and the symlink removal. The same failure will reach darwin-arm64 + Stable as soon as Stable crosses the 2026-07-20 cutoff.
This issue is the CI-visible reproducer that led me to #349 before the root cause was clear. Keeping it open as the downstream-facing counterpart to #349 so consumers hitting the ENOENT symptom can find the workaround.
Environment
|
|
@vscode/test-electron |
3.0.0 |
@vscode/test-cli |
0.0.15 |
| Node.js |
20.20.2 (also reproduces on 24) |
| Runner |
macos-latest on GitHub Actions (Apple Silicon / darwin-arm64) |
| VS Code channel |
insiders |
| Downloaded commit |
07b4ff1883f94da91f6d698744fc7c3638b59720 (~340 MB archive) |
Steps to reproduce
- Set up a VS Code extension with
@vscode/test-cli and a .vscode-test.mjs that supports insiders.
- Run
npm test on a GitHub-hosted macos-latest runner (arm64).
- Observe: download succeeds, launcher throws
ENOENT.
Minimal .vscode-test.mjs:
import { defineConfig } from '@vscode/test-cli';
export default defineConfig({
files: 'out/test/**/*.test.js',
version: process.env.VSCODE_VERSION || 'stable', // set VSCODE_VERSION=insiders
});
Minimal workflow step:
- uses: coactions/setup-xvfb@v1
with:
run: npm test
env:
VSCODE_VERSION: 'insiders'
Reproduction repository
Workaround currently deployed
Drop macos-latest from the Insiders matrix. macOS arm64 coverage is retained via Stable and minimum-version workflows, both running on macos-latest. Reference implementation: miguelcolmenares/css-js-minifier#175.
Intel-fallback runners (macos-13, macos-15-intel) are not a viable long-term workaround:
macos-13 was retired 2025-12-04 (actions/runner-images#13046); jobs targeting it queue indefinitely.
macos-15-intel is a transitional label, retiring Fall 2027 per the 2025-09-19 GitHub Changelog.
- Rosetta 2 is available only through macOS 27 and reduced to legacy games starting with macOS 28 (Apple HT102527).
@vscode/test-cli's IBaseTestConfiguration does not expose a platform field, so consumers can't force an x64 download on an arm64 host without dropping to @vscode/test-electron's programmatic API.
Ask
Ship the fix proposed in #349: resolve the macOS executable dynamically via CFBundleExecutable / product.nameShort, with Electron as a fallback for pre-1.110 builds. Downstream consumers can then restore macos-latest (arm64) to their Insiders CI matrices without any Intel/Rosetta bridge.
Happy to test a pre-release against the reproducer above.
Related
Summary
On
darwin-arm64GitHub-hosted runners (macos-latest, Apple Silicon),@vscode/test-electron@3.0.0downloads the VS Code Insiders archive successfully, then fails to launch it:The same test suite passes on
ubuntu-latest+ Insiders,windows-latest+ Insiders, and every macOS Stable / pinned-version cell on the same commit. The failure is scoped strictly todarwin-arm64+ Insiders.Root cause
Fully diagnosed in #349 (thanks @aasimkhan30). Summary of that thread as it applies here:
Electronto the product name (Code/Code - Insiders) in microsoft/vscode#291948, merged 2026-02-03, first shipping in 1.110.Electroncompatibility symlink was removed in microsoft/vscode#326502, merged 2026-07-20.@vscode/test-electronstill hardcodes the oldElectronpath, so any post-symlink-removal build produces theENOENTabove.darwin-arm64+ Insiders surfaced this first because Insiders leads Stable through both the rename and the symlink removal. The same failure will reachdarwin-arm64+ Stable as soon as Stable crosses the 2026-07-20 cutoff.This issue is the CI-visible reproducer that led me to #349 before the root cause was clear. Keeping it open as the downstream-facing counterpart to #349 so consumers hitting the
ENOENTsymptom can find the workaround.Environment
@vscode/test-electron@vscode/test-climacos-lateston GitHub Actions (Apple Silicon / darwin-arm64)Steps to reproduce
@vscode/test-cliand a.vscode-test.mjsthat supportsinsiders.npm teston a GitHub-hostedmacos-latestrunner (arm64).ENOENT.Minimal
.vscode-test.mjs:Minimal workflow step:
Reproduction repository
Workaround currently deployed
Drop
macos-latestfrom the Insiders matrix. macOS arm64 coverage is retained via Stable and minimum-version workflows, both running onmacos-latest. Reference implementation: miguelcolmenares/css-js-minifier#175.Intel-fallback runners (
macos-13,macos-15-intel) are not a viable long-term workaround:macos-13was retired 2025-12-04 (actions/runner-images#13046); jobs targeting it queue indefinitely.macos-15-intelis a transitional label, retiring Fall 2027 per the 2025-09-19 GitHub Changelog.@vscode/test-cli'sIBaseTestConfigurationdoes not expose aplatformfield, so consumers can't force an x64 download on an arm64 host without dropping to@vscode/test-electron's programmatic API.Ask
Ship the fix proposed in #349: resolve the macOS executable dynamically via
CFBundleExecutable/product.nameShort, withElectronas a fallback for pre-1.110 builds. Downstream consumers can then restoremacos-latest(arm64) to their Insiders CI matrices without any Intel/Rosetta bridge.Happy to test a pre-release against the reproducer above.
Related
@vscode/test-electronuses obsolete macOS executable path (upstream code defect, same root cause).darwin-arm64+ Insiders is the missing counterpart.