From 48329f6e3d35fbb07ffbc51fd345c97048b6b7c9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 05:43:01 +0000 Subject: [PATCH] feat: add desktop app icons, fix macOS multi-arch builds, update CI workflows and docs - Add desktop/resources/icon.png (512x512), icon.ico (multi-size), icon.icns (multi-size) - Fix package.json: set artifactName per platform, remove hardcoded mac arch - Update release-desktop.yml: split macOS into x64 (macos-13) and arm64 (macos-latest) runners, upgrade to action-gh-release@v2, use platform-specific build commands - Update desktop-build.yml: split macOS build job into x64 and arm64 - Update README.md: accurate download table (4 platforms), correct direct download links - Update desktop/README.md: separate macOS arm64/x64 entries, per-arch build commands Agent-Logs-Url: https://github.com/SynTechRev/ODIA/sessions/7469ac40-b9fa-41ff-9ec2-0542dc809e3a Co-authored-by: SynTechRev <235390103+SynTechRev@users.noreply.github.com> --- .github/workflows/desktop-build.yml | 21 +++++++++++++-------- .github/workflows/release-desktop.yml | 18 ++++++++++++------ README.md | 6 ++++-- desktop/README.md | 10 ++++++---- desktop/package.json | 12 +++++++----- desktop/resources/icon.icns | Bin 0 -> 10426 bytes desktop/resources/icon.ico | Bin 0 -> 3085 bytes desktop/resources/icon.png | Bin 0 -> 6812 bytes 8 files changed, 42 insertions(+), 25 deletions(-) create mode 100644 desktop/resources/icon.icns create mode 100644 desktop/resources/icon.ico create mode 100644 desktop/resources/icon.png diff --git a/.github/workflows/desktop-build.yml b/.github/workflows/desktop-build.yml index 1b855fb..99b6f1b 100644 --- a/.github/workflows/desktop-build.yml +++ b/.github/workflows/desktop-build.yml @@ -58,7 +58,7 @@ jobs: run: npm test build-desktop: - name: Build (${{ matrix.os }}) + name: Build (${{ matrix.platform }}) needs: test-desktop runs-on: ${{ matrix.os }} if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') @@ -67,11 +67,17 @@ jobs: matrix: include: - os: ubuntu-latest + platform: linux build_cmd: npm run build:linux - os: windows-latest + platform: windows build_cmd: npm run build:win + - os: macos-13 + platform: mac-x64 + build_cmd: npm run build:mac -- --x64 - os: macos-latest - build_cmd: npm run build:mac + platform: mac-arm64 + build_cmd: npm run build:mac -- --arm64 steps: - uses: actions/checkout@v4 @@ -95,7 +101,9 @@ jobs: - name: Build backend working-directory: desktop - run: npm run build:backend + run: | + npm ci + npm run build:backend - name: Install frontend dependencies working-directory: frontend @@ -118,6 +126,7 @@ jobs: echo "Error: frontend/out not found. Ensure ELECTRON_BUILD=1 was set." >&2 exit 1 fi + - name: Verify package-lock.json exists working-directory: desktop shell: bash @@ -128,10 +137,6 @@ jobs: fi echo "package-lock.json found" - - name: Install desktop dependencies - working-directory: desktop - run: npm ci - - name: Build installer working-directory: desktop run: ${{ matrix.build_cmd }} @@ -139,7 +144,7 @@ jobs: - name: Upload artifacts uses: actions/upload-artifact@v4 with: - name: odia-desktop-${{ matrix.os }} + name: odia-desktop-${{ matrix.platform }} path: | desktop/dist/*.dmg desktop/dist/*.exe diff --git a/.github/workflows/release-desktop.yml b/.github/workflows/release-desktop.yml index d9ba9d3..72f1d1f 100644 --- a/.github/workflows/release-desktop.yml +++ b/.github/workflows/release-desktop.yml @@ -14,17 +14,23 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, windows-latest, macos-latest] include: - os: ubuntu-latest platform: linux + build_cmd: npm run build:linux artifact: ODIA-*.AppImage - os: windows-latest platform: windows + build_cmd: npm run build:win artifact: ODIA-Setup-*.exe + - os: macos-13 + platform: mac-x64 + build_cmd: npm run build:mac -- --x64 + artifact: ODIA-*-x64.dmg - os: macos-latest - platform: mac - artifact: ODIA-*.dmg + platform: mac-arm64 + build_cmd: npm run build:mac -- --arm64 + artifact: ODIA-*-arm64.dmg runs-on: ${{ matrix.os }} @@ -95,7 +101,7 @@ jobs: - name: Build Electron installer working-directory: desktop - run: npm run build + run: ${{ matrix.build_cmd }} - name: Upload artifacts uses: actions/upload-artifact@v4 @@ -106,9 +112,9 @@ jobs: - name: Upload to Release if: startsWith(github.ref, 'refs/tags/v') - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 with: - files: desktop/dist/* + files: desktop/dist/${{ matrix.artifact }} draft: false prerelease: false generate_release_notes: true diff --git a/README.md b/README.md index 1529d79..e82a819 100644 --- a/README.md +++ b/README.md @@ -25,12 +25,14 @@ Download the latest version from the [**Releases page**](https://github.com/SynT | Platform | Installer | Architecture | |----------|-----------|--------------| | **Windows** | `ODIA-Setup-2.1.0.exe` | x64 | -| **macOS** | `ODIA-2.1.0.dmg` | x64, arm64 (Universal) | +| **macOS (Apple Silicon)** | `ODIA-2.1.0-arm64.dmg` | arm64 (M1/M2/M3/M4) | +| **macOS (Intel)** | `ODIA-2.1.0-x64.dmg` | x64 | | **Linux** | `ODIA-2.1.0.AppImage` | x64 | **Direct download links (after v2.1.0 release):** - [Windows x64](https://github.com/SynTechRev/ODIA/releases/download/v2.1.0/ODIA-Setup-2.1.0.exe) -- [macOS Universal](https://github.com/SynTechRev/ODIA/releases/download/v2.1.0/ODIA-2.1.0.dmg) +- [macOS Apple Silicon (arm64)](https://github.com/SynTechRev/ODIA/releases/download/v2.1.0/ODIA-2.1.0-arm64.dmg) +- [macOS Intel (x64)](https://github.com/SynTechRev/ODIA/releases/download/v2.1.0/ODIA-2.1.0-x64.dmg) - [Linux AppImage](https://github.com/SynTechRev/ODIA/releases/download/v2.1.0/ODIA-2.1.0.AppImage) **System Requirements:** diff --git a/desktop/README.md b/desktop/README.md index 91b0d20..755b42a 100644 --- a/desktop/README.md +++ b/desktop/README.md @@ -24,7 +24,8 @@ Download the latest installer for your platform from the | Platform | File | |----------|------| | Windows | `ODIA-Setup-x.x.x.exe` | -| macOS | `ODIA-x.x.x.dmg` | +| macOS (Apple Silicon) | `ODIA-x.x.x-arm64.dmg` | +| macOS (Intel) | `ODIA-x.x.x-x64.dmg` | | Linux | `ODIA-x.x.x.AppImage` | ### Install and Run @@ -126,9 +127,10 @@ cp -r out/* ../desktop/build/frontend/ # 4. Build the installer for your platform cd ../desktop -npm run build:win # Windows -npm run build:mac # macOS -npm run build:linux # Linux +npm run build:win # Windows (x64) +npm run build:mac -- --arm64 # macOS Apple Silicon (arm64) +npm run build:mac -- --x64 # macOS Intel (x64) +npm run build:linux # Linux (x64) ``` Installers are output to `desktop/dist/`. diff --git a/desktop/package.json b/desktop/package.json index df9e529..d04b104 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -62,17 +62,18 @@ "arch": ["x64"] } ], - "icon": "resources/icon.ico" + "icon": "resources/icon.ico", + "artifactName": "${productName}-Setup-${version}.${ext}" }, "mac": { "target": [ { - "target": "dmg", - "arch": ["x64", "arm64"] + "target": "dmg" } ], "icon": "resources/icon.icns", - "category": "public.app-category.productivity" + "category": "public.app-category.productivity", + "artifactName": "${productName}-${version}-${arch}.${ext}" }, "linux": { "target": [ @@ -82,7 +83,8 @@ } ], "icon": "resources/icon.png", - "category": "Office" + "category": "Office", + "artifactName": "${productName}-${version}.${ext}" }, "nsis": { "oneClick": false, diff --git a/desktop/resources/icon.icns b/desktop/resources/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..4a7e97524b5651065bf4e891e5a956ace71f298f GIT binary patch literal 10426 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 T#TSz6P|?Ratv`SKjp{!D2VqC# literal 0 HcmV?d00001 diff --git a/desktop/resources/icon.ico b/desktop/resources/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8b375c5d9281f17545f686ed7b035d174230b43f GIT binary patch literal 3085 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 If4@il6S8IsJ^%m! literal 0 HcmV?d00001 diff --git a/desktop/resources/icon.png b/desktop/resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..04aa7c69b41ec80980941f9a98ead752e98ec368 GIT binary patch literal 6812 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