name: Release on: push: tags: - 'v*' workflow_dispatch: inputs: tag: description: 'Release tag (e.g., v0.0.6)' required: true type: string jobs: build-macos: name: Build macOS (${{ matrix.arch }}) runs-on: macos-latest strategy: matrix: arch: [arm64, x64] steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 10.13.1 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '24' cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile - name: Download Node.js binaries working-directory: apps/desktop run: pnpm download-node:all - name: Import Developer ID cert uses: apple-actions/import-codesign-certs@v3 with: p12-file-base64: ${{ secrets.DEVELOPER_CERT_BASE64 }} p12-password: ${{ secrets.DEVELOPER_CERT_PASSPHRASE }} - name: List signing identities (debug) run: security find-identity -v -p codesigning - name: Build artifacts working-directory: apps/desktop env: SKIP_CODESIGNING: false SKIP_NOTARIZATION: false APPLE_ID: ${{ secrets.APPLE_ID }} APPLE_APP_PASSWORD: ${{ secrets.APPLE_APP_PASSWORD }} APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} CODESIGNING_IDENTITY: ${{ secrets.CODESIGNING_IDENTITY }} run: | # Now make the distributables pnpm make:${{ matrix.arch }} - name: Get version from package.json id: package_version working-directory: apps/desktop run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: macos-${{ matrix.arch }} path: | apps/desktop/out/make/*-${{ matrix.arch }}.dmg apps/desktop/out/make/zip/darwin/${{ matrix.arch }}/*.zip release: name: Create Release needs: build-macos runs-on: ubuntu-latest permissions: contents: write steps: - name: Checkout code uses: actions/checkout@v4 - name: Get version from package.json id: package_version working-directory: apps/desktop run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT - name: Download all artifacts uses: actions/download-artifact@v4 with: path: artifacts - name: List artifacts run: | echo "=== Full artifacts directory structure ===" find artifacts -type f -name "*.dmg" -o -name "*.zip" | sort echo "" echo "=== Detailed file listing ===" find artifacts -type f \( -name "*.dmg" -o -name "*.zip" \) -exec ls -la {} \; - name: Create Release uses: softprops/action-gh-release@v2 with: draft: true prerelease: true tag_name: ${{ github.event.inputs.tag || github.ref_name }} name: Amical Desktop v${{ steps.package_version.outputs.version }} body: | ## Amical Desktop v${{ steps.package_version.outputs.version }} ### What's New - Please update this section with actual changes ### Downloads #### macOS - **Apple Silicon (M1/M2/M3)**: Download the DMG or ZIP file for arm64 - **Intel**: Download the DMG or ZIP file for x64 ### Installation **macOS**: - **DMG**: Download and open the DMG file, then drag Amical to your Applications folder - **ZIP**: Download and extract the ZIP file, then drag Amical to your Applications folder The ZIP files are primarily for automatic updates. We recommend using the DMG files for initial installation. files: | artifacts/macos-arm64/*.dmg artifacts/macos-arm64/zip/darwin/arm64/*.zip artifacts/macos-x64/*.dmg artifacts/macos-x64/zip/darwin/x64/*.zip env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}