ci: run PR checks on pull requests into edge as well as main #127

Merged
whitlocktech merged 1 commits from ci/pr-checks-on-edge into main 2026-08-10 07:42:16 +00:00
Member

One line, branches: [main]branches: [main, edge], plus the comment explaining why.

The problem

Long workstreams land phase by phase on edge and reach main as a single cutover — protocol v3 did it, and the module system (docs#122) is about to. But pr-checks.yml triggers only on PRs into main, so every one of those phase PRs merges with no checks at all: no server tests, no client build, no bot install. The workstream runs blind for weeks and the breakage arrives all at once at the cutover, un-bisected.

This is not hypothetical. It is exactly what happened to all nine Android M12 phase PRs — Android-app's pr-checks.yml carries the same trigger, and every one of them landed with zero CI.

It bites harder for the module system, because Phase 2's exit criterion is a CI result: a zero-line routes.manifest.json diff and a passing suite. That manifest is the frozen URL surface protecting three shipped clients (SPA, Android app, Discord bot), and a regression in it is precisely the thing that must not be discovered at cutover.

A branch that accumulates work for weeks needs the gate more than main does, not less.

Scope

  • .gitea/workflows/pr-checks.yml — trigger, and comments recording the reasoning
  • build-images.yml is deliberately untouched. It triggers on push to main, so images publish and production rolls at the cutover and at no point before it. That is the correct behaviour and this PR does not disturb it.

One caveat, noted in the file

Running is not enforcing. The checks will now report on PRs into edge, but blocking a red phase PR needs its own branch-protection rule for edge in the Gitea UI, using the same PR Checks / * pattern as the main rule. Without one, a failing check is visible but not blocking.

Landing this before the module-system edge branch is cut, so the first phase PR is checked.


  • AI-assisted: written with Claude Code (Claude Opus 5)

🤖 Generated with Claude Code

https://claude.ai/code/session_018ocYxQWk3EhZe5gWRJXFU8

One line, `branches: [main]` → `branches: [main, edge]`, plus the comment explaining why. ## The problem Long workstreams land phase by phase on `edge` and reach `main` as a single cutover — protocol v3 did it, and the module system ([docs#122](https://gitea.whitlocktech.com/RunicGateway/docs/pulls/122)) is about to. But `pr-checks.yml` triggers only on PRs into `main`, so **every one of those phase PRs merges with no checks at all**: no server tests, no client build, no bot install. The workstream runs blind for weeks and the breakage arrives all at once at the cutover, un-bisected. This is not hypothetical. It is exactly what happened to all nine Android M12 phase PRs — `Android-app`'s `pr-checks.yml` carries the same trigger, and every one of them landed with zero CI. It bites harder for the module system, because Phase 2's exit criterion *is* a CI result: a zero-line `routes.manifest.json` diff and a passing suite. That manifest is the frozen URL surface protecting three shipped clients (SPA, Android app, Discord bot), and a regression in it is precisely the thing that must not be discovered at cutover. A branch that accumulates work for weeks needs the gate more than `main` does, not less. ## Scope - `.gitea/workflows/pr-checks.yml` — trigger, and comments recording the reasoning - **`build-images.yml` is deliberately untouched.** It triggers on push to `main`, so images publish and production rolls at the cutover and at no point before it. That is the correct behaviour and this PR does not disturb it. ## One caveat, noted in the file Running is not enforcing. The checks will now *report* on PRs into `edge`, but blocking a red phase PR needs its own branch-protection rule for `edge` in the Gitea UI, using the same `PR Checks / *` pattern as the `main` rule. Without one, a failing check is visible but not blocking. Landing this before the module-system `edge` branch is cut, so the first phase PR is checked. --- - [x] AI-assisted: written with Claude Code (Claude Opus 5) 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_018ocYxQWk3EhZe5gWRJXFU8
wtclaude added 1 commit 2026-08-10 07:32:05 +00:00
ci: run PR checks on pull requests into edge as well as main
All checks were successful
PR Checks / bot-install (pull_request) Successful in 20s
PR Checks / server-tests (pull_request) Successful in 1m37s
PR Checks / client-build (pull_request) Successful in 9m13s
4691fd6633
Long workstreams land phase by phase on `edge` and reach `main` as a single
cutover. With `branches: [main]` alone, every one of those phase PRs merges
with no checks at all -- no server tests, no client build, no bot install --
and the whole workstream runs blind until the cutover, where the breakage
arrives all at once and un-bisected.

This is not hypothetical: it is what happened to all nine Android M12 phase
PRs in the Android-app repo, whose pr-checks.yml carries the same trigger.

It matters for the module system specifically because Phase 2's exit
criterion IS a CI result -- a zero-line routes.manifest.json diff and a
passing suite -- and that manifest is the frozen URL surface protecting
three shipped clients. A branch accumulating work for weeks needs the gate
more than main does, not less.

Landing before the module-system edge branch is cut, so the first phase PR
is checked. build-images.yml is deliberately untouched: it triggers on push
to main, so images publish and production rolls at the cutover and never
before.

Co-Authored-By: Claude <noreply@anthropic.com>
whitlocktech approved these changes 2026-08-10 07:32:31 +00:00
whitlocktech scheduled this pull request to auto merge when all checks succeed 2026-08-10 07:32:37 +00:00
whitlocktech merged commit f1dda8fe66 into main 2026-08-10 07:42:16 +00:00
whitlocktech deleted branch ci/pr-checks-on-edge 2026-08-10 07:42:17 +00:00
Sign in to join this conversation.
No description provided.