Repository navigation
ci: relevance-gate workflows — skip deploys, release, and CI on non-relevant merges - #322
Merged
Merged
Conversation
…elevant merges CI's pull_request trigger now carries the same paths-ignore the push trigger already had — docs/changeset-only PRs skip the heavy lint/ typecheck job entirely. The docs link check that made that tradeoff lossy moved out of CI into its own zero-dependency workflow (no pnpm install): Docs Check runs on every PR — so it also catches links broken by renaming/deleting a file the markdown points at — and on docs-path pushes to main, which CI's path-ignore previously left completely unchecked. Deploy gains a relevance gate in the existing gate job: the merged diff (first-parent, exact for PR merges and single-commit pushes) must touch a runtime-affecting path — host/api/ui/plugins/packages/scripts, Dockerfile, railway.toml, authored config, root manifests, or the ci/deploy/release workflows themselves — or Deploy Production skips with a notice. Tests-only, .github-only, and markdown-only merges stop spending the full build/upload/publish/image/Railway train; version-PR merges still deploy (they bump packages/*). Uncertainty errs toward deploying, and workflow_dispatch bypasses the gate. Release paths-ignores markdown/docs merges (never .changeset — that is its input), the child-repo CI wrapper gains the same PR paths-ignore as the parent, and Check Skills gets a cancel-in-progress concurrency group so rapid pushes to one PR stop stacking intent validations. Gate regex was simulation-tested against real main history: version PRs, config-only bumps, and merge-tangle empty diffs deploy; the remaining skip surface is md/docs, tests/, and non-deploy .github paths.
bos.app.ts is the canonical authored config form — the scaffold generates it (convertChildConfigToAppForm runs in both init branches, and init.levels.test asserts no bos.config.json remains), so: - drop the dead ^bos\.config\.json$ term from the deploy relevance gate and all four ci.yml detect-changes buckets (bos.app.ts was already covered in each) - sweep the scaffolded README/AGENTS/skill templates that still told child users the config lives in bos.config.json Legacy JSON configs in existing child repos still load (sync handles both forms); test fixtures intentionally keep exercising that path.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes
ci.ymlpull_request:gains thepaths-ignorethe push trigger already had (**.md,docs/**,.changeset/**) — docs/changeset-only PRs skip the heavy lint/typecheck job entirely.docs:checkremoved fromlint-and-typecheck(moved).docs-check.ymlDocs Check— the docs link check as its own zero-dependency workflow (checkout + node, no pnpm install, ~20s). Runs on every PR (catches links broken by renaming/deleting a file the markdown points at, not just md edits) and on docs-path pushes to main, which CI's path-ignore previously left unchecked. Net coverage improves: today docs-only main pushes skip the check entirely.deploy.ymlgatejob: the merged diff (first-parent — exact for PR merges and single-commit pushes) must touch a runtime-affecting path orDeploy Productionskips with a::notice::listing the files. Allowlist:Dockerfile,railway.toml,scripts/,host/,api/,ui/,plugins/,packages/,bos.app.ts,bos.dev.ts,bos.config.json,biome.json,.env.test, root manifests/tsconfigs, and the ci/deploy/release workflow files. Version-PR merges still deploy (they bumppackages/*). Uncertainty errs toward deploying;workflow_dispatchbypasses.release.ymlpaths-ignorefor md/docs merges (deliberately not.changeset/**— that is its input)..github/templates/workflows/ci.ymlpaths-ignorefor child repos, which currently run the full ungated consumer CI on every PR.check-skills.ymlintent validateruns. Path triggers untouched (deliberate per its header).Gate simulation (against real main history)
git diff --name-only <sha>^ <sha>+ the gate regex over 7 representative commits — all verdicts correct after two simulation-caught fixes:bos.config.json-only bumps ("chore: update deployment URLs") must deploy — initially missing from the allowlistKnown red, pre-existing
Validate intent skillsfails on this PR — version PR #307 bumped the packages to2.0.0-rc.0but the skills'library_versionmarkers still say 1.10.2, sointent stalereports drift on every qualifying PR since (PR #320 failed identically). That reconciliation belongs to the skills review flow, not this change.Verification
actionlint(same v1.7.7 pin as the Workflow lint job) — clean on all repo + template workflowsnode scripts/docs-link-check.mjs— passes locally (49 files)No changeset: repo-level CI/workflow changes only (
.github/templatesships viabos syncfrom this repo's main, not npm).