Skip to content

packaging.yml: ship aMuleGUI.app in macOS Universal2 .dmg - #529

Merged
mrjimenez merged 1 commit into
amule-project:masterfrom
got3nks:pr-macos-ship-amulegui
May 6, 2026
Merged

packaging.yml: ship aMuleGUI.app in macOS Universal2 .dmg#529
mrjimenez merged 1 commit into
amule-project:masterfrom
got3nks:pr-macos-ship-amulegui

Conversation

@got3nks

@got3nks got3nks commented May 6, 2026

Copy link
Copy Markdown
Contributor

Summary

The macOS pipeline builds aMuleGUI.app correctly per arch — packaging/macos/build.sh sets -DBUILD_REMOTEGUI=YES, src/CMakeLists.txt:389-397 sets MACOSX_BUNDLE TRUE on the amulegui target, and make_dmg() stages it at the per-arch dmg root next to aMule.app.

The two-job CI pipeline then dropped it on the floor:

Job What it did What it should have done
macos-build (per arch) Uploaded build-macos/src/aMule.app only Upload aMuleGUI.app too
macos-universal2 Downloaded aMule.app, lipo-merged, wrapped in dmg Same plus aMuleGUI.app

aMuleGUI.app never crossed the artifact boundary, so the released Universal2 dmg shipped only aMule.app. Verified empirically by mounting the macos-universal2 artifact from packaging-CI run 25374200598 (master tip b71935541) — dmg root contained only aMule.app and the /Applications symlink.

Other platforms — not affected

  • Linux AppImagepackaging/linux/appimage/build.sh:56 lists amulegui in EXTRA_BINS, linuxdeploy is invoked with --executable …/amulegui so its .so deps are bundled, and AppRun:45 dispatches amulegui via argv[0]. The AppImage is a single self-contained bundle so there's no per-arch handoff to drop binaries at.
  • Linux Flatpakpackaging/linux/flatpak/org.amule.aMule.yaml.in:318 sets BUILD_REMOTEGUI=YES; make install PREFIX=/app puts amulegui at /app/bin/amulegui inside the sandbox, reachable via flatpak run --command=amulegui org.amule.aMule.
  • Windows portable .zip — every .exe is already in the zip; no merge step in the pipeline.

Changes

  • macos-build (per arch) — upload aMuleGUI.app as a second artifact (macos-gui-${arch}). Added a per-arch dmg sanity check that aMuleGUI.app is present at the dmg root before upload, so a silent BUILD_REMOTEGUI regression would fail the job loudly rather than silently propagating to the merge step.
  • macos-universal2 — download both arches' aMuleGUI.app, lipo-merge + ad-hoc-codesign the same way as aMule.app. The existing inline lipo loop is refactored into a merge_app shell function called twice (once per bundle); the umask/chmod and codesign comments are preserved verbatim. Both bundles are then staged into the Universal2 .dmg.

Test plan

  • Triggered packaging.yml against this change on the fork (run 25424603605, scope only=macos):
    • macOS .app (arm64) and macOS .app (x86_64) both succeeded — including the new sanity check that aMuleGUI.app is present at the per-arch dmg root.
    • Both macos-gui-arm64 and macos-gui-x86_64 artifacts uploaded.
    • macOS Universal2 .dmg job succeeded — merge_app ran on both bundles, codesign succeeded on both, dmg built.
  • Downloaded the resulting macos-universal2 artifact (aMule-4161bc5-macOS-universal2.dmg), mounted it, confirmed root contains both aMule.app and aMuleGUI.app. lipo -info on aMule.app/Contents/MacOS/aMule and aMuleGUI.app/Contents/MacOS/aMuleGUI reports x86_64 arm64 for both.
  • Pairs with README: add binary-install path + bandwidth-limit setup note #527 — that PR's INSTALL_BINARIES.md claim that aMuleGUI.app ships in the .dmg becomes accurate once this lands.

Why this only matters now

Before 3.0.0 the macOS pipeline produced just one .app (the autotools build path didn't bundle remote-GUI as a separate .app). The Universal2 split-build / merge handoff is new in this release cycle, and the artifact list was written for the single-bundle case.

The macOS pipeline builds aMuleGUI.app correctly per arch
(packaging/macos/build.sh sets BUILD_REMOTEGUI=YES; CMake produces
aMuleGUI.app via MACOSX_BUNDLE TRUE on the amulegui target), and
the per-arch .dmg that build.sh emits does contain it (make_dmg
stages it next to aMule.app at the dmg root).

The two-job CI pipeline then dropped aMuleGUI.app on the floor:

  macos-build (per arch)  -> uploaded aMule.app only.
  macos-universal2        -> downloaded aMule.app, lipo-merged, dmg.

aMuleGUI.app never crossed the artifact boundary, so the released
Universal2 .dmg shipped only aMule.app. Verified by mounting the
b719355 macos-universal2 artifact: dmg root contained aMule.app
plus the /Applications symlink, no aMuleGUI.app.

Linux is unaffected:
  - AppImage: build.sh:56 lists amulegui in EXTRA_BINS, linuxdeploy
              is invoked with --executable .../amulegui so its .so
              deps are bundled, AppRun:45 dispatches via argv[0].
  - Flatpak:  org.amule.aMule.yaml.in:318 sets BUILD_REMOTEGUI=YES;
              cmake install puts amulegui at /app/bin/amulegui,
              reachable via `flatpak run --command=amulegui`.
Windows is unaffected (.zip already contains every .exe.)

Changes:

- macos-build (per arch): upload aMuleGUI.app as a second artifact
  (macos-gui-${arch}). Add a per-arch dmg sanity check that
  aMuleGUI.app is present at the dmg root before upload, so a
  silent BUILD_REMOTEGUI regression would fail the job loudly.

- macos-universal2: download both arches' aMuleGUI.app, lipo-merge
  + ad-hoc-codesign the same way as aMule.app (existing inline lipo
  loop refactored into a merge_app shell function called twice),
  and stage both bundles in the Universal2 .dmg.
@mrjimenez
mrjimenez merged commit 357a298 into amule-project:master May 6, 2026
12 checks passed
@got3nks
got3nks deleted the pr-macos-ship-amulegui branch May 6, 2026 15:50
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