Skip to content

chore(ci): add the nightly scheduled tier and watch Cloudflare ranges - #1833

Draft
FSM1 wants to merge 2 commits into
mainfrom
chore/1385-652-1508-nightly-tier
Draft

FSM1 wants to merge 2 commits into
mainfrom
chore/1385-652-1508-nightly-tier

Conversation

@FSM1

@FSM1 FSM1 commented Sep 14, 2026

Copy link
Copy Markdown
Owner

What changes

One nightly.yml now owns every scheduled slot. scheduled-liveness.yml is renamed into it, so the repository keeps one cron surface instead of three.

  • API Long-Horizon Liveness — unchanged, carried over by the rename.
  • Full-Matrix Flake Surveillance — calls ci-e2e.yml through a new workflow_call trigger instead of restating its suites, so the nightly run reports the same job names the main gate does. A force-all input stands in for the push change filter, which has no base commit on a night with no push. retries: 0 needs no new setting: tests/web-e2e/playwright.config.ts already sets it as policy in both slices.
  • Cloudflare Range Watch — diffs the committed trusted-proxy snapshot against https://api.cloudflare.com/client/v4/ips and fails on any difference. CLOUDFLARE_RANGES moves into scripts/cloudflare-ranges.mjs, because importing the accelerator front check would run Docker; the Lint gate still pins docker/Caddyfile to the same set and the Caddy runtime is unchanged.
  • Report — one job with issues: write runs when any slot fails and opens, or comments on, a single comp:ci tracking issue. One issue is reused, so a week of red nights does not file seven issues.

blueprint/deploy.md and blueprint/testing.md record the tier, and the range list moves from a residual assumption to a watched one.

Closes #1385.
Closes #652.
Closes #1508.

Verification

  • zizmor 1.25.2 --no-online-audits .github/workflows/ .github/actions/ — no findings.
  • actionlint on both edited workflows — clean.
  • pnpm lint, pnpm lint:md, pnpm lint:tracker-refs — clean.
  • pnpm lint:accelerator-front against the real adapted Caddy config — obligations hold, so the extracted constant feeds the same gate.
  • node scripts/check-cloudflare-ranges.mjs — the committed 22 ranges match Cloudflare's live list today. The unreachable-source path was exercised against an unresolvable host and exits 1 with a readable message.
  • pnpm --filter @cipherbox/api typecheck — clean.

GitHub reads schedule and workflow_dispatch from the default branch alone, so the new file is inert on this branch and becomes dispatchable only after the merge. The first real exercise of the nightly tier is therefore the night after this lands.

Body checks and follow-ups filed

Rename scheduled-liveness.yml to nightly.yml so one cron surface owns
every scheduled slot, and add the full-matrix flake surveillance slot
beside the long-horizon liveness one.

Surveillance calls ci-e2e.yml through a new workflow_call trigger rather
than restating its suites, so the nightly run reports the same job names
the main gate does. A force-all input stands in for the push change
filter, which has no base commit on a night with no push.

A report job opens, or comments on, a single comp:ci tracking issue when
any slot fails, so a scheduled red is never a square nobody reads.
The Lint gate pins docker/Caddyfile to the committed range snapshot, so
it catches an edit to the trusted set but not Cloudflare changing that
set upstream. A range Cloudflare adds collapses every member behind the
new POP into one rate-limit bucket, and nothing reported it.

Move CLOUDFLARE_RANGES into its own module, because importing the
accelerator front check runs Docker, and diff it against Cloudflare's
published list in a nightly job. An unreachable or malformed source
fails the job, so silence is never read as a pass.
@FSM1 FSM1 changed the title chore: placeholder title pending edit chore(ci): add the nightly scheduled tier and watch Cloudflare ranges Sep 14, 2026
@coderabbitai

coderabbitai Bot commented Sep 14, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant