mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-11-07 06:19:43 -10:00
fix(ci): Take the OpenTUI interactive e2e leg out of CI (#10829)
Batch 7 added a dedicated OpenTUI leg to e2e.yml. It never ran on its own PR — the workflow triggers only on push to main, nightly and dispatch — so its first executions were on main, where it fails deterministically: the same four interactive files have failed across three consecutive main commits. The failures are not test fragility. Each one is a parity gap the renderer still has, and the leg did its job by surfacing them: - the approval-mode indicator is never drawn, so a user running --yolo cannot see which mode they are in; - the submit seam drops submittedPrompt, so the UserPromptSubmit hook input loses submitted_prompt and external-context auto-recall silently no-ops; - the live turn bypasses the query-preparation pipeline, so @file expansion does not work under this renderer at all. Removing the leg keeps main green without deleting any test: the ink leg still runs every one of these files, so nothing regresses silently. The renderer matrix stays wired in — the e2e legs keep pinning their renderer, and the OpenTUI side remains runnable locally through npm run test:integration:interactive:opentui:sandbox:none. Restoring the CI leg is gated on closing the three gaps, tracked in #8662. The design doc claimed the build/CI batch "runs the OpenTUI e2e leg green on CI"; that named a mechanism this commit removes, so both mentions now match the tree.
This commit is contained in:
1 parent
41092ae9c3
commit
c3bf0fea5b
2 files changed
+11
-70
No files matched your search
@@ -258,7 +258,9 @@ jobs:
|
||||
fi
|
||||
fi
|
||||
# QWEN_E2E_RENDERER=ink pins the baseline leg of the renderer
|
||||
# matrix; the opentui leg runs in e2e-interactive-opentui below.
|
||||
# matrix; the OpenTUI counterpart has no CI leg. Run it locally
|
||||
# with npm run test:integration:interactive:opentui:sandbox:none
|
||||
# (parity gaps tracked in issue #8662).
|
||||
# The docker leg runs vitest directly instead of through
|
||||
# test:integration:sandbox:docker: that script would rebuild the image
|
||||
# the step above just built.
|
||||
@@ -369,71 +371,6 @@ jobs:
|
||||
OPENAI_MODEL: '${{ secrets.OPENAI_MODEL }}'
|
||||
run: 'npx cross-env QWEN_E2E_RENDERER=ink VERBOSE=true KEEP_OUTPUT=true QWEN_SANDBOX=false vitest run --root ./integration-tests --exclude "**/interactive/cron-interactive.test.ts" --exclude "**/channel-plugin.test.ts" --shard="${{ matrix.shard }}"'
|
||||
|
||||
e2e-interactive-opentui:
|
||||
name: 'E2E Interactive - OpenTUI renderer (bun)'
|
||||
runs-on: 'ubuntu-latest'
|
||||
# Same rationale as e2e-test-linux: a wedged run must free the runner.
|
||||
timeout-minutes: 60
|
||||
# Skip on fork PRs (no secrets) — see e2e-test-linux above.
|
||||
if: |-
|
||||
${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
|
||||
steps:
|
||||
- name: 'Checkout'
|
||||
uses: 'actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10' # v6.0.3
|
||||
|
||||
- name: 'Set up Node.js'
|
||||
uses: 'actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e' # v6.4.0
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'npm'
|
||||
cache-dependency-path: 'package-lock.json'
|
||||
registry-url: 'https://registry.npmjs.org/'
|
||||
|
||||
# The opentui renderer leg runs the CLI bundle under bun: the locked
|
||||
# @opentui/core loads its native renderer through bun:ffi, and the CI
|
||||
# node build cannot load node:ffi. The renderer matrix also pins
|
||||
# QWEN_TUI_RENDERER=opentui (plus QWEN_TUI_RENDERER_STRICT) for every
|
||||
# spawned CLI, so a boot that silently fell back to ink fails the leg
|
||||
# instead of passing as a false green. The version matches
|
||||
# DEFAULT_BUN_VERSION in scripts/build-standalone-release.js (the
|
||||
# --runtime=bun archive flavor) and is pinned, not 'latest', so an
|
||||
# upstream Bun release cannot flip this gating leg red on its own.
|
||||
- name: 'Set up Bun'
|
||||
uses: 'oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6' # v2.2.0
|
||||
with:
|
||||
bun-version: '1.3.14'
|
||||
|
||||
- name: 'Configure npm for rate limiting'
|
||||
run: |-
|
||||
npm config set fetch-retry-mintimeout 20000
|
||||
npm config set fetch-retry-maxtimeout 120000
|
||||
npm config set fetch-retries 5
|
||||
npm config set fetch-timeout 300000
|
||||
|
||||
- name: 'Install dependencies'
|
||||
env:
|
||||
QWEN_SKIP_PREPARE: '1'
|
||||
run: |-
|
||||
npm ci --prefer-offline --no-audit --progress=false
|
||||
|
||||
- name: 'Build project'
|
||||
run: |-
|
||||
npm run build
|
||||
|
||||
- name: 'Bundle CLI for E2E tests'
|
||||
run: |-
|
||||
npm run bundle
|
||||
|
||||
- name: 'Run interactive E2E tests (OpenTUI)'
|
||||
env:
|
||||
OPENAI_API_KEY: '${{ secrets.OPENAI_API_KEY }}'
|
||||
OPENAI_BASE_URL: '${{ secrets.OPENAI_BASE_URL }}'
|
||||
OPENAI_MODEL: '${{ secrets.OPENAI_MODEL }}'
|
||||
KEEP_OUTPUT: 'true'
|
||||
VERBOSE: 'true'
|
||||
run: |-
|
||||
npx cross-env QWEN_E2E_RENDERER=opentui QWEN_SANDBOX=false vitest run --root ./integration-tests interactive --exclude '**/interactive/cron-interactive.test.ts' --exclude '**/channel-plugin.test.ts'
|
||||
|
||||
isolated-nightly:
|
||||
name: '${{ matrix.label }} (nightly)'
|
||||
runs-on: 'ubuntu-latest'
|
||||
|
||||
@@ -159,8 +159,8 @@ The pieces, in landing order:
|
||||
own (#8662 U-10). The runtime fixes this batch used to carry — the Bun
|
||||
memory flags and the goal-runtime startup wait — landed early in #10128.
|
||||
- **Build & CI.** Bundle asset pipeline for the OpenTUI runtime assets, the
|
||||
CI legs (e2e, tui-parity), renderer-matrix integration tests, and the
|
||||
parity tooling (codemod, PTY harness).
|
||||
tui-parity CI gate, renderer-matrix integration tests and the env pinning
|
||||
the e2e legs carry, and the parity tooling (codemod, PTY harness).
|
||||
|
||||
### Renderer selection and runtime gate
|
||||
|
||||
@@ -252,8 +252,12 @@ safe to run before its owners exist, and the activation batch inherits them:
|
||||
vitest suite green; the default (ink) path byte-for-byte unchanged — the
|
||||
batches landed so far touch zero reachable ink code paths because nothing
|
||||
outside `src/ui/opentui/` imports them. The activation batch additionally
|
||||
smoke-tests the flag under Bun (boot, dialog, live turn, exit drain); the
|
||||
build/CI batch runs the OpenTUI e2e leg green on CI.
|
||||
smoke-tests the flag under Bun (boot, dialog, live turn, exit drain). The
|
||||
build/CI batch wired the renderer matrix into the existing e2e legs and
|
||||
added the tui-parity gate; its own OpenTUI interactive e2e leg ran on
|
||||
`main`, reported three real gaps (approval-mode indicator never drawn,
|
||||
`@file` expansion absent, `submitted_prompt` dropped), and has since come
|
||||
out of CI until those close (#8662).
|
||||
- **1:1 parity audits** — screen-by-screen comparison against ink, plus a
|
||||
reverse audit pass, with surviving differences landing as tracked gaps
|
||||
(G-series) rather than silent drift.
|
||||
|
||||
Reference in new issue
Block a user