Skip to content

ci(release): wait for the tagged commit's CI instead of reading it as failed - #120

Merged
kingchenc merged 2 commits into
mainfrom
fix/gate-waits-for-ci
Aug 31, 2026
Merged

kingchenc merged 2 commits into
mainfrom
fix/gate-waits-for-ci

Conversation

@kingchenc

Copy link
Copy Markdown
Contributor

The publish gate required a ci.yml run on the tagged commit with conclusion
success. A run that is still going reports pending, and the check treated
that exactly like a failure -- so a tag pushed shortly after its merge, with CI
still queued behind this run's own build jobs, was rejected for having "no
successful ci.yml run". v0.1.2 hit this on its first attempt, on a commit that
was green half an hour later and published unchanged on a rerun.

Nothing was published in the meantime, so the gate did its job. Its verdict was
still wrong, and the distinction it missed is the one that matters: not decided
yet is not decided against. The step now polls until the run settles, bounded to
45 minutes, and says what it is waiting on. The red check runs on every
iteration, so a run that turns red while we wait is caught too. Anything
genuinely failing still exits on the spot -- only the undecided case waits.
timeout-minutes on the job moves from 10 to 60 so it outlives that wait.

Written and linted, not run: release.yml executes only on a pushed v* tag,
so the next release is the first time this path is exercised.

… failed

The publish gate required a `ci.yml` run on the tagged commit with conclusion
`success`. A run that is still going reports `pending`, and the check treated
that exactly like a failure -- so a tag pushed shortly after its merge, with CI
still queued behind this run's own build jobs, was rejected for having "no
successful ci.yml run". v0.1.2 hit this on its first attempt, on a commit that
was green half an hour later and published unchanged on a rerun.

Nothing was published in the meantime, so the gate did its job. Its verdict was
still wrong, and the distinction it missed is the one that matters: not decided
yet is not decided against. The step now polls until the run settles, bounded to
45 minutes, and says what it is waiting on. The red check runs on every
iteration, so a run that turns red while we wait is caught too. Anything
genuinely failing still exits on the spot -- only the undecided case waits.
`timeout-minutes` on the job moves from 10 to 60 so it outlives that wait.

Written and linted, not run: `release.yml` executes only on a pushed `v*` tag,
so the next release is the first time this path is exercised.
The rewritten gate step lost its literal escapes: `printf '%s\n'` became a
printf with a real newline inside the single quotes, and `awk -F'\t'` a real
tab. That ends the YAML scalar mid-string, so actionlint refused the file
outright -- `could not parse as YAML: could not find expected ':'` -- before it
ever got to the shell.

Caught by actionlint on the pull request, which is where a workflow edit is
supposed to be caught: `bash -n` reads the extracted step and is happy with a
literal newline, and shellcheck is not installed here, so nothing local would
have seen it either.
@kingchenc
kingchenc merged commit 29a5e6b into main Aug 31, 2026
59 checks passed
@kingchenc
kingchenc deleted the fix/gate-waits-for-ci branch August 31, 2026 23:39
@codecov

codecov Bot commented Aug 31, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

kingchenc added a commit that referenced this pull request Sep 2, 2026
Cuts 0.1.3 across the twenty version-bearing files this repository writes itself, and closes the changelog gap the previous release left open.

## Changelog

`[Unreleased]` became `[0.1.3]`. One entry was missing from it and is added here: the `wickra-core` lockfile refresh from #122. The two entries already there -- the benchmarks pom that tracked a version deleted two releases ago (#121) and the publish gate that read a pending CI run as a failed one (#120) -- carry over unchanged.

Everything merged since v0.1.2 is now described. `git log v0.1.2..main` lists exactly those three commits.

## Bump

Run through `bump_version.py`, which reports 21 declarations rewritten: the workspace `Cargo.toml`, `Cargo.lock` via a real `cargo build`, the Python, Node (package, six platform stubs, lockfile, and the napi loader's version literal), Java, C# and R manifests, both poms that resolve the binding, `CITATION.cff` including its release date, and `SECURITY.md`'s supported-version table.

`scripts/check_version_sync.py` agrees on all 21. The benchmarks pom is among them for the first time -- it was added to that check in #121, which is why this bump moves it rather than leaving it behind as 0.1.1 and 0.1.2 did.

A grep for `0.1.2` outside the changelog returns one hit, `iana-time-zone-haiku`, whose own version happens to be the same string.

## Verification

- `cargo fmt --all` -- no changes
- `cargo test --workspace --all-features` -- all suites pass
- `cargo clippy --workspace --all-targets --all-features -- -D warnings` -- clean
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant