hotfix(ci): unblock macOS DMG build broken by missing background image#3349
Conversation
v26.6.1's macOS DMG builds (both apple-silicon and intel matrix
entries) fail in the Sign DMG step with:
AetherSDR-v26.6.1-macOS-apple-silicon.dmg: No such file or directory
##[error]Process completed with exit code 1.
Real cause is one step earlier, hidden by `|| true`. In Create DMG:
Copying background file 'docs/assets/logo-invert.png'...
cp: docs/assets/logo-invert.png: No such file or directory
`docs/assets/logo-invert.png` was deleted in commit 4670d1d ("docs(assets):
remove unused logo-invert.png") on the rationale that it was superseded by
the new AetherSDR-light.jpg / AetherSDR-dark.png theme screenshots. That
audit missed this workflow reference. The Create DMG step's trailing
`|| true` masked the cp failure, then Sign DMG attempted to sign the
non-existent DMG.
Two fixes in one PR:
1. Drop `--background "docs/assets/logo-invert.png"`. create-dmg falls back
to a plain white window background, which is functional. The remaining
docs/assets/ images (AetherSDR-light.jpg 152 KB, AetherSDR-dark.png 1.8
MB, etc.) are 16:9 screenshots, not suitable as 600x400 DMG window
backdrops. A follow-up PR can add a properly-sized DMG-specific
background image when someone has time to design one. Tracked separately.
2. Drop the trailing `|| true` and add an explicit `test -f` check after
create-dmg. Any future create-dmg failure surfaces in the Create DMG
step instead of being masked into a confusing Sign DMG error.
After this lands, re-run macOS DMG on tag v26.6.1 (Actions -> macOS DMG
-> Run workflow -> ref: v26.6.1). softprops/action-gh-release upserts on
the existing release page, so the DMG assets attach to the v26.6.1
release automatically.
https://claude.ai/code/session_01PSLHgUjYZsq67v3Fz4peAE
… check Per review feedback on PR #3349. The earlier commit (1968f4b) dropped the trailing `|| true` from the create-dmg invocation on the rationale that any non-zero exit should surface — but create-dmg has a long- documented cosmetic non-zero exit from its AppleScript window- arrangement step on macOS runners, where the DMG IS produced successfully but the script exits non-zero. With `set -e` (GitHub Actions' default `shell: /bin/bash -e {0}`), removing `|| true` would have made the workflow fail in that cosmetic-exit case even when a usable DMG was on disk. Restore `|| true` to absorb the cosmetic exit. Keep the explicit `test -f` check that this PR introduced — it's the authoritative signal for whether create-dmg actually produced the DMG. Net effect: - create-dmg succeeds + DMG exists -> step passes (unchanged) - create-dmg cosmetic-fail + DMG exists -> step passes (preserved) - create-dmg real-fail + no DMG -> test -f exits 1 (the v26.6.1 fix) - create-dmg returns 0 but no DMG -> impossible, but test -f catches Comment expanded to explain the design choice (`|| true` for cosmetic exits, `test -f` as the real check) so future maintainers don't get confused by what looks like an inconsistency. https://claude.ai/code/session_01PSLHgUjYZsq67v3Fz4peAE
|
Pushed Net behavior now:
CI should re-run on the second commit. Will report when it lands. Generated by Claude Code |
There was a problem hiding this comment.
Diagnosis verified against the repo:
- Commit
4670d1d6("docs(assets): remove unused logo-invert.png") removed the file on 2026-05-25 with the rationale you cite — workflow reference was indeed missed in that cleanup. docs/assets/no longer containslogo-invert.png; the remaining images (AetherSDR-light.jpg,AetherSDR-dark.png,wallpaper.png) are 16:9 screenshots, not 600×400 DMG backdrops — agree with deferring a replacement to a follow-up.- The new
test -fguard'sDMG=filename matches the existing pattern used in the Sign/Notarize/Staple steps (AetherSDR-${{ github.ref_name }}-macOS-${{ matrix.label }}.dmg), so a realcreate-dmgfailure now surfaces cleanly in the Create DMG step instead of confusingly in Sign DMG.
One small note — the PR body says "Drop the trailing || true", but the diff actually keeps || true (with an added explanatory comment) and adds the test -f check after it. That's the right call (create-dmg's AppleScript window-arrangement step really does cosmetically exit non-zero on CI runners even on success), but the body description doesn't quite match what shipped. No code change needed — just worth flagging for accuracy if you update the description before merge.
The adjacent deps-qt-6.8.3-macos-intel finding is a good catch and correctly scoped out — Intel from-source fallback will fire on the next run, slow but functional.
CODEOWNERS tier-1 / maintainer-only; deferring approval to @ten9876. Thanks for the thorough diagnosis with the actual failed-run link and the FlexLib-style rigor on the || true semantics.
🤖 aethersdr-agent · cost: $11.8379 · model: claude-opus-4-7
Hotfix release on top of v26.6.1, bundling three already-merged fixes and nothing else: - fix(ci): unblock macOS DMG build broken by missing background image (aethersdr#3349) - fix(gui): only toast "Step: …" on deliberate step changes (aethersdr#3337) - fix(radio-setup): wrap tab pages in QScrollArea so tall tabs stay reachable (aethersdr#3347) Bumps project version 26.6.1 -> 26.6.1.1 (CalVer hotfix sub-patch). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Summary
Hotfix for v26.6.1's broken macOS DMG builds (both
apple-siliconandintelmatrix entries).Diagnosis (from the actual failed workflow log)
Run: #172 attempt 2,
build-dmg (macos-15, apple-silicon). Fails in the Sign DMG step:Real cause is one step earlier and hidden by
|| true. The Create DMG step'screate-dmginvocation produces:docs/assets/logo-invert.pngwas deleted in commit4670d1d6("docs(assets): remove unused logo-invert.png") with the rationale "Superseded by the new AetherSDR-light.jpg / AetherSDR-dark.png theme screenshots". That audit missed this workflow reference. The Create DMG step's trailing|| truemasked thecpfailure, then Sign DMG attempted to sign a DMG that was never produced.The Intel matrix entry would have hit the identical bug but was cancelled by
fail-fast: truewhen apple-silicon failed.Changes (one file)
Drop
--background "docs/assets/logo-invert.png"from thecreate-dmginvocation.create-dmgfalls back to a plain white window background — functional, just visually plain. The other images currently indocs/assets/(AetherSDR-light.jpg,AetherSDR-dark.png,wallpaper.png, etc.) are 16:9 screenshots, not suitable as 600×400 DMG window backdrops. A follow-up PR can land a properly-sized DMG-specific background.Drop the trailing
|| trueand add an explicittest -f "$DMG"check aftercreate-dmg. Any futurecreate-dmgfailure now surfaces in the Create DMG step rather than producing a confusing missing-file error one step later.Both changes are explained inline with comments pointing at the v26.6.1 release-build chain so a future maintainer hitting either spot knows the history.
Post-merge plan
main, re-run macOS DMG on tagv26.6.1:v26.6.1softprops/action-gh-releaseupserts on the existing release page (matches by tag), so the two DMG assets —AetherSDR-v26.6.1-macOS-apple-silicon.dmgandAetherSDR-v26.6.1-macOS-intel.dmg— attach to the existing v26.6.1 release automatically. No edit to the release notes needed.Adjacent finding (not in this PR)
The Intel matrix entry depends on a pre-built Qt tarball at release tag
deps-qt-6.8.3-macos-intel, which does not currently exist on the repo (GET /releases/tags/deps-qt-6.8.3-macos-intel → 404). The Intel build's documented fallback path is a from-source Qt build (~27 min). Once this hotfix lands and Intel actually runs, that fallback will fire — which is fine, but slow and brittle. Worth runningBuild macOS Qt (Intel deps)workflow manually after this merges to populate the artifact and speed up future releases. Tracked separately.Risk
CODEOWNERS:
.github/workflows/is tier 1 — maintainer-only approval (@ten9876). Change is one workflow file, additive comments + two functional edits. No effect on Linux AppImage / Windows installer / sign-release workflows.Test plan
workflow_dispatchof macOS DMG onv26.6.1produces bothapple-siliconandintelDMG artifacts and attaches them to the v26.6.1 release page.https://claude.ai/code/session_01PSLHgUjYZsq67v3Fz4peAE
Generated by Claude Code