diff --git a/.github/workflows/e2e-live.yml b/.github/workflows/e2e-live.yml index d68900a64..b3833bd45 100644 --- a/.github/workflows/e2e-live.yml +++ b/.github/workflows/e2e-live.yml @@ -43,10 +43,11 @@ on: default: '' required: false schedule: - # Weekly prod canary. Monday 05:00 UTC — before the CET workday, off-peak - # for the container pool. The monthly starter matrix runs at 03:00 on the - # 1st so a Monday-the-1st never starts both against the same five slots. - - cron: '0 5 * * 1' + # Nightly prod canary (Dan: every live-gated test runs every night, not + # weekly). 03:00 UTC — deep overnight for the CET team, and two hours + # after the nightly starter matrix (01:00) so the two never contend for + # the same five container slots. + - cron: '0 3 * * *' workflow_call: inputs: base_url: diff --git a/.github/workflows/e2e-starter-matrix.yml b/.github/workflows/e2e-starter-matrix.yml index 370265b15..9cdf20bdb 100644 --- a/.github/workflows/e2e-starter-matrix.yml +++ b/.github/workflows/e2e-starter-matrix.yml @@ -10,12 +10,12 @@ name: E2E — starter compatibility matrix # Anonymous session creation on prod works (the app only sends an Authorization # header when a login token exists), so no secrets are required here. # -# Manual, plus a monthly sweep (1st of the month, 05:00 UTC — off-peak for the -# container pool). It spins ~50 real container sessions; a local run at -# --workers=2 --retries=2 took ~36 min (46 passed / 27 skipped); allow headroom -# for CI + flake retries. The monthly cadence exists because this is the only -# coverage of the full starters × majors surface — weekly would double the -# container-hours for drift that moves on npm-release timescales (DEV-2203). +# Manual, plus a nightly sweep (01:00 UTC — deep overnight for the CET team, +# off-peak for the container pool). It spins ~50 real container sessions per +# run, metered in the cost ledger — the nightly cadence is an owner decision +# (Dan: every live-gated test runs every night). A run at --workers=2 +# --retries=2 took ~36 min (46 passed / 27 skipped); allow headroom for CI + +# flake retries. # # SINGLE JOB, --workers=2. Do NOT "optimize" this into a parallel matrix: prod # caps live-preview Sandboxes at 5 CONCURRENT *globally* (not per-job), so N @@ -30,11 +30,11 @@ on: default: 'https://demos.handsontable.com' required: true schedule: - # Monthly full sweep; schedule events carry no inputs, so the run step - # falls back to prod below. 03:00, not 05:00: the weekly e2e-live canary - # fires Mondays at 05:00, and a Monday-the-1st must not start both against - # the same global pool of five container slots (Bugbot, #189). - - cron: '0 3 1 * *' + # Nightly full sweep (Dan: all live coverage runs daily overnight); + # schedule events carry no inputs, so the run step falls back to prod + # below. 01:00 UTC, two hours ahead of the 03:00 e2e-live canary, so the + # two never contend for the same global pool of five container slots. + - cron: '0 1 * * *' # Two overlapping runs = 4 workers against the global 5-container cap, leaving # real traffic 1 slot. cancel-in-progress: false (opposite of ci.yml) on purpose: diff --git a/runner/AGENTS.md b/runner/AGENTS.md index 07c4c5173..ffebe20ba 100644 --- a/runner/AGENTS.md +++ b/runner/AGENTS.md @@ -171,8 +171,8 @@ Six workflows live in `.github/workflows/` at the repo root: |----------|---------|--------------| | `ci.yml` | every PR (+ manual dispatch) | the CI DAG: presence + unit → build → authoring → e2e (in the pinned Playwright container). PRs are the only place the full suite runs — master does not repeat it. | | `master.yml` | every push to `master` (or manual dispatch with per-target checkboxes) | deploy-first: path-gated `deploy-authoring`/`deploy-api` (each self-builds — a broken build never reaches wrangler), then one `@smoke` E2E run against prod. Merge-skew is covered by branch protection ("require branches to be up to date"), not by re-running the suite. | -| `e2e-live.yml` | manual, weekly canary (Mon 05:00 UTC, prod + AI), or `workflow_call` with `smoke: true` from `master.yml` | everything ci.yml cannot run: live renders, container suites, the share viewer/round-trip, AI answer checks. Dispatch inputs: `base_url`, `ai`, `pkg_pr_new_ref` (DEV-2198). | -| `e2e-starter-matrix.yml` | manual + monthly (1st, 03:00 UTC) | every starter × major through a live session; serialized against the global container cap. | +| `e2e-live.yml` | manual, nightly canary (03:00 UTC, prod + AI), or `workflow_call` with `smoke: true` from `master.yml` | everything ci.yml cannot run: live renders, container suites, the share viewer/round-trip, AI answer checks. Dispatch inputs: `base_url`, `ai`, `pkg_pr_new_ref` (DEV-2198). | +| `e2e-starter-matrix.yml` | manual + nightly (01:00 UTC) | every starter × major through a live session; serialized against the global container cap. | | `import-docs.yml` | manual, or `repository_dispatch: docs-examples-sync` from the docs repo | re-imports the documentation-guide examples. | | `import-starters.yml` | manual, `repository_dispatch: starter-examples-sync`, weekly cron, or push touching `examples/**` | re-imports the versioned starter buckets (each from `prod-examples/` when the branch exists, else `master`), rebuilds the catalog index + container contexts, opens a PR. |