fix(ci): avoid duplicate Matrix release QA runs (#119171)

* fix(ci): gate reusable Matrix QA runs

* docs(ci): document Matrix release QA budget
This commit is contained in:
Vincent Koc
2026-08-05 03:31:00 +08:00
committed by GitHub
parent 832459d2ae
commit e99c289f3b
3 changed files with 5 additions and 3 deletions
@@ -398,9 +398,9 @@ jobs:
run_live_matrix:
name: Run Matrix live QA lane
needs: [authorize_actor, validate_selected_ref]
if: github.event_name != 'workflow_call' || inputs.run_matrix
if: inputs.expected_sha == '' || inputs.run_matrix
runs-on: blacksmith-16vcpu-ubuntu-2404
timeout-minutes: 60
timeout-minutes: 90
environment: qa-live-shared
steps:
- name: Checkout selected ref
+1
View File
@@ -571,6 +571,7 @@ The scheduled live/E2E workflow runs the full release-path Docker suite daily an
QA Lab has dedicated CI lanes outside the main smart-scoped workflow. Agentic parity is nested under the broad QA and release harnesses, not a standalone PR workflow. Use `Full Release Validation` with `rerun_group=qa-parity` when parity should ride with a broad validation run.
- The `QA-Lab - All Lanes` workflow runs nightly on `main` and on manual dispatch; it fans out mock parity plus live Matrix, Telegram, Discord, WhatsApp, and Slack jobs. Live jobs use the `qa-live-shared` environment; Telegram, Discord, WhatsApp, and Slack use Convex leases, while Matrix provisions disposable local credentials.
- Release Matrix catalog validation runs serially on a 16-vCPU Blacksmith runner with a 90-minute job budget. Changes to that timeout, runner size, or concurrency require a matching workflow guard and exact-candidate release proof.
Scheduled, manual, and release Matrix checks use the deterministic mock provider so the live transport contract is isolated from model latency and normal provider-plugin startup. Telegram release checks use the same deterministic model boundary. The live transport gateway disables memory search because QA parity covers memory behavior separately; provider connectivity is covered by the separate live model, native provider, and Docker provider suites.
@@ -3149,7 +3149,7 @@ describe("package artifact reuse", () => {
"inputs.expected_sha == '' || inputs.run_mock_parity",
);
expect(workflowJob(QA_LIVE_TRANSPORTS_WORKFLOW, "run_live_matrix").if).toBe(
"github.event_name != 'workflow_call' || inputs.run_matrix",
"inputs.expected_sha == '' || inputs.run_matrix",
);
for (const channel of ["telegram", "discord", "whatsapp", "slack"]) {
expect(workflowJob(QA_LIVE_TRANSPORTS_WORKFLOW, `run_live_${channel}`).if).toBe(
@@ -3174,6 +3174,7 @@ describe("package artifact reuse", () => {
expect(qaWorkflow).not.toContain('"${{ inputs.expected_sha }}" !== ""');
expect(qaWorkflow).toContain('if [[ -n "${EXPECTED_SHA}" ]]; then');
const matrixJob = workflowJob(QA_LIVE_TRANSPORTS_WORKFLOW, "run_live_matrix");
expect(matrixJob["timeout-minutes"]).toBe(90);
expect(workflowStep(matrixJob, "Run Matrix live lane").run).toContain(
"--provider-mode mock-openai",
);