Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 0 additions & 48 deletions .github/workflows/coverage-nightly.yml

This file was deleted.

41 changes: 0 additions & 41 deletions .github/workflows/engine-split-metric.yml

This file was deleted.

2 changes: 1 addition & 1 deletion .github/workflows/half-state-patrol.yml
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ on:
# action, and never by reading a cadence out of this file.
workflow_dispatch: {}
# Changes to the patrol itself get exercised before they merge — the same
# posture as engine-split-metric.yml. On a pull_request run the sweep still
# posture as test-nightly-tiers.yml. On a pull_request run the sweep still
# executes (that is the point: the transport, the flags and the rendering are
# proven on a real runner), but the anchor write is skipped and the rendered
# body goes to the run's step summary instead. A PR must never rewrite the
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/shard-timings-refresh.yml
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ jobs:
persist-credentials: false

# Restore-only: scheduled runs read main's store cache; the per-push
# workflows own saving it. Same shape as coverage-nightly.yml.
# workflows own saving it. Same shape as test-nightly-tiers.yml.
- name: Setup workspace
uses: ./.github/actions/setup-workspace
with:
Expand Down
90 changes: 0 additions & 90 deletions .github/workflows/showcase-smoke.yml

This file was deleted.

63 changes: 58 additions & 5 deletions .github/workflows/test-nightly-tiers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ name: Nightly Tiers
#
# ## Shape
#
# `coverage-nightly.yml`'s: `schedule` + `workflow_dispatch`, node 22, pnpm,
# The house nightly shape: `schedule` + `workflow_dispatch`, node 22, pnpm,
# RESTORE-ONLY caches (a scheduled run reads main's pnpm store and Build Core's
# turbo seeds; the per-push workflows own saving them, and a nightly that saved
# would churn the rationed 10 GB pool the way PR-side saves once did — see
Expand Down Expand Up @@ -41,6 +41,14 @@ name: Nightly Tiers
# `--shard k/N`) only when a second tier-owning package arrives heavy enough
# for the partitioner's own balance line to say so.
#
# The second tier-owning package is `@objectstack/example-showcase`, and it is
# not that heavy: one `*.live.test.ts` file (#26445), the showcase browser
# smoke, which used to be its own scheduled workflow (Showcase Smoke) and
# filed nothing when red. The partitioner keeps it whole ("not the run's
# floor") and places it on one shard; that shard also builds the Console SPA
# and installs Chromium for it (≈ 5 min, the "Prepare the showcase browser
# smoke" step), which no other shard pays.
#
# ## What lands where — the house idiom of `platform-checklist-watchdog.yml`
#
# On green this workflow files nothing, edits nothing and closes nothing. On
Expand Down Expand Up @@ -75,9 +83,7 @@ on:
schedule:
# Nightly. The minute is offset off the top of the hour ON PURPOSE (scheduled
# workflows queue behind everyone else's `:00` cron) and off every sibling
# patrol's minute, so two of them never contend for the same runner minute;
# 05:29 sits after `coverage-nightly` (05:00) has started and well before
# `showcase-smoke` (07:00).
# patrol's minute, so two of them never contend for the same runner minute.
#
# ⚠️ Two readers, one fact. This value is restated as `PATROL_SCHEDULE` in
# the `env:` block below, where the report step computes the deadline the
Expand Down Expand Up @@ -205,6 +211,31 @@ jobs:
echo 'Items on this shard (a package name, or a package plus a k/n file-level slice):'
cat "$RUNNER_TEMP/shard-packages.txt"

# The showcase browser smoke (`examples/app-showcase/test/showcase-smoke.live.test.ts`)
# drives the Console against a real backend through Playwright, and needs
# two things `turbo run test` does not produce: the Console SPA the backend
# serves at /_console (`packages/console/dist`, built by the `build:dist`
# task — `pnpm console:build`), and a Chromium this `@playwright/test` can
# launch. Only the shard the partitioner gave that package pays for them.
# The test's own `^build` closure is the `test` task's, as for every
# package here.
#
# `continue-on-error`, on purpose: the same shard carries a slice of the
# CLI's e2e tier, and a Console build that fails one night must not take
# that slice down with it. The night is still red, and still names the
# file — the smoke then fails every test at once, and its failure text
# says to read a whole-run red as the environment first; this step's red
# in the log is the environment.
- name: Prepare the showcase browser smoke
continue-on-error: true
run: |
if ! grep -qE '^@objectstack/example-showcase( |$)' "$RUNNER_TEMP/shard-packages.txt"; then
echo "@objectstack/example-showcase is not on this shard — nothing to prepare."
exit 0
fi
pnpm console:build
pnpm --filter @objectstack/example-showcase exec playwright install --with-deps chromium

# The same leg loop as ci.yml's "Run this shard's tests", under the
# nightly setting, with vitest's JSON reporter added beside the default
# one: `--outputFile.json` is RELATIVE so each package writes its own
Expand All @@ -220,6 +251,13 @@ jobs:
# ⛔ A failing leg STOPS the remaining ones, as in ci.yml: a second full
# leg on a job that is already red only risks turning an informative red
# into a killed job with no report at all.
#
# One deliberate difference from ci.yml: the file-level SLICES run first
# and the whole-package leg last. The whole packages here are the cheap
# ones (the partitioner keeps a package whole when it is not the run's
# floor) — today the showcase browser smoke — and a red in one of them
# must not stop the shard's slice of the CLI's e2e tier from running.
# The other way round, a red slice skips a few minutes of smoke.
- name: Run this shard's nightly tiers
env:
OS_TEST_TIERS: nightly
Expand All @@ -246,7 +284,7 @@ jobs:
REPORTER="--reporter=default --reporter=json --outputFile.json=.nightly-tiers/vitest-report.json"
STATUS=0
LOGS=""
for LEG in __whole__ $SLICES; do
for LEG in $SLICES __whole__; do
if [ "$LEG" = __whole__ ]; then
[ -n "$FILTERS" ] || continue
LOG="$RUNNER_TEMP/nightly-tiers-packages.log"
Expand Down Expand Up @@ -299,6 +337,21 @@ jobs:
if-no-files-found: ignore
retention-days: 14

# The showcase smoke's screenshots, traces and error context, which
# Playwright writes under its default `outputDir` beside its config.
# `always()` and `ignore`: a red smoke leaves them, and so does a green
# one that passed only on its retry (`retries: 1` under CI) — the flaky
# first attempt is the evidence a time-dependent red needs. A clean green,
# and every shard without the showcase, leave nothing and upload nothing.
- name: Publish the showcase smoke's Playwright diagnostics
if: always()
uses: actions/upload-artifact@v7
with:
name: showcase-smoke-diagnostics-${{ matrix.shard }}
path: examples/app-showcase/test-results/
if-no-files-found: ignore
retention-days: 7

# The same two questions ci.yml's guard answers about a red suite — was
# every test vitest COUNTED actually run, and did every scheduled package
# report at all — asked of this shard's log against this shard's schedule.
Expand Down
3 changes: 2 additions & 1 deletion docs/qa/platform-checklist/areas/platform-core.json
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,8 @@
"traps": ["hydration-race", "single-datapoint", "stale-console-bundle"],
"source": [
"examples/app-showcase/e2e/showcase-smoke.spec.ts#SURFACES (SURFACES)",
".github/workflows/showcase-smoke.yml",
"examples/app-showcase/test/showcase-smoke.live.test.ts",
".github/workflows/test-nightly-tiers.yml",
"objectui: packages/app-shell/src/chrome/ErrorBoundary.tsx (route-level fallback + recovery actions)",
"examples/app-showcase/src/ui/apps/index.ts (nav truth)"
],
Expand Down
5 changes: 4 additions & 1 deletion examples/app-showcase/playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@ declare const process: { env: Record<string, string | undefined> };
* to run `playwright test`; locally it reuses an already-running :3000.
*
* Run: pnpm --filter @objectstack/example-showcase exec playwright test
* (or via the ci/showcase-smoke workflow). Non-blocking by design.
* (`pnpm test:smoke`). On CI it runs nightly, never on a pull request:
* `test/showcase-smoke.live.test.ts` runs this config in the nightly
* `live` tier (test-nightly-tiers.yml), whose report job files a card
* when it is red.
*
* ## Where the server is, and which browser drives it
*
Expand Down
Loading
Loading