@@ -9,14 +9,24 @@ permissions:
99
1010jobs :
1111 build_macos :
12- runs-on : macos-latest
12+ name : macOS bundles (${{ matrix.arch }})
13+ runs-on : ${{ matrix.runner }}
1314 environment : release
1415 env :
1516 CODESIGN_IDENTITY : ${{ vars.CODESIGN_IDENTITY }}
1617 NOTARY_PROFILE_NAME : ${{ vars.NOTARY_PROFILE_NAME }}
1718 APPLE_TEAM_ID : ${{ vars.APPLE_TEAM_ID }}
1819 TAURI_SIGNING_PRIVATE_KEY_PASSWORD : ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
1920 TAURI_SIGNING_PRIVATE_KEY_B64 : ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_B64 }}
21+ TARGET_ARCH : ${{ matrix.arch }}
22+ strategy :
23+ fail-fast : false
24+ matrix :
25+ include :
26+ - runner : macos-latest
27+ arch : aarch64
28+ - runner : macos-15-intel
29+ arch : x86_64
2030 steps :
2131 - name : Checkout
2232 uses : actions/checkout@v4
@@ -135,12 +145,12 @@ jobs:
135145
136146 ditto -c -k --keepParent \
137147 "src-tauri/target/release/bundle/macos/Codex Monitor.app" \
138- release-artifacts/CodexMonitor .zip
148+ release-artifacts/CodexMonitor_${TARGET_ARCH} .zip
139149
140150 hdiutil create -volname "Codex Monitor" \
141151 -srcfolder release-artifacts/dmg-root \
142152 -ov -format UDZO \
143- release-artifacts/CodexMonitor_${VERSION}_aarch64 .dmg
153+ release-artifacts/CodexMonitor_${VERSION}_${TARGET_ARCH} .dmg
144154
145155 COPYFILE_DISABLE=1 tar -czf \
146156 "src-tauri/target/release/bundle/macos/Codex Monitor.app.tar.gz" \
@@ -152,19 +162,19 @@ jobs:
152162 "src-tauri/target/release/bundle/macos/Codex Monitor.app.tar.gz"
153163
154164 cp "src-tauri/target/release/bundle/macos/Codex Monitor.app.tar.gz" \
155- release-artifacts/CodexMonitor .app.tar.gz
165+ release-artifacts/CodexMonitor_${TARGET_ARCH} .app.tar.gz
156166 cp "src-tauri/target/release/bundle/macos/Codex Monitor.app.tar.gz.sig" \
157- release-artifacts/CodexMonitor .app.tar.gz.sig
167+ release-artifacts/CodexMonitor_${TARGET_ARCH} .app.tar.gz.sig
158168
159169 - name : Upload macOS artifacts
160170 uses : actions/upload-artifact@v4
161171 with :
162- name : macos-artifacts
172+ name : macos-artifacts-${{ matrix.arch }}
163173 path : |
164- release-artifacts/CodexMonitor .zip
165- release-artifacts/CodexMonitor_*_aarch64 .dmg
166- release-artifacts/CodexMonitor .app.tar.gz
167- release-artifacts/CodexMonitor .app.tar.gz.sig
174+ release-artifacts/CodexMonitor_${{ matrix.arch }} .zip
175+ release-artifacts/CodexMonitor_*_${{ matrix.arch }} .dmg
176+ release-artifacts/CodexMonitor_${{ matrix.arch }} .app.tar.gz
177+ release-artifacts/CodexMonitor_${{ matrix.arch }} .app.tar.gz.sig
168178
169179 build_linux :
170180 name : linux bundles (${{ matrix.arch }})
@@ -323,8 +333,9 @@ jobs:
323333 - name : Download macOS artifacts
324334 uses : actions/download-artifact@v4
325335 with :
326- name : macos-artifacts
336+ pattern : macos-artifacts-*
327337 path : release-artifacts
338+ merge-multiple : true
328339
329340 - name : Download Linux bundles
330341 uses : actions/download-artifact@v4
@@ -386,7 +397,6 @@ jobs:
386397 PY
387398 )
388399
389- SIGNATURE=$(cat release-artifacts/CodexMonitor.app.tar.gz.sig)
390400 LAST_TAG=$(git tag --sort=-version:refname \
391401 | grep -v "^v${VERSION}$" \
392402 | head -n 1 || true)
@@ -446,12 +456,27 @@ jobs:
446456 def release_url(filename):
447457 return f"https://github.com/Dimillian/CodexMonitor/releases/download/v${VERSION}/{quote(filename)}"
448458
449- platforms = {
450- "darwin-aarch64": {
451- "url": release_url("CodexMonitor.app.tar.gz"),
452- "signature": "${SIGNATURE}",
453- }
454- }
459+ platforms = {}
460+
461+ # Find macOS updater bundles for each architecture
462+ macos_tarballs = list(artifacts_dir.glob("CodexMonitor_*.app.tar.gz"))
463+ for tarball in macos_tarballs:
464+ if "aarch64" in tarball.name:
465+ sig_path = tarball.with_suffix(tarball.suffix + ".sig")
466+ if not sig_path.exists():
467+ raise SystemExit(f"Missing signature for {tarball.name}")
468+ platforms["darwin-aarch64"] = {
469+ "url": release_url(tarball.name),
470+ "signature": sig_path.read_text().strip(),
471+ }
472+ elif "x86_64" in tarball.name:
473+ sig_path = tarball.with_suffix(tarball.suffix + ".sig")
474+ if not sig_path.exists():
475+ raise SystemExit(f"Missing signature for {tarball.name}")
476+ platforms["darwin-x86_64"] = {
477+ "url": release_url(tarball.name),
478+ "signature": sig_path.read_text().strip(),
479+ }
455480
456481 appimages = list(artifacts_dir.rglob("*.AppImage.tar.gz"))
457482 if not appimages:
@@ -565,6 +590,9 @@ jobs:
565590
566591 shopt -s nullglob globstar
567592 appimages=(release-artifacts/**/*.AppImage*)
593+ dmgs=(release-artifacts/**/*.dmg)
594+ tarballs=(release-artifacts/**/*.app.tar.gz)
595+ zips=(release-artifacts/CodexMonitor_*.zip)
568596 mapfile -t rpms < <(find release-artifacts -type f -name '*.rpm' | sort)
569597 mapfile -t windows_exes < <(find release-artifacts -type f -name '*.exe*' | sort)
570598 mapfile -t windows_msis < <(find release-artifacts -type f -name '*.msi*' | sort)
@@ -588,10 +616,9 @@ jobs:
588616 --title "v${VERSION}" \
589617 --notes-file release-artifacts/release-notes.md \
590618 --target "$GITHUB_SHA" \
591- release-artifacts/CodexMonitor.zip \
592- release-artifacts/CodexMonitor_*_aarch64.dmg \
593- release-artifacts/CodexMonitor.app.tar.gz \
594- release-artifacts/CodexMonitor.app.tar.gz.sig \
619+ "${zips[@]}" \
620+ "${dmgs[@]}" \
621+ "${tarballs[@]}" \
595622 "${appimages[@]}" \
596623 "${rpms[@]}" \
597624 "${windows_exes[@]}" \
0 commit comments