Skip to content

Commit 9f280fc

Browse files
committed
Update macOS build workflow to use matrix strategy for universal binary creation
1 parent 648256e commit 9f280fc

File tree

1 file changed

+68
-22
lines changed

1 file changed

+68
-22
lines changed

.github/workflows/build-macos.yml

Lines changed: 68 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,23 @@ on:
77

88
jobs:
99
build:
10-
name: Build macOS Universal
11-
runs-on: macos-latest
10+
name: Build macOS ${{ matrix.target }}
11+
runs-on: ${{ matrix.os }}
12+
strategy:
13+
matrix:
14+
include:
15+
- os: macos-13 # Intel
16+
target: x86_64-apple-darwin
17+
arch: x86_64
18+
- os: macos-14 # Apple Silicon
19+
target: aarch64-apple-darwin
20+
arch: aarch64
1221

1322
steps:
1423
- uses: actions/checkout@v4
1524

1625
- name: Setup Rust
1726
uses: dtolnay/rust-toolchain@stable
18-
with:
19-
targets: aarch64-apple-darwin,x86_64-apple-darwin
2027

2128
- name: Setup Rust cache
2229
uses: Swatinem/rust-cache@v2
@@ -52,34 +59,73 @@ jobs:
5259
security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
5360
security list-keychain -d user -s $KEYCHAIN_PATH
5461
55-
- name: Build for ARM64
56-
run: bun run tauri build -- --target aarch64-apple-darwin
62+
- name: Build native
63+
run: bun run tauri build
5764

58-
- name: Build for x86_64
59-
run: bun run tauri build -- --target x86_64-apple-darwin
65+
- name: Upload architecture-specific artifacts
66+
uses: actions/upload-artifact@v4
67+
with:
68+
name: macos-${{ matrix.arch }}
69+
path: |
70+
src-tauri/target/release/bundle/macos/Claudia.app
71+
src-tauri/target/release/bundle/dmg/*.dmg
72+
retention-days: 1
73+
74+
universal:
75+
name: Create Universal Binary
76+
needs: build
77+
runs-on: macos-latest
78+
steps:
79+
- uses: actions/checkout@v4
80+
81+
- name: Download artifacts
82+
uses: actions/download-artifact@v4
83+
with:
84+
pattern: macos-*
85+
path: artifacts
6086

61-
- name: Create universal binary
87+
- name: Import Apple certificates
88+
env:
89+
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
90+
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
91+
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
6292
run: |
63-
mkdir -p src-tauri/target/universal-apple-darwin/release
64-
lipo -create -output src-tauri/target/universal-apple-darwin/release/claudia \
65-
src-tauri/target/aarch64-apple-darwin/release/claudia \
66-
src-tauri/target/x86_64-apple-darwin/release/claudia
93+
# Create variables
94+
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
95+
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
6796
68-
echo "✅ Universal binary created"
69-
lipo -info src-tauri/target/universal-apple-darwin/release/claudia
97+
# Import certificate from secrets
98+
echo -n "$APPLE_CERTIFICATE" | base64 --decode -o $CERTIFICATE_PATH
99+
100+
# Create temporary keychain
101+
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
102+
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
103+
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
104+
105+
# Import certificate to keychain
106+
security import $CERTIFICATE_PATH -P "$APPLE_CERTIFICATE_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
107+
security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
108+
security list-keychain -d user -s $KEYCHAIN_PATH
70109
71-
- name: Prepare app bundle with universal binary
110+
- name: Create universal app
72111
run: |
73112
# Create temp directory
74113
mkdir -p dmg_temp
75114
76-
# Copy the app bundle from one of the architecture-specific builds
77-
# Using the ARM64 build as the base (either architecture works since we'll replace the binary)
78-
cp -R src-tauri/target/aarch64-apple-darwin/release/bundle/macos/Claudia.app dmg_temp/
115+
# Extract both app bundles
116+
cp -R artifacts/macos-aarch64/Claudia.app dmg_temp/
117+
118+
# Extract x86_64 binary
119+
mkdir -p temp_x86
120+
cp -R artifacts/macos-x86_64/Claudia.app temp_x86/
79121
80-
# Replace the binary with universal binary
81-
rm -f dmg_temp/Claudia.app/Contents/MacOS/claudia
82-
cp src-tauri/target/universal-apple-darwin/release/claudia dmg_temp/Claudia.app/Contents/MacOS/claudia
122+
# Create universal binary using lipo
123+
lipo -create -output dmg_temp/Claudia.app/Contents/MacOS/claudia \
124+
dmg_temp/Claudia.app/Contents/MacOS/claudia \
125+
temp_x86/Claudia.app/Contents/MacOS/claudia
126+
127+
echo "✅ Universal binary created"
128+
lipo -info dmg_temp/Claudia.app/Contents/MacOS/claudia
83129
84130
- name: Sign app bundle
85131
env:

0 commit comments

Comments
 (0)