Skip to content

hotfix(ci): unblock macOS DMG build broken by missing background image#3349

Merged
ten9876 merged 2 commits into
mainfrom
hotfix/macos-dmg-background-missing
Jun 1, 2026
Merged

hotfix(ci): unblock macOS DMG build broken by missing background image#3349
ten9876 merged 2 commits into
mainfrom
hotfix/macos-dmg-background-missing

Conversation

@ten9876

@ten9876 ten9876 commented Jun 1, 2026

Copy link
Copy Markdown
Collaborator

Summary

Hotfix for v26.6.1's broken macOS DMG builds (both apple-silicon and intel matrix entries).

Diagnosis (from the actual failed workflow log)

Run: #172 attempt 2, build-dmg (macos-15, apple-silicon). Fails in the Sign DMG step:

codesign --force --timestamp --sign "Developer ID Application" \
  AetherSDR-v26.6.1-macOS-apple-silicon.dmg
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 and hidden by || true. The Create DMG step's create-dmg invocation produces:

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 4670d1d6 ("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 || true masked the cp failure, 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: true when apple-silicon failed.

Changes (one file)

  1. Drop --background "docs/assets/logo-invert.png" from the create-dmg invocation. create-dmg falls back to a plain white window background — functional, just visually plain. The other images currently in docs/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.

  2. Drop the trailing || true and add an explicit test -f "$DMG" check after create-dmg. Any future create-dmg failure 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

  1. After this lands on main, re-run macOS DMG on tag v26.6.1:
    • Actions → "macOS DMG" → Run workflow → ref: v26.6.1
  2. softprops/action-gh-release upserts on the existing release page (matches by tag), so the two DMG assets — AetherSDR-v26.6.1-macOS-apple-silicon.dmg and AetherSDR-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 running Build 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

  • CI green on this PR (it only touches a tag-triggered workflow, so PR CI won't exercise it directly).
  • After merge: manual workflow_dispatch of macOS DMG on v26.6.1 produces both apple-silicon and intel DMG artifacts and attaches them to the v26.6.1 release page.
  • Confirm Sign DMG, Notarize DMG, and Attach to release steps complete cleanly.

https://claude.ai/code/session_01PSLHgUjYZsq67v3Fz4peAE


Generated by Claude Code

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
@ten9876 ten9876 requested a review from a team as a code owner June 1, 2026 21:24
… 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

ten9876 commented Jun 1, 2026

Copy link
Copy Markdown
Collaborator Author

Pushed b69d4 addressing the review finding (commit message in the push covers the reasoning). One-line restore of || true on create-dmg, expanded inline comment.

Net behavior now:

Scenario Result
create-dmg succeeds, DMG exists ✅ step passes
create-dmg cosmetic non-zero exit, DMG exists ✅ step passes (preserved by || true)
create-dmg real failure, no DMG produced test -f exits 1 (the v26.6.1 fix)
create-dmg returns 0 but no DMG test -f exits 1 (defensive)

CI should re-run on the second commit. Will report when it lands.


Generated by Claude Code

@aethersdr-agent aethersdr-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 contains logo-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 -f guard's DMG= filename matches the existing pattern used in the Sign/Notarize/Staple steps (AetherSDR-${{ github.ref_name }}-macOS-${{ matrix.label }}.dmg), so a real create-dmg failure 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

@ten9876 ten9876 enabled auto-merge (squash) June 1, 2026 23:36
@ten9876 ten9876 merged commit 8397fff into main Jun 1, 2026
3 checks passed
@ten9876 ten9876 deleted the hotfix/macos-dmg-background-missing branch June 1, 2026 23:36
w5jwp pushed a commit to w5jwp/AetherSDR that referenced this pull request Jun 2, 2026
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>
G6PWY-Chris pushed a commit to G6PWY-Chris/AetherSDR that referenced this pull request Jun 22, 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.

2 participants