@@ -249,149 +249,6 @@ jobs:
249249 dist/*.dmg
250250 if-no-files-found : error
251251
252- # ── macOS x86_64 (Intel) ──────────────────────────────────────────────
253- build-macos-x86_64 :
254- name : build macOS x86_64
255- runs-on : macos-13
256- timeout-minutes : 120
257- env :
258- CARGO_TERM_COLOR : always
259- RUST_BACKTRACE : 1
260- GSTREAMER_VERSION : 1.26.9
261- steps :
262- - name : Checkout
263- uses : actions/checkout@v6
264- with :
265- fetch-depth : 0
266-
267- - name : Install system dependencies (brew)
268- run : brew install pkg-config gstreamer
269-
270- - name : Install Rust toolchain (from rust-toolchain.toml)
271- uses : dtolnay/rust-toolchain@stable
272- with :
273- toolchain : 1.95.0
274- targets : x86_64-apple-darwin
275-
276- - name : Cache cargo registry & target
277- uses : Swatinem/rust-cache@v2
278- with :
279- shared-key : macos-x86_64
280- cache-bin : false
281- save-if : true
282- cache-on-failure : true
283-
284- - name : Set version env
285- run : echo "VERSION=${GITHUB_REF_NAME#v}" >> "$GITHUB_ENV"
286-
287- - name : Build release binaries
288- run : cargo xtask fresh-build --release
289-
290- - name : Package tarball (x86_64-apple-darwin)
291- run : |
292- TARGET=x86_64-apple-darwin
293- STAGING="neomacs-${VERSION}-${TARGET}"
294- mkdir -p "$STAGING"
295- cp target/release/neomacs "$STAGING/"
296- cp target/release/neomacs.pdump "$STAGING/"
297- cp -r lisp "$STAGING/"
298- cp -r etc "$STAGING/"
299- cp COPYING "$STAGING/"
300- mkdir -p dist
301- tar czf "dist/${STAGING}.tar.gz" "$STAGING"
302-
303- - name : Build and package .app + .dmg
304- run : ./scripts/package-macos-app.sh --no-smoke
305-
306- - name : Upload macOS x86_64 artifacts
307- uses : actions/upload-artifact@v4
308- with :
309- name : macos-x86_64
310- path : |
311- dist/*.tar.gz
312- dist/*.dmg
313- if-no-files-found : error
314-
315- # ── macOS universal .dmg (aarch64 + x86_64 via lipo) ──────────────────
316- build-macos-universal :
317- name : build macOS universal .dmg
318- runs-on : macos-latest
319- timeout-minutes : 30
320- needs : [build-macos-aarch64, build-macos-x86_64]
321- steps :
322- - name : Checkout
323- uses : actions/checkout@v6
324-
325- - name : Download aarch64 artifacts
326- uses : actions/download-artifact@v5
327- with :
328- name : macos-aarch64
329- path : artifacts-aarch64
330-
331- - name : Download x86_64 artifacts
332- uses : actions/download-artifact@v5
333- with :
334- name : macos-x86_64
335- path : artifacts-x86_64
336-
337- - name : Set version env
338- run : echo "VERSION=${GITHUB_REF_NAME#v}" >> "$GITHUB_ENV"
339-
340- - name : Extract tarballs
341- run : |
342- mkdir -p staging-aarch64 staging-x86_64
343- tar xzf artifacts-aarch64/neomacs-*-aarch64-apple-darwin.tar.gz -C staging-aarch64
344- tar xzf artifacts-x86_64/neomacs-*-x86_64-apple-darwin.tar.gz -C staging-x86_64
345- STAGING_AARCH64=$(ls -d staging-aarch64/neomacs-*-aarch64-apple-darwin)
346- STAGING_X8664=$(ls -d staging-x86_64/neomacs-*-x86_64-apple-darwin)
347- echo "STAGING_AARCH64=$STAGING_AARCH64" >> "$GITHUB_ENV"
348- echo "STAGING_X8664=$STAGING_X8664" >> "$GITHUB_ENV"
349-
350- - name : Create universal .app bundle and .dmg
351- run : |
352- set -euo pipefail
353- VERSION="${{ env.VERSION }}"
354- APP="$PWD/dist/neomacs.app"
355-
356- rm -rf "$APP"
357- mkdir -p "$APP/Contents/MacOS"
358- mkdir -p "$APP/Contents/Resources/neomacs"
359- mkdir -p "$APP/Contents/Frameworks"
360-
361- # Merge binaries with lipo
362- lipo -create \
363- "$STAGING_AARCH64/neomacs" \
364- "$STAGING_X8664/neomacs" \
365- -output "$APP/Contents/MacOS/neomacs"
366- chmod 0755 "$APP/Contents/MacOS/neomacs"
367-
368- # Ship aarch64 pdump; x86_64 binary falls back to .elc bootstrap
369- # if fingerprint mismatches.
370- cp "$STAGING_AARCH64/neomacs.pdump" "$APP/Contents/MacOS/"
371-
372- # Runtime files (identical across archs, just copy from aarch64)
373- cp -r "$STAGING_AARCH64/lisp" "$APP/Contents/Resources/neomacs/"
374- cp -r "$STAGING_AARCH64/etc" "$APP/Contents/Resources/neomacs/"
375- cp -r "$STAGING_AARCH64/LICENSE" "$APP/Contents/Resources/neomacs/"
376-
377- # Create .dmg
378- DMG_NAME="neomacs-${VERSION}-universal"
379- DMG="$PWD/dist/${DMG_NAME}.dmg"
380- mkdir -p dist
381- hdiutil create -volname "NEO Emacs" \
382- -srcfolder "$APP" \
383- -ov -format UDZO \
384- "$DMG"
385-
386- echo "Created $DMG"
387-
388- - name : Upload macOS universal .dmg
389- uses : actions/upload-artifact@v4
390- with :
391- name : macos-universal
392- path : dist/neomacs-*-universal.dmg
393- if-no-files-found : error
394-
395252 # ── Windows x86_64 ────────────────────────────────────────────────────
396253 build-windows-x86_64 :
397254 name : build Windows x86_64
@@ -471,18 +328,18 @@ jobs:
471328 run : echo "VERSION=${GITHUB_REF_NAME#v}" >> "$GITHUB_ENV"
472329
473330 - name : Package zip (x86_64-pc-windows-msvc)
474- shell : bash
331+ shell : powershell
475332 run : |
476- TARGET=x86_64-pc-windows-msvc
477- STAGING="neomacs-${VERSION}-${TARGET}"
478- mkdir -p "$STAGING"
479- cp target/release/neomacs.exe "$STAGING/"
480- cp target/release/neomacs.pdump "$STAGING/"
481- cp -r lisp "$STAGING/"
482- cp -r etc "$STAGING/"
483- cp COPYING "$STAGING/"
484- mkdir -p dist
485- zip -r " dist/${STAGING}.zip" "$STAGING "
333+ $ TARGET=" x86_64-pc-windows-msvc"
334+ $ STAGING="neomacs-${env: VERSION}-${TARGET}"
335+ New-Item -ItemType Directory -Force -Path "$STAGING"
336+ Copy-Item target/release/neomacs.exe "$STAGING/"
337+ Copy-Item target/release/neomacs.pdump "$STAGING/"
338+ Copy-Item -Recurse lisp "$STAGING/"
339+ Copy-Item -Recurse etc "$STAGING/"
340+ Copy-Item COPYING "$STAGING/"
341+ New-Item -ItemType Directory -Force -Path dist
342+ Compress-Archive -Path "$STAGING" -DestinationPath " dist/${STAGING}.zip"
486343
487344 - name : Package .exe installer
488345 shell : bash
@@ -507,8 +364,6 @@ jobs:
507364 - build-linux-x86_64
508365 - build-linux-aarch64
509366 - build-macos-aarch64
510- - build-macos-x86_64
511- - build-macos-universal
512367 - build-windows-x86_64
513368 runs-on : ubuntu-latest
514369 steps :
0 commit comments