smoke-tests
Skill221 starsChanged 6 months agoApache-2.0View on GitHub
Use when running VS Code smoke tests or working on smoke-test CI steps. Covers npm run smoketest / smoketest-no-compile, grep filtering tests, and a temporary repeat-loop technique for tracking down flaky smoke tests in CI.
5 other projects use a version of this, 2 of them edited.
Adopted by
Most recently taken up by
- EpicGames/loretheir own version, first seen Nov 9, 2026
- Conceptual-Machines/magda-coretheir own version, first seen Nov 7, 2026
- microsoft/vscodeedited, first seen Nov 2, 2026
- vguedz/skillstheir own version, first seen Oct 17, 2026
- posit-dev/positronedited, first seen Oct 8, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 2
- microsoft/vscode★ 195k50% same
- posit-dev/positron★ 4.3k87% same
Wrote their own version · 3
- EpicGames/lore★ 9.1ksame name
- Conceptual-Machines/magda-core★ 258same name
- vguedz/skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository27 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .github/copilot-instructions.mdCopilot instructions
- launchSkill
- accessibilitySkill
- add-policySkill
- author-contributionsSkill
- auto-perf-optimizeSkill
- azure-pipelinesSkill
- chat-customizations-editorSkill
- chat-perfSkill
- code-oss-logsSkill
- component-fixturesSkill
- cpu-profile-analysisSkill
- fix-ci-failuresSkill
- fix-errorsSkill
- heap-snapshot-analysisSkill
- hygieneSkill
- integration-testsSkill
- memory-leak-auditSkill
- otelSkill
- sessionsSkill
- tool-rename-deprecationSkill
- unit-testsSkill
- update-screenshotsSkill
- ux-css-layoutSkill
- ux-themingSkill
- vscode-dev-workbenchSkill
The file
We split this skill into the rules it gives an agent
1 rule. 0 are common, 1 is distinctive, and 0 are very specific to this project.
0
Common
Most of the 5 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 49
Add it on a throwaway branch, push, and let CI run it.
“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Running Smoke Tests
Smoke tests live in test/smoke/ and drive a full VS Code instance (Electron, web, or remote) through end-to-end user flows.
Scripts
npm run smoketest— compiles the smoke tests first (test/smoke), then runs them.npm run smoketest-no-compile— runs the already-compiled smoke tests. CI uses this after an explicit compile step.
Both forward extra arguments after -- to the runner (test/smoke/test/index.js).
Common options
| Option | Description |
-g <pattern> (alias -f) | Grep filter on test/suite titles (mocha grep). |
--build <path> | Run against a packaged build instead of the compiled-from-source dev build. |
--tracing | Capture Playwright traces (and screenshots on failure). |
--web | Run the browser smoke tests instead of Electron. |
--headless | Headless browser (used with --web). |
--remote | Run the remote smoke tests. |
# Run everything (Electron, from source)
npm run smoketest
# Run only a subset of suites by name, with tracing (replace <suite name> with your suite, e.g. "Agents Window")
npm run smoketest -- -g "<suite name>" --tracing
# Run against a packaged build (CI style)
npm run smoketest-no-compile -- --tracing --build "/path/to/VSCode-darwin-arm64/Code - OSS.app"The -g pattern matches against test/suite titles. For example, -g "Agents Window" matches all three Agents Window suites (Agents Window, Agents Window (local AgentHost), and Agents Window (local AgentHost, SDK sandbox)); use whatever substring identifies the suite(s) you care about.
The runner exits non-zero if any test fails, so a 0 exit code means every selected test passed.
Temporarily looping a suite to hunt flaky CI tests
When a smoke test fails intermittently only in CI, a useful technique is to temporarily run the suspect suite many times in a row and fail on the first failure. This reproduces the flake under the real CI environment and captures its traces/screenshots, instead of waiting for it to recur naturally across unrelated PRs.
This is a debugging aid, not a permanent CI fixture:
- Add it on a throwaway branch, push, and let CI run it. Iterate until you reproduce (and then fix) the flake.
- Remove the loop before merging — leaving it in would add ~an hour per platform to every run.
- It is not specific to any one suite. Point the
-gfilter at whichever suite you are investigating (the examples below use"Agents Window", but substitute your own).
Where to add it
Drop the loop next to the existing Electron smoke step, gated on the same condition, in the test step(s) for the platform(s) where the flake reproduces:
GitHub PR workflows (run from source, no --build):
.github/workflows/pr-linux-test.yml(bash; setsDISPLAY: ":10").github/workflows/pr-darwin-test.yml(bash; noDISPLAY).github/workflows/pr-win32-test.yml(PowerShell)
Azure DevOps test steps (run against the packaged build via --build):
build/azure-pipelines/linux/steps/product-build-linux-test.ymlbuild/azure-pipelines/darwin/steps/product-build-darwin-test.ymlbuild/azure-pipelines/win32/steps/product-build-win32-test.yml
Shape
Loop N iterations (e.g. 20) and abort on the first failing run. Give it a generous timeout — N sequential runs of a ~3-minute suite can take roughly an hour.
Bash (Linux/macOS):
# TEMPORARY: loop the suite to reproduce a flaky failure. Remove before merge.
# Replace <suite name> with the suite you're investigating (e.g. "Agents Window").
- name: 🧪 Smoke test flakiness probe (TEMPORARY)
if: ${{ inputs.electron_tests }}
timeout-minutes: 60
run: |
for i in $(seq 1 20); do
echo "::group::Smoke probe run $i/20"
npm run smoketest-no-compile -- --tracing -g "<suite name>" || { echo "::error::Smoke test failed on run $i/20"; exit 1; }
echo "::endgroup::"
donePowerShell (Windows) checks $LASTEXITCODE after each run and exit 1 on failure. The AzDO variants use set -e (bash) / $LASTEXITCODE (pwsh) for fail-fast and append --build "<packaged app path>".
Why fail-fast
The loop is a probe: the first failure is the signal. Stopping immediately preserves the failing run's traces/screenshots (under the logs artifact) and avoids burning ~an hour of agent time finishing a run that has already proven flaky.
Debugging CI smoke failures
Both CI systems publish the smoke runner's per-platform logs (the .build/logs directory) as a downloadable artifact. The artifact's internal layout is identical on both — only the artifact name and the download tool differ.
Downloading the logs artifact
GitHub Actions
The GitHub PR workflows upload the artifact as logs-<os>-<arch>-<suite>-<attempt>, where <os> is linux / macos / windows, <suite> is electron / browser / remote, and <attempt> is the run attempt (e.g. logs-macos-arm64-electron-1).
The run id is the number in the run/job URL — for …/actions/runs/<run-id>/job/<job-id> use <run-id>. Download with the gh CLI:
# A specific artifact into ./logs
gh run download <run-id> -n logs-<os>-<arch>-<suite>-<attempt> -D ./logs
# Or every artifact from the run
gh run download <run-id>gh run view <run-id> lists the run's jobs/artifacts; the run summary page in the browser also has an Artifacts section at the bottom.
Azure DevOps
The artifact name depends on which pipeline produced it:
- Product build (
product-build-<os>.yml):logs-<os>-<arch>-<attempt>— no suite segment, e.g.logs-macos-arm64-1. - Suite-split CI build (
product-build-<os>-ci.yml):logs-<os>-<arch>-<suite>-<attempt>— the<suite>segment islower(VSCODE_TEST_SUITE)(e.g.electron), so e.g.logs-macos-arm64-electron-1(same shape as GitHub).
<os> is linux / macos / windows, <arch> is x64 / arm64, and <attempt> is $(System.JobAttempt). Download with the Azure CLI:
az pipelines runs artifact download \
--org <ORG_URL> --project <PROJECT_NAME> \
--run-id <BUILD_ID> --artifact-name <artifact-name> \
--path ./logsFor the VS Code build that is --org https://dev.azure.com/monacotools --project Monaco; see the azure-pipelines skill for finding the <BUILD_ID>.
Inside the artifact
Under smoke-tests-<suite>/ (smoke-tests-electron/, smoke-tests-browser/, or smoke-tests-remote/, matching the suite that ran):
smoke-test-runner.log— the mocha driver output plus, for suites that use the mock LLM server, its verbose request/response bodies (look forrequest body:).<N>_suite_<Suite_Name>/window2/exthost/<extension>/…log— per-suite extension-host logs (e.g.GitHub.copilot-chat/GitHub Copilot Chat.log). Many diagnostics are gated behind a setting the suite enables in itsbeforehook, so check the suite's setup if an expected log line is missing.<N>_suite_<Suite_Name>/playwright-screenshot-*.png— last-frame screenshot captured when a test fails (only when the suite ran with--tracing).
<Suite_Name> is the mocha suite title with non-word characters replaced by _. See also the code-oss-logs skill.
Distinction from other test types
- Unit tests (
.test.ts) →scripts/test.sh/runTeststool (see theunit-testsskill). - Integration tests (
.integrationTest.ts+ extension tests) →scripts/test-integration.sh(see theintegration-testsskill). - Smoke tests (
test/smoke/) →npm run smoketest— full end-to-end UI flows.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

