test(ci): run full test suite on WSL2 (Ubuntu 24.04) - #263
Merged
Conversation
mwtng
force-pushed
the
feat/e2e-coverage-for-wsl
branch
12 times, most recently
from
August 25, 2026 18:51
26a2484 to
82dcc83
Compare
Contributor
|
cool didn't know that existed 😄 |
mwtng
force-pushed
the
feat/e2e-coverage-for-wsl
branch
4 times, most recently
from
August 25, 2026 21:30
37b9da9 to
a8bd584
Compare
mwtng
marked this pull request as ready for review
August 25, 2026 21:45
mwtng
force-pushed
the
feat/e2e-coverage-for-wsl
branch
from
August 25, 2026 22:04
a8bd584 to
08c6ebf
Compare
VictoriaRuckerbauer
added a commit
that referenced
this pull request
Aug 26, 2026
mwtng
force-pushed
the
feat/e2e-coverage-for-wsl
branch
2 times, most recently
from
August 27, 2026 09:39
08c6ebf to
faa5317
Compare
VictoriaRuckerbauer
added a commit
that referenced
this pull request
Aug 27, 2026
VictoriaRuckerbauer
added a commit
that referenced
this pull request
Aug 27, 2026
Signed-off-by: Victoria Ruckerbauer <victoria.ruckerbauer@tngtech.com>
VictoriaRuckerbauer
added a commit
that referenced
this pull request
Aug 27, 2026
Signed-off-by: Victoria Ruckerbauer <victoria.ruckerbauer@tngtech.com>
added 5 commits
August 27, 2026 16:55
- Add wsl2 job to ci.yml running `go test -race ./...` inside a real WSL2 (Ubuntu 24.04) distribution on windows-latest via Vampire/setup-wsl@v7 - Fix outdated comment in wsl2-session - Improve test tolerance for WSL2-specific quirk Signed-off-by: Mathias Wagner <mathias.wagner@tngtech.com>
- Run the full e2e suite and drift detection on real WSL2 (Ubuntu 24.04) via Vampire/setup-wsl@v7, all six harnesses. Go/bun/node are installed manually inside WSL; a /tmp/wsl-env.sh sourced per step handles PATH and wslpath translation of GITHUB_OUTPUT/GITHUB_STEP_SUMMARY/OMAC_BIN. CRLF stripping. Both jobs are continue-on-error during rollout. - Update documentation accordingly. Signed-off-by: Mathias Wagner <mathias.wagner@tngtech.com>
- add script to CI pipeline to notice drift between different OSes for e2e workflows. Detects: - missing WSL2-counterpart workflows - missing steps in WSL2-counterpart workflows - missing job-level env var keys in WSL2-counterpart workflows - add skip-list of e2e workflows with exclusion reason for visibility Signed-off-by: Mathias Wagner <mathias.wagner@tngtech.com>
- add missing dependency - add necessary WSL2 env variable, add it to the lint check - make WSL2 run as non-root - fix unbound env variables error - change default model and base url for workflows since skainet-external provider is phased out - fix root-only test (never ran for the others -> only surfaced due to the WSL2 run as root user) Signed-off-by: Mathias Wagner <mathias.wagner@tngtech.com>
- remove path_suffix, since that strips /v1 from the base_url, default of codewhale handles that correctly - include shell_env hook to preserve OMAC_ env variables within codewhale for skills Signed-off-by: Mathias Wagner <mathias.wagner@tngtech.com>
added 5 commits
August 27, 2026 17:02
Signed-off-by: Mathias Wagner <mathias.wagner@tngtech.com>
- their features would only work in an interactive TUI - label CodeWhale as experimental Signed-off-by: Mathias Wagner <mathias.wagner@tngtech.com>
- move log dir env variable to step-level since runner is not available before - pull release on Windows, unpack to WSL2 - move wsl-env.sh to home to avoid automatic deletion on /tmp if processes inbetween take too long Signed-off-by: Mathias Wagner <mathias.wagner@tngtech.com>
Signed-off-by: Mathias Wagner <mathias.wagner@tngtech.com>
…s blocking Signed-off-by: Mathias Wagner <mathias.wagner@tngtech.com>
mwtng
force-pushed
the
feat/e2e-coverage-for-wsl
branch
2 times, most recently
from
August 27, 2026 15:11
b097be9 to
276203c
Compare
- PR #248 only resolved them in BundleHash and copyTree, new keychain e2e-tests failed on macos without this fix Signed-off-by: Mathias Wagner <mathias.wagner@tngtech.com>
mwtng
force-pushed
the
feat/e2e-coverage-for-wsl
branch
from
August 27, 2026 15:19
276203c to
df0c0a4
Compare
VictoriaRuckerbauer
approved these changes
Aug 27, 2026
VictoriaRuckerbauer
left a comment
Contributor
There was a problem hiding this comment.
Discussed the PR together, looks reasonable
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Issue: Refs #108
Other PRs: #261 should be merged before (done)
Rebase on main + two extra commits: changes/additions marked here
+ one extra commit: fix a test that failed due to "conflicting" previous merges
What
ci.yml,e2e.yml, ande2e-smoke.yml(EDIT: continue-on-error removed)path_suffix(caused 404) and addshell_envhook for TUI env re-injectionStripsEnvVarsflag)e2e.yml+e2e-smoke.yml); codewhale failures are now advisory-onlyDrive-bys:
SKAINET_EXTERNALsecret toSKAINET_INTERNALacross all workflowsdeepseek-ai/DeepSeek-V4-Flash(except for "release" to have a stronger reasoning model)Why
GOOS=linuxunder Microsoft kernel, bwrap sandbox runs unchanged) but had no CI coverage. The macOS-only codex/codewhale exclusions don't apply on WSL2 since it's not Seatbelt.path_suffix = "/chat/completions"stripped the/v1version segment frombase_url, yielding 404. CodeWhale'schild_envmodule callsenv_clear()and rebuilds from a fixed allowlist that excludesOMAC_*— theshell_envhook re-injects them, but only fires in the interactive TUI, not incodewhale exec.codewhale exec(headless mode, used by e2e tests) stripsOMAC_*from bash subprocesses; sidecar/cache/echo assertions fail on missing env, not on sandbox defects.Drive-bys:
SKAINET_EXTERNALis phasing outSKAINET_EXTERNALgone, the old empty model default (GLM) would receive larger load, a small internal model is the default now. Only the "release" workflow has the standard model for reasoning (only single LLM call)How
ci.yml—wsl2job usingVampire/setup-wsl@v7, Go installed manually,go test -race ./...e2e.ymlande2e-smoke.yml—e2e-wsl2/smoke-wsl2jobs, non-rootrunneruser,wsl-env.shsourced per step for PATH andwslpathtranslation,WSLENVforwarding all job/step env vars, CRLF stripping, split release provisioning (download tarball on Windows side, extract Linux ELF in WSL)scripts/check-wsl2-coverage.py+ wired intoci.ymllint job — checks step-name parity, job-level env key parity, and WSLENV coverageStripsEnvVars:internal/e2e/harnesses.go— removedpath_suffix, addedshell_envhook toconfig.toml, setStripsEnvVars: true,ExpectVisibleEnvreturnsnilinternal/e2e/e2e_test.go— skipassertEchoOK,assertSecretFingerprintPresent,assertEnvVarsVisible,assertCacheIsolationwhenStripsEnvVars; filesystem assertions still runinternal/sandboxrun/integration_worktree_linux_test.go— tolerate EBUSY packed-refs fatal on WSL2AGENTS.md,docs/HARNESSES.md,docs/HARNESS_COMPAT.mde2e.ymle2e-codewhalejob ande2e-smoke.ymlsmoke-codewhalejob — Linux-only, codewhale-only,continue-on-error: true, reusing the full smoke/e2e step sequencee2e-smoke.ymlreportjob —ADVISORY_HARNESS_REenv var (top-level) steers which harness rows are advisory;Prepare this run's rowssplits rows into blocking/advisory, moves advisory.ctxaside so failure classifiers only see authoritative failures; dashboard adds a "Non-blocking failures" section, Slack appends an advisory noteDrive-bys:
.github/workflows/, except.github/workflows/release.ymlVerification
gh workflow run e2e.yml --ref feat/e2e-coverage-for-wsl -f skip_claude_code=trueor via the GitHub UIgh workflow run e2e-smoke.yml --ref feat/e2e-coverage-for-wslor via the GitHub UIpython3 scripts/check-wsl2-coverage.pygo build -tags=e2e ./internal/e2e/... && go vet -tags=e2e ./internal/e2e/...Follow-up
shell_env-equivalent mechanism forcodewhale execmode if CodeWhale adds support, or create .sh file that gets filled with all necessaryOMAC_*env variables and gets sourced before every tool execution of CodeWhale.