Skip to content

ci: consolidate trivial gates into hygiene.yml, add concurrency - #169

Merged
acamarata merged 1 commit into
mainfrom
ci/consolidate-hygiene-p1
Sep 1, 2026
Merged

acamarata merged 1 commit into
mainfrom
ci/consolidate-hygiene-p1

Conversation

@acamarata

Copy link
Copy Markdown
Collaborator

Summary

  • Consolidates generated-file-gate.yml, multi-arch-check.yml, doc-sync.yml (each a few seconds, no toolchain) into one hygiene.yml job with a single checkout — 1 runner claim per push instead of 3.
  • Trigger scope is the union of the three originals — nothing that used to run stops running. doc-sync's steps are guarded to pull_request events only (needs github.base_ref, unset on push).
  • clean-root.yml and gitleaks.yml are deliberately left alone, even though clean-root is exactly the class of job this consolidation targets. Both back required branch-protection checks (clean-root, gitleaks) and already carry their own concurrency groups. Per the hard safety constraint on this repo, the safer option is to leave the two checks branch protection depends on for every PR as untouched, standalone files rather than risk a check-name change from folding them into a shared workflow. Verified byte-identical to origin/main.
  • nself-first-check.yml, security.yml, desktop-{linux,macos,windows}.yml, mobile-ci.yml, tvos-ci.yml, e2e.yml — untouched, already carry concurrency + tight paths: filters. Nothing to add.
  • ci.yml — untouched, already has concurrency. No paths: filter added: 4 of its jobs back required checks (nself CLI Check, Version Lockstep, Mobile Tests (coverage gate ≥60%), I18n Completeness Gate (N-S3-T3)), and GitHub blocks a merge waiting on a required check that paths-ignore prevented from running — path-filtering a workflow carrying any required check is unsafe.
  • Adds concurrency to wiki-sync.yml and dependabot-review.yml (both plain push/pull_request, not pull_request_target, so ref-keyed grouping is safe).
  • Left alone by design (release/publish/schedule triggers): android-release.yml, ios-release.yml, publish-updater.yml, quarterly-doc-audit.yml, desktop-release.yml (already cancel-in-progress: false, correctly). dependabot-auto-merge.yml untouched (pull_request_target trap).

Safety — required check names verified byte-identical

  • clean-root (job id + name: in clean-root.yml) — file diff vs origin/main is empty.
  • gitleaks (job id in gitleaks.yml) — file diff vs origin/main is empty.
  • nself CLI Check, Version Lockstep, Mobile Tests (coverage gate ≥60%), I18n Completeness Gate (N-S3-T3) (all in ci.yml) — file diff vs origin/main is empty.
  • No checks removed, no continue-on-error, no loosened assertions.

Test plan

  • actionlint on all 20 workflow files post-change: exit 1, 5 findings — all 5 are pre-existing SC2086/SC2046/SC2012/SC2129/SC2010 style/info notices, one-to-one matched against the origin/main baseline (including the one now in hygiene.yml, copied verbatim from doc-sync.yml)
  • actionlint on the origin/main baseline (all 22 original files): exit 1, same 5 findings — zero new findings
  • git diff origin/main on clean-root.yml, gitleaks.yml, ci.yml: empty for all three

Consolidation: generated-file-gate, multi-arch-check, and doc-sync (each a
few seconds, no toolchain) were three separate near-instant workflows each
claiming their own runner on every push/PR. Merged into one hygiene.yml
job with a single checkout — 1 runner claim instead of 3. Trigger scope is
the union of the three originals, so nothing that used to run stops
running. The doc-sync steps are guarded to pull_request events only (the
script reads github.base_ref, unset on push).

clean-root.yml and gitleaks.yml are DELIBERATELY LEFT ALONE, even though
clean-root is exactly the class of job this consolidation targets. Both
back required branch-protection checks ('clean-root' and 'gitleaks') and
already carry their own concurrency groups — the safest option per the
task brief is to leave two checks branch protection depends on for every
PR as untouched, standalone workflow files rather than risk a check-name
change from folding them into a shared file. Verified byte-identical to
origin/main.

nself-first-check.yml, security.yml, desktop-{linux,macos,windows}.yml,
mobile-ci.yml, tvos-ci.yml, and e2e.yml are untouched — all already carry
concurrency and tight paths: filters (docker-compose paths, mobile/**,
tv/**, tests/**, etc.); nothing to add.

ci.yml is untouched — already has concurrency, and 4 of its jobs back
required checks ('nself CLI Check', 'Version Lockstep',
'Mobile Tests (coverage gate >=60%)', 'I18n Completeness Gate (N-S3-T3)').
No paths filter was added: GitHub does not skip a required check just
because paths-ignore excluded a push, it blocks merge waiting on a check
that never runs, so path-filtering a workflow that carries ANY required
check is unsafe.

Concurrency added to wiki-sync.yml and dependabot-review.yml (both plain
push/pull_request, not pull_request_target, so ref-keyed grouping is
safe and a stale rerun losing to a fresher one is the correct behavior).

Left alone, all release/publish/schedule-triggered by design:
android-release.yml, ios-release.yml, publish-updater.yml,
quarterly-doc-audit.yml (per the deploy-workflow exception), and
desktop-release.yml (already cancel-in-progress: false, correctly, and
untouched). dependabot-auto-merge.yml untouched (pull_request_target trap).

Required check names 'clean-root' (job id + name in clean-root.yml) and
'gitleaks' (job id in gitleaks.yml) are unchanged — files are
byte-identical to origin/main. ci.yml is also byte-identical to
origin/main, preserving 'nself CLI Check', 'Version Lockstep',
'Mobile Tests (coverage gate >=60%)', and
'I18n Completeness Gate (N-S3-T3)'.
@vercel

vercel Bot commented Sep 1, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
ntask-web Ignored Ignored Sep 1, 2026 8:44pm UTC

Request Review

@acamarata
acamarata merged commit 78cb25c into main Sep 1, 2026
15 checks passed
@acamarata
acamarata deleted the ci/consolidate-hygiene-p1 branch September 1, 2026 20:47
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