Repository navigation
Conversation
The v0.6.0 release run built every artifact, then its GitHub Release job
failed before creating the release: bash 5.2 read the apostrophe in
"${prev:-GitHub's default}" as an opening quote and the step did not
parse ("unexpected EOF while looking for matching `''"). The step only
runs on a tag, and actionlint runs with shellcheck off, so no PR run
parsed it. The message now reads "the GitHub default".
CI's Lint job gains scripts/ci/check-workflow-run-syntax.py, which runs
`bash -n` over every bash run block under .github/workflows (174 today),
with ${{ ... }} expressions replaced by a plain word. Without the fix it
fails on exactly this step; with it, all 174 parse.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…xpressions
Three gaps in check-workflow-run-syntax.py from review:
- A `shell: sh` step was parsed with `bash -n`, so a bashism there passed
the check and would fail under dash on the runner. Each block is now
parsed by its own shell.
- Only *.yml was globbed; GitHub also runs *.yaml.
- The ${{ ... }} substitution stopped at the first `}}`, even inside a
quoted literal: `echo ${{ format('{0}}}', github.ref) }}` left a stray
quote and failed. The pattern now skips single-quoted literals.
The script also takes workflow paths as arguments, which is how each case
was checked against a fixture: a bashism under `shell: sh` fails, a
.yaml-only workflows directory is found, the unquoted format() call
passes (the previous version failed it), and the v0.6.0 quoting bug still
fails. The repository's 174 run blocks all parse.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Run from the wrong directory, or after the workflows directory moved, the check printed "0 run blocks parsed, 0 failed" and passed. It now fails when no run block was found. From an empty directory the previous version exits 0 and this one exits 1; the repository's 174 run blocks still pass. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Contributor
Author
|
Closing: this goes to |
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.
The v0.6.0 release run built every artifact, but its GitHub Release job failed before creating the release:
#897 added
echo "PR list compares against: ${prev:-GitHub's default}"to the notes step. bash 5.2 reads the apostrophe inside${prev:-…}as an opening quote, so the step does not parse. The step only runs on a tag, and CI's actionlint runs with shellcheck off, so no PR run ever parsed it.Changes
release.yml: the message now readsthe GitHub default.scripts/ci/check-workflow-run-syntax.py, which runsbash -nover every bashrun:block under.github/workflows. It replaces${{ … }}expressions with a plain word first, because GitHub substitutes them before the shell runs. It installs a pinned PyYAML in a venv, so it doesn't depend on what the runner image ships.Verified
release.yml, jobrelease, step "Build release notes body", with the same error as the release run.echoprintsthe GitHub defaultwhenprevis empty andv0.5.2when it is set.Finishing v0.6.0's release is handled separately; this fix is for the next tag on this branch. The same commit goes onto #901 for
master.🤖 Generated with Claude Code