diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 6959cfcb..03ad0dc8 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -130,13 +130,18 @@ jobs: cargo install tauri-cli --version "^2" --locked # Build the .app bundle only (no DMG yet so we can sign before packaging) CI=true cargo tauri build --target aarch64-apple-darwin --bundles app - APP=src-tauri/target/aarch64-apple-darwin/release/bundle/macos/TFTSR.app + APP=$(find src-tauri/target/aarch64-apple-darwin/release/bundle/macos -maxdepth 1 -type d -name "*.app" | head -n 1) + if [ -z "$APP" ]; then + echo "ERROR: Could not find macOS app bundle" + exit 1 + fi + APP_NAME=$(basename "$APP" .app) # Ad-hoc sign: changes Gatekeeper error from "damaged" to "unidentified developer" codesign --deep --force --sign - "$APP" # Create DMG from the signed .app mkdir -p src-tauri/target/aarch64-apple-darwin/release/bundle/dmg - DMG=src-tauri/target/aarch64-apple-darwin/release/bundle/dmg/TFTSR.dmg - hdiutil create -volname "TFTSR" -srcfolder "$APP" -ov -format UDZO "$DMG" + DMG=src-tauri/target/aarch64-apple-darwin/release/bundle/dmg/${APP_NAME}.dmg + hdiutil create -volname "$APP_NAME" -srcfolder "$APP" -ov -format UDZO "$DMG" - name: Upload artifacts env: RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }} diff --git a/tests/unit/releaseWorkflowMacBundle.test.ts b/tests/unit/releaseWorkflowMacBundle.test.ts new file mode 100644 index 00000000..832ad089 --- /dev/null +++ b/tests/unit/releaseWorkflowMacBundle.test.ts @@ -0,0 +1,23 @@ +import { describe, expect, it } from "vitest"; +import { readFileSync } from "node:fs"; +import path from "node:path"; + +const releaseWorkflowPath = path.resolve( + process.cwd(), + ".gitea/workflows/release.yml", +); + +describe("release workflow macOS bundle path", () => { + it("does not reference the legacy TFTSR.app bundle name", () => { + const workflow = readFileSync(releaseWorkflowPath, "utf-8"); + + expect(workflow).not.toContain("/bundle/macos/TFTSR.app"); + }); + + it("resolves the macOS .app bundle dynamically", () => { + const workflow = readFileSync(releaseWorkflowPath, "utf-8"); + + expect(workflow).toContain("APP=$(find"); + expect(workflow).toContain("-name \"*.app\""); + }); +});