2020 workflow_dispatch :
2121 inputs :
2222 skip_build :
23- description : " Skip build and use artifacts from a previous run"
23+ description : ' Skip build and use artifacts from a previous run'
2424 required : false
2525 default : false
2626 type : boolean
2727 run_id :
28- description : " Run ID to download artifacts from (leave empty for latest)"
28+ description : ' Run ID to download artifacts from (leave empty for latest)'
2929 required : false
3030 type : string
3131 push :
@@ -39,30 +39,30 @@ jobs:
3939 strategy :
4040 matrix :
4141 include :
42- - os : macos-13 # Intel
42+ - os : macos-13 # Intel
4343 target : x86_64-apple-darwin
4444 arch : x86_64
45- - os : macos-14 # Apple Silicon
45+ - os : macos-14 # Apple Silicon
4646 target : aarch64-apple-darwin
4747 arch : aarch64
48-
48+
4949 steps :
5050 - uses : actions/checkout@v4
51-
51+
5252 - name : Setup Rust
5353 uses : dtolnay/rust-toolchain@stable
54-
54+
5555 - name : Setup Rust cache
5656 uses : Swatinem/rust-cache@v2
5757 with :
5858 workspaces : src-tauri
59-
59+
6060 - name : Setup Bun
6161 uses : oven-sh/setup-bun@v2
62-
62+
6363 - name : Install dependencies
6464 run : bun install
65-
65+
6666 - name : Import Apple certificates
6767 env :
6868 APPLE_CERTIFICATE : ${{ secrets.APPLE_CERTIFICATE }}
@@ -72,49 +72,49 @@ jobs:
7272 # Create variables
7373 CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
7474 KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
75-
75+
7676 # Import certificate from secrets
7777 echo -n "$APPLE_CERTIFICATE" | base64 --decode -o $CERTIFICATE_PATH
78-
78+
7979 # Create temporary keychain
8080 security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
8181 security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
8282 security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
83-
83+
8484 # Import certificate to keychain
8585 security import $CERTIFICATE_PATH -P "$APPLE_CERTIFICATE_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
8686 security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
8787 security list-keychain -d user -s $KEYCHAIN_PATH
88-
88+
8989 - name : Build native
9090 env :
9191 CI : true
9292 run : bun run tauri build
93-
93+
9494 - name : Upload architecture-specific artifacts
9595 uses : actions/upload-artifact@v4
9696 with :
9797 name : macos-${{ matrix.arch }}
9898 path : |
99- src-tauri/target/release/bundle/macos/Claudia .app
99+ src-tauri/target/release/bundle/macos/opcode .app
100100 src-tauri/target/release/bundle/dmg/*.dmg
101101 retention-days : 1
102-
102+
103103 universal :
104104 name : Create Universal Binary
105105 needs : [build]
106106 if : ${{ !cancelled() && (needs.build.result == 'success' || needs.build.result == 'skipped') }}
107107 runs-on : macos-latest
108108 steps :
109109 - uses : actions/checkout@v4
110-
110+
111111 - name : Download artifacts from current workflow
112112 if : ${{ !inputs.skip_build }}
113113 uses : actions/download-artifact@v4
114114 with :
115115 pattern : macos-*
116116 path : artifacts
117-
117+
118118 - name : Download artifacts from specific run
119119 if : ${{ inputs.skip_build && inputs.run_id != '' }}
120120 uses : dawidd6/action-download-artifact@v3
@@ -123,7 +123,7 @@ jobs:
123123 run_id : ${{ inputs.run_id }}
124124 name : macos-*
125125 path : artifacts
126-
126+
127127 - name : Download artifacts from latest run
128128 if : ${{ inputs.skip_build && inputs.run_id == '' }}
129129 uses : dawidd6/action-download-artifact@v3
@@ -132,7 +132,7 @@ jobs:
132132 workflow_conclusion : success
133133 name : macos-*
134134 path : artifacts
135-
135+
136136 - name : List downloaded artifacts
137137 run : |
138138 echo "📁 Artifact structure:"
@@ -142,7 +142,7 @@ jobs:
142142 ls -la artifacts/
143143 ls -la artifacts/macos-aarch64/ || echo "macos-aarch64 directory not found"
144144 ls -la artifacts/macos-x86_64/ || echo "macos-x86_64 directory not found"
145-
145+
146146 - name : Import Apple certificates
147147 env :
148148 APPLE_CERTIFICATE : ${{ secrets.APPLE_CERTIFICATE }}
@@ -152,65 +152,65 @@ jobs:
152152 # Create variables
153153 CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
154154 KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
155-
155+
156156 # Import certificate from secrets
157157 echo -n "$APPLE_CERTIFICATE" | base64 --decode -o $CERTIFICATE_PATH
158-
158+
159159 # Create temporary keychain
160160 security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
161161 security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
162162 security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
163-
163+
164164 # Import certificate to keychain
165165 security import $CERTIFICATE_PATH -P "$APPLE_CERTIFICATE_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
166166 security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
167167 security list-keychain -d user -s $KEYCHAIN_PATH
168-
168+
169169 - name : Create universal app
170170 run : |
171171 # Create temp directory
172172 mkdir -p dmg_temp
173-
173+
174174 # Extract zip files if they exist
175175 if [ -f "artifacts/macos-aarch64.zip" ]; then
176176 echo "📦 Extracting macos-aarch64.zip..."
177177 unzip -q artifacts/macos-aarch64.zip -d artifacts/macos-aarch64/
178178 fi
179-
179+
180180 if [ -f "artifacts/macos-x86_64.zip" ]; then
181181 echo "📦 Extracting macos-x86_64.zip..."
182182 unzip -q artifacts/macos-x86_64.zip -d artifacts/macos-x86_64/
183183 fi
184-
184+
185185 # Find the actual app paths
186- AARCH64_APP=$(find artifacts/macos-aarch64 -name "Claudia .app" -type d | head -1)
187- X86_64_APP=$(find artifacts/macos-x86_64 -name "Claudia .app" -type d | head -1)
188-
186+ AARCH64_APP=$(find artifacts/macos-aarch64 -name "opcode .app" -type d | head -1)
187+ X86_64_APP=$(find artifacts/macos-x86_64 -name "opcode .app" -type d | head -1)
188+
189189 if [ -z "$AARCH64_APP" ] || [ -z "$X86_64_APP" ]; then
190190 echo "❌ Could not find app bundles"
191191 echo "AARCH64_APP: $AARCH64_APP"
192192 echo "X86_64_APP: $X86_64_APP"
193193 exit 1
194194 fi
195-
195+
196196 echo "✅ Found app bundles:"
197197 echo " ARM64: $AARCH64_APP"
198198 echo " x86_64: $X86_64_APP"
199-
199+
200200 # Copy ARM64 app as base
201201 cp -R "$AARCH64_APP" dmg_temp/
202-
202+
203203 # Create universal binary using lipo
204- lipo -create -output dmg_temp/Claudia .app/Contents/MacOS/claudia \
205- "$AARCH64_APP/Contents/MacOS/claudia " \
206- "$X86_64_APP/Contents/MacOS/claudia "
207-
204+ lipo -create -output dmg_temp/opcode .app/Contents/MacOS/opcode \
205+ "$AARCH64_APP/Contents/MacOS/opcode " \
206+ "$X86_64_APP/Contents/MacOS/opcode "
207+
208208 # Ensure executable permissions are set
209- chmod +x dmg_temp/Claudia .app/Contents/MacOS/claudia
210-
209+ chmod +x dmg_temp/opcode .app/Contents/MacOS/opcode
210+
211211 echo "✅ Universal binary created"
212- lipo -info dmg_temp/Claudia .app/Contents/MacOS/claudia
213-
212+ lipo -info dmg_temp/opcode .app/Contents/MacOS/opcode
213+
214214 - name : Sign app bundle
215215 env :
216216 APPLE_SIGNING_IDENTITY : ${{ secrets.APPLE_SIGNING_IDENTITY }}
@@ -221,22 +221,22 @@ jobs:
221221 --force \
222222 --deep \
223223 --entitlements src-tauri/entitlements.plist \
224- dmg_temp/Claudia .app
225-
224+ dmg_temp/opcode .app
225+
226226 - name : Create DMG
227227 run : |
228- hdiutil create -volname "Claudia Installer" \
228+ hdiutil create -volname "opcode Installer" \
229229 -srcfolder dmg_temp \
230- -ov -format UDZO Claudia .dmg
231-
230+ -ov -format UDZO opcode .dmg
231+
232232 - name : Sign DMG
233233 env :
234234 APPLE_SIGNING_IDENTITY : ${{ secrets.APPLE_SIGNING_IDENTITY }}
235235 run : |
236236 codesign --sign "$APPLE_SIGNING_IDENTITY" \
237237 --timestamp \
238- --force Claudia .dmg
239-
238+ --force opcode .dmg
239+
240240 - name : Notarize DMG
241241 env :
242242 APPLE_ID : ${{ secrets.APPLE_ID }}
@@ -248,47 +248,47 @@ jobs:
248248 --apple-id "$APPLE_ID" \
249249 --team-id "$APPLE_TEAM_ID" \
250250 --password "$APPLE_PASSWORD"
251-
251+
252252 # Submit for notarization
253- xcrun notarytool submit Claudia .dmg \
253+ xcrun notarytool submit opcode .dmg \
254254 --keychain-profile "notarytool-profile" \
255255 --wait
256-
256+
257257 - name : Staple notarization
258- run : xcrun stapler staple Claudia .dmg
259-
258+ run : xcrun stapler staple opcode .dmg
259+
260260 - name : Verify DMG
261261 run : |
262- spctl -a -t open -vvv --context context:primary-signature Claudia .dmg
262+ spctl -a -t open -vvv --context context:primary-signature opcode .dmg
263263 echo "✅ DMG verification complete"
264-
264+
265265 - name : Create artifacts directory
266266 run : |
267267 mkdir -p dist/macos-universal
268- cp Claudia .dmg dist/macos-universal/
269-
268+ cp opcode .dmg dist/macos-universal/
269+
270270 # Also save the app bundle using ditto to preserve permissions and signatures
271271 ditto -c -k --sequesterRsrc --keepParent \
272- dmg_temp/Claudia .app dist/macos-universal/Claudia .app.zip
273-
272+ dmg_temp/opcode .app dist/macos-universal/opcode .app.zip
273+
274274 # Generate checksum
275275 shasum -a 256 dist/macos-universal/* > dist/macos-universal/checksums.txt
276-
276+
277277 - name : Upload artifacts
278278 uses : actions/upload-artifact@v4
279279 with :
280280 name : macos-universal
281281 path : dist/macos-universal/*
282-
282+
283283 - name : Cleanup
284284 if : always()
285285 run : |
286286 echo "🧹 Cleaning up temporary directories..."
287287 rm -rf dmg_temp temp_x86 artifacts
288-
288+
289289 # Clean up keychain
290290 if [ -n "$RUNNER_TEMP" ] && [ -f "$RUNNER_TEMP/app-signing.keychain-db" ]; then
291291 security delete-keychain "$RUNNER_TEMP/app-signing.keychain-db" || true
292292 fi
293-
293+
294294 echo "✅ Cleanup complete"
0 commit comments