From 382b77ffe81706ba1dc062a0e5150be050838f11 Mon Sep 17 00:00:00 2001 From: haritabh-z01 Date: Tue, 5 Aug 2025 15:19:11 +0530 Subject: [PATCH] feat: publish workflow --- .github/workflows/release.yml | 140 ++++++++++++++++++++++++++++++++++ apps/desktop/package.json | 28 +++---- 2 files changed, 155 insertions(+), 13 deletions(-) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..68b4606 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,140 @@ +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 }} \ No newline at end of file diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 4817b65..e1ad560 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@amical/desktop", - "version": "0.0.5", + "version": "0.0.5-test-publish", "description": "Amical Desktop app", "main": ".vite/build/main.js", "productName": "Amical", @@ -9,19 +9,19 @@ "url": "https://github.com/amicalhq/amical" }, "scripts": { - "start": "pnpm build:swift-helper && electron-forge start", + "start": "pnpm build:deps && electron-forge start", "start:onboarding": "FORCE_ONBOARDING=true pnpm start", - "package": "pnpm build:swift-helper && electron-forge package", - "make": "pnpm build:swift-helper && electron-forge make --platform=darwin --arch=x64,arm64", - "make:arm64": "pnpm build:swift-helper && electron-forge make --platform=darwin --arch=arm64", - "make:x64": "pnpm build:swift-helper && electron-forge make --platform=darwin --arch=x64", - "make:dmg": "pnpm build:swift-helper && electron-forge make --targets=@electron-forge/maker-dmg --platform=darwin --arch=arm64,x64", - "make:dmg:arm64": "pnpm build:swift-helper && electron-forge make --targets=@electron-forge/maker-dmg --platform=darwin --arch=arm64", - "make:dmg:x64": "pnpm build:swift-helper && electron-forge make --targets=@electron-forge/maker-dmg --platform=darwin --arch=x64", - "make:zip:arm64": "pnpm build:swift-helper && electron-forge make --targets=@electron-forge/maker-zip --platform=darwin --arch=arm64", - "make:zip:x64": "pnpm build:swift-helper && electron-forge make --targets=@electron-forge/maker-zip --platform=darwin --arch=x64", - "package:arm64": "pnpm build:swift-helper && electron-forge package --platform=darwin --arch=arm64", - "package:x64": "pnpm build:swift-helper && electron-forge package --platform=darwin --arch=x64", + "package": "pnpm build:deps && electron-forge package", + "make": "pnpm build:deps && electron-forge make", + "make:arm64": "pnpm build:deps && electron-forge make --platform=darwin --arch=arm64", + "make:x64": "pnpm build:deps && electron-forge make --platform=darwin --arch=x64", + "make:dmg": "pnpm build:deps && electron-forge make --targets=@electron-forge/maker-dmg --platform=darwin --arch=arm64,x64", + "make:dmg:arm64": "pnpm build:deps && electron-forge make --targets=@electron-forge/maker-dmg --platform=darwin --arch=arm64", + "make:dmg:x64": "pnpm build:deps && electron-forge make --targets=@electron-forge/maker-dmg --platform=darwin --arch=x64", + "make:zip:arm64": "pnpm build:deps && electron-forge make --targets=@electron-forge/maker-zip --platform=darwin --arch=arm64", + "make:zip:x64": "pnpm build:deps && electron-forge make --targets=@electron-forge/maker-zip --platform=darwin --arch=x64", + "package:arm64": "pnpm build:deps && electron-forge package --platform=darwin --arch=arm64", + "package:x64": "pnpm build:deps && electron-forge package --platform=darwin --arch=x64", "publish": "electron-forge publish", "lint": "eslint --ext .ts,.tsx .", "format:check": "prettier --check \"**/*.{ts,tsx,md,json,mjs,mts,css,mdx}\" --cache --ignore-path=../../.prettierignore", @@ -29,6 +29,8 @@ "db:generate": "drizzle-kit generate", "db:push": "drizzle-kit push", "db:migrate": "drizzle-kit migrate", + "build:deps": "pnpm build:types && pnpm build:swift-helper", + "build:types": "pnpm --filter @amical/types build", "build:swift-helper": "pnpm --filter @amical/swift-helper build", "dev": "pnpm start", "download-node": "tsx scripts/download-node-binaries.ts",