Skip to content

app-build: drop the push:main leg, keep the PR gate - #1028

Merged
ryanbr merged 1 commit into
mainfrom
ci/app-build-trim-triggers
Aug 2, 2026
Merged

app-build: drop the push:main leg, keep the PR gate#1028
ryanbr merged 1 commit into
mainfrom
ci/app-build-trim-triggers

Conversation

@ryanbr

@ryanbr ryanbr commented Aug 2, 2026

Copy link
Copy Markdown
Owner

Re-enables the app-target compile gate at a cost that should be sustainable.

Where this stood

app-build.yml has been disabled_manually since 21 July — the YAML was always fine, the workflow was just switched off in the Actions UI. In the eleven days since, 49 commits touched app-target Swift with no compile verification of any kind.

That is not theoretical. It cost three near-misses in a single session:

swiftc -parse is the strongest local check available, and it is syntax only — no type-checking, no linking.

The workflow also runs StrandTests, which executes in no other workflow. Those tests had not run since 21 July either, including the Swift twins added in #1019.

The probe

Dispatched from a disposable ci/ branch at 8560f9a1 (main's head), so main could not go red:

build (NOOPiOS, generic/platform=iOS Simulator, macos-26):        success
build (Strand, generic/platform=macOS, ARCHS="x86_64 arm64"):     success
cleanup:                                                          success

Both legs green in about five minutes, StrandTests included. Eleven days and 49 commits of drift broke nothing — it can come back on as it stands.

What changes

Only the push: main leg goes. Every change reaches main through a PR, which the pull_request trigger already gates, so the push run was rebuilding content that had just been built — on a two-runner macOS matrix (macos-15 for the universal macOS leg, macos-26 for the iOS 26 SDK) that GitHub bills at 10× Linux. That roughly halves the cost of keeping the gate.

Releases keep their gate. A release pushes straight to main with no PR, but fork-release.yml builds both Strand and NOOPiOS itself, so that path is still compile-verified. The gap this leaves is a direct, non-release push to main; workflow_dispatch covers checking one on demand, and the existing ci/-branch convention plus its cleanup job make that a one-liner.

Note

The workflow is enabled as of now — that was a prerequisite for dispatching the probe, since a manually-disabled workflow cannot be dispatched at all. If you would rather it stayed off, disabling it again is one API call and this PR can be closed; nothing here depends on it.

The workflow was disabled manually on 21 July. In the eleven days since, 49
commits touched app-target Swift with no compile check at all - swiftc -parse is
syntax only, so an orphaned doc comment, a strict-concurrency question and 190
lines of new SwiftUI all reached main unverified. It also runs StrandTests,
which executes in no other workflow.

A dispatch probe from a ci/ branch at 8560f9a passed both legs in ~5 minutes,
so nothing had actually broken in the meantime - it can come back on as-is.

Dropping the push:main leg roughly halves what it costs to keep on. Every change
reaches main through a PR, which the pull_request trigger already gates, so the
push run rebuilt content that had just been built - on a two-runner macOS matrix
that GitHub bills at 10x Linux. A release pushes straight to main with no PR,
but fork-release.yml builds both Strand and NOOPiOS itself, so that path keeps
its own gate. The gap left is a direct non-release push to main, which
workflow_dispatch covers on demand.
@ryanbr
ryanbr merged commit a279c5f into main Aug 2, 2026
5 checks passed
@ryanbr
ryanbr deleted the ci/app-build-trim-triggers branch August 2, 2026 01:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant