24 workflows across 17 repos are bare on: [push, pull_request], so every PR commit runs its full CI twice (push event + PR event — 8–10 duplicate check rows on every PR today). Change each to push: branches: [main] + pull_request, plus a concurrency group that cancels superseded runs on PR refs only — never on main, since cancelled is in Heart's FAILURE_CONCLUSIONS (ci_status.py:60) and a cancelled main run would read as red CI. Post-merge main runs (Heart's ws_ci gate input) are preserved. Trade-off: a branch pushed with no open PR gets no CI until the PR opens.
Repos: HowTo×3 (navigator/smoke/tutorials), workspace×3 (navigator/smoke), workspace_test×4 (smoke), libraries Nerves/Fit/Array/Galaxy/Lens/CTI (main.yml), Heart (heart-tests.yml). One mechanical commit per repo, Phase-5B style.
Branch: feature/ci-dedupe · Worktree: ~/Code/PyAutoLabs-wt/ci-dedupe/
24 workflows across 17 repos are bare
on: [push, pull_request], so every PR commit runs its full CI twice (push event + PR event — 8–10 duplicate check rows on every PR today). Change each topush: branches: [main]+pull_request, plus aconcurrencygroup that cancels superseded runs on PR refs only — never on main, sincecancelledis in Heart'sFAILURE_CONCLUSIONS(ci_status.py:60) and a cancelled main run would read as red CI. Post-merge main runs (Heart'sws_cigate input) are preserved. Trade-off: a branch pushed with no open PR gets no CI until the PR opens.Repos: HowTo×3 (navigator/smoke/tutorials), workspace×3 (navigator/smoke), workspace_test×4 (smoke), libraries Nerves/Fit/Array/Galaxy/Lens/CTI (main.yml), Heart (heart-tests.yml). One mechanical commit per repo, Phase-5B style.
Branch:
feature/ci-dedupe· Worktree:~/Code/PyAutoLabs-wt/ci-dedupe/