Skip to content

fix: close the quote that broke every native release build - #45

Merged
smb merged 2 commits into
mainfrom
fix/release-cache-stats-quoting
Sep 4, 2026
Merged

smb merged 2 commits into
mainfrom
fix/release-cache-stats-quoting

Conversation

@smb

@smb smb commented Sep 4, 2026

Copy link
Copy Markdown
Collaborator

Summary

The compile-cache report added in #21 opened a string for a command substitution and never closed it:

ccache_bin="$(find "$nuitka_cache" -type f -iname 'ccache.exe' -print -quit 2>/dev/null || true)

Bash reads a whole script before it runs a line, so the unterminated quote is a parse error on every platform, not only on the Windows branch it sits in:

bash: line 21: unexpected EOF while looking for matching `"'
bash: line 24: syntax error: unexpected end of file

The consequence was worse than a noisy log. The step runs with if: always(), so its failure failed the job after the bundle had been built, and Upload unsigned bundle was skipped. The v0.2.0 build spent twenty minutes producing a macOS bundle that was then discarded, and publish had no artifacts to attach, so no draft release could exist.

One character. The rest of the change is the guard.

The guard

A test parses every run: block of every JSON-shaped workflow with bash -n. Checked rather than assumed: against the broken file it fails with exactly the message bash gave above, and passes against the fixed one.

ci.yml is real YAML and this project has no YAML parser, so it is skipped and the test asserts that at least one workflow was actually checked. release.yml, which holds the long scripts and where this class of bug lives, is covered.

Test plan

  • uv run ruff check . && uv run mypy src && QT_QPA_PLATFORM=offscreen uv run pytest -q: 1782 passed, 4 skipped.
  • The release workflow will be dispatched on main after this lands, to confirm both platforms produce and upload a bundle, before any tag is cut.

🤖 Generated with Claude Code

smb and others added 2 commits September 5, 2026 00:33
The compile-cache report I added in #21 opened a string for a command
substitution and never closed it. Bash reads a whole script before it
runs a line, so the unterminated quote was a parse error on every
platform, not only on the Windows branch it sat in. bash says it
plainly: unexpected EOF while looking for matching quote.

The consequence was worse than a noisy log. The step runs with
if: always(), so its failure failed the job after the bundle had been
built, and "Upload unsigned bundle" was skipped. The v0.2.0 build spent
twenty minutes producing a macOS bundle that was then thrown away, and
no draft release could be created because publish had no artifacts.

A test now parses every run: block of every JSON-shaped workflow with
bash -n. It fails against the broken file with the same message bash
gave, which was checked rather than assumed. ci.yml is real YAML and
this project has no YAML parser, so it is skipped; release.yml, which
holds the long scripts, is covered.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@smb
smb merged commit f761466 into main Sep 4, 2026
11 checks passed
@smb
smb deleted the fix/release-cache-stats-quoting branch September 4, 2026 22:38
@smb smb mentioned this pull request Sep 4, 2026
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