Skip to content

ci: keep the reusable test call out of CD's concurrency group - #101

Merged
ariostas merged 1 commit into
mainfrom
ci/fix-reusable-workflow-concurrency
Aug 26, 2026
Merged

ariostas merged 1 commit into
mainfrom
ci/fix-reusable-workflow-concurrency

Conversation

@ariostas

Copy link
Copy Markdown
Member

🤖 AI text below 🤖

The v1.1.0 CD run failed without publishing to PyPI, and the reason was invisible in the UI: Build dist and both smoke jobs passed, Deploy to PyPI showed as skipped, and the Tests gate job was simply absent — no job, no log, no annotation, no check run.

The cause is that ci.yml and the cd.yml job that calls it were computing the same concurrency group. In a called workflow github.workflow is the caller's workflow name, so

group: ${{ github.workflow }}-${{ github.ref }}

evaluated to CD-refs/tags/v1.1.0 for the gate — byte-identical to the group the CD run itself was already holding. GitHub treats a called workflow that shares its caller's group as a deadlock and cancels it before it starts, which is why it produced no output at all; deploy then skipped because it needs a job that never ran.

Adding a literal to the group keeps the two apart: standalone runs get unittests-unittests-<ref>, the CD gate gets CD-unittests-<ref>, and neither collides with CD's own CD-<ref>. Each still cancels its own superseded runs per ref, as before.

This was the first release since #90 added the gate and the concurrency blocks, so nothing had exercised the combination until now.

Note that v1.1.0 was never uploaded to PyPI, and re-running the failed run cannot fix it — it re-reads the workflows at the tag, which predates this change. Zenodo did archive it (10.5281/zenodo.22117449), since that fires on the release webhook rather than on the workflow. Moving the v1.1.0 tag would make Zenodo mint a second, permanent record labelled v1.1.0, so cutting v1.1.1 on top of this is the cleaner recovery.

In a called workflow `github.workflow` is the caller's name, so the group
this workflow computed when CD called it as its publish gate was identical
to CD's own. A called workflow that shares its caller's concurrency group
deadlocks against the run that started it: the gate job is cancelled before
it starts, leaving no job, no log and no annotation, and `deploy` is skipped
because it needs a job that never ran. That is what failed the v1.1.0
release.

Assisted-by: claude-code:claude-opus-5
@ariostas
ariostas enabled auto-merge (squash) August 26, 2026 20:25
@codecov

codecov Bot commented Aug 26, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (960ee72) to head (3218001).
⚠️ Report is 1 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files

@ariostas
ariostas merged commit 41b6da6 into main Aug 26, 2026
34 of 35 checks passed
@ariostas
ariostas deleted the ci/fix-reusable-workflow-concurrency branch August 26, 2026 20:25
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