From fed8140404d40f059e3afcf7b1b68d79ee80d010 Mon Sep 17 00:00:00 2001 From: benzntech Date: Sat, 28 Feb 2026 21:44:42 +0530 Subject: [PATCH 1/7] chore: ignore electron build artifacts --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a93fed538e..0dcaf727a0 100644 --- a/.gitignore +++ b/.gitignore @@ -103,5 +103,7 @@ app.log # Backup directories app.__qa_backup/ -# Electron (subproject dependency lock) +# Electron (subproject dependency lock and build artifacts) electron/package-lock.json +electron/dist-electron/ +electron/node_modules/ From de75ed155123a44d4659e909891896106fcc99da Mon Sep 17 00:00:00 2001 From: benzntech Date: Sat, 28 Feb 2026 21:52:52 +0530 Subject: [PATCH 2/7] fix: upload only installer files to releases - Filter to *.dmg, *.exe, *.AppImage, *.blockmap only - Prevents uploading unpacked app contents (DLLs, JS files, images) --- .github/workflows/electron-release.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/electron-release.yml b/.github/workflows/electron-release.yml index 955e765922..cd0a7e776c 100644 --- a/.github/workflows/electron-release.yml +++ b/.github/workflows/electron-release.yml @@ -60,6 +60,10 @@ jobs: - name: Upload release assets uses: softprops/action-gh-release@v2 with: - files: electron/dist-electron/**/* + files: | + electron/dist-electron/*.dmg + electron/dist-electron/*.exe + electron/dist-electron/*.AppImage + electron/dist-electron/*.blockmap env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 8e82350d6650b829268cc079bc0c50d81e3e6347 Mon Sep 17 00:00:00 2001 From: benzntech Date: Sat, 28 Feb 2026 23:14:53 +0530 Subject: [PATCH 3/7] refactor: improve Electron release workflow - Trigger on git tags (v*) instead of release.published - Add manual workflow_dispatch for re-runs - Add version validation step - Use artifact upload/download pattern - Single release job ensures all platforms complete first - Prevents partial releases if one platform fails --- .github/workflows/electron-release.yml | 102 ++++++++++++++++++++++--- 1 file changed, 90 insertions(+), 12 deletions(-) diff --git a/.github/workflows/electron-release.yml b/.github/workflows/electron-release.yml index cd0a7e776c..b474e8c7b1 100644 --- a/.github/workflows/electron-release.yml +++ b/.github/workflows/electron-release.yml @@ -1,29 +1,71 @@ name: Build Electron Desktop App on: - release: - types: [published] + push: + tags: + - 'v*' + workflow_dispatch: + inputs: + version: + description: 'Release version (e.g., v1.6.8)' + required: true + type: string permissions: contents: write jobs: + validate: + name: Validate version + runs-on: ubuntu-latest + outputs: + version: ${{ steps.validate.outputs.version }} + steps: + - name: Checkout code + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Validate version format + id: validate + run: | + if [[ "${{ github.event_name }}" == "push" ]]; then + VERSION="${GITHUB_REF#refs/tags/}" + else + VERSION="${{ inputs.version }}" + fi + + if [[ ! "$VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Error: Invalid version format. Expected: v1.6.8" + exit 1 + fi + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "✓ Valid version: $VERSION" + build: - name: Build Electron (${{ matrix.os }}) + name: Build Electron (${{ matrix.platform }}) + needs: validate runs-on: ${{ matrix.runner }} strategy: fail-fast: false matrix: include: - - os: windows + - platform: windows runner: windows-latest target: win - - os: macos + ext: .exe + - platform: macos-intel runner: macos-latest target: mac - - os: linux + ext: .dmg + - platform: macos-arm64 + runner: macos-latest + target: mac + ext: -arm64.dmg + - platform: linux runner: ubuntu-latest target: linux + ext: .AppImage steps: - name: Checkout @@ -53,17 +95,53 @@ jobs: working-directory: electron run: npm install --no-audit --no-fund - - name: Build Electron for ${{ matrix.target }} + - name: Build Electron for ${{ matrix.platform }} working-directory: electron run: npm run build:${{ matrix.target }} - - name: Upload release assets + - name: Collect installers + run: | + mkdir -p release-assets + cd electron/dist-electron + # Copy only installer files for this platform + for file in *${{ matrix.ext }}; do + [ -f "$file" ] && cp "$file" ../../release-assets/ + done + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: electron-${{ matrix.platform }} + path: release-assets/ + + release: + name: Create Release + needs: [validate, build] + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: release-assets + merge-multiple: true + + - name: List release files + run: ls -la release-assets/ + + - name: Create Release uses: softprops/action-gh-release@v2 with: + tag_name: ${{ needs.validate.outputs.version }} + draft: false + prerelease: false + generate_release_notes: true files: | - electron/dist-electron/*.dmg - electron/dist-electron/*.exe - electron/dist-electron/*.AppImage - electron/dist-electron/*.blockmap + release-assets/*.dmg + release-assets/*.exe + release-assets/*.AppImage + release-assets/*.blockmap env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 876a5a98f480bd37ca39e4fe531c5b02f28902d5 Mon Sep 17 00:00:00 2001 From: benzntech Date: Sat, 28 Feb 2026 23:16:43 +0530 Subject: [PATCH 4/7] feat: add source code archives to releases - Include .tar.gz and .zip of source code - Uses git archive for clean export (excludes node_modules, build artifacts) - Named: OmniRoute-vX.Y.Z.source.tar.gz / .zip --- .github/workflows/electron-release.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/electron-release.yml b/.github/workflows/electron-release.yml index b474e8c7b1..ed7b90f99b 100644 --- a/.github/workflows/electron-release.yml +++ b/.github/workflows/electron-release.yml @@ -121,6 +121,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v6 + with: + fetch-depth: 0 - name: Download all artifacts uses: actions/download-artifact@v4 @@ -128,6 +130,19 @@ jobs: path: release-assets merge-multiple: true + - name: Create source archives + run: | + # Create source code archives (excluding dev dependencies and build artifacts) + export TARBALL="OmniRoute-${{ needs.validate.outputs.version }}.source.tar.gz" + export ZIPBALL="OmniRoute-${{ needs.validate.outputs.version }}.source.zip" + + # Use git archive for clean source export + git archive --format=tar.gz --prefix=OmniRoute-${{ needs.validate.outputs.version }}/ HEAD -o "release-assets/$TARBALL" + git archive --format=zip --prefix=OmniRoute-${{ needs.validate.outputs.version }}/ HEAD -o "release-assets/$ZIPBALL" + + echo "✓ Created source archives:" + ls -lh "release-assets/$TARBALL" "release-assets/$ZIPBALL" + - name: List release files run: ls -la release-assets/ @@ -143,5 +158,7 @@ jobs: release-assets/*.exe release-assets/*.AppImage release-assets/*.blockmap + release-assets/*.source.tar.gz + release-assets/*.source.zip env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From c9cdd5109b3f655bc8ed65144f24aa73eb073726 Mon Sep 17 00:00:00 2001 From: benzntech Date: Sat, 28 Feb 2026 23:19:20 +0530 Subject: [PATCH 5/7] feat: add Windows portable standalone exe - NSIS installer: OmniRoute.Setup.X.Y.Z.exe (install to Program Files) - Portable: OmniRoute.exe (run anywhere, no installation) --- .github/workflows/electron-release.yml | 5 +++++ electron/package.json | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/.github/workflows/electron-release.yml b/.github/workflows/electron-release.yml index ed7b90f99b..ccfb9903b0 100644 --- a/.github/workflows/electron-release.yml +++ b/.github/workflows/electron-release.yml @@ -107,6 +107,10 @@ jobs: for file in *${{ matrix.ext }}; do [ -f "$file" ] && cp "$file" ../../release-assets/ done + # Windows: also copy portable standalone exe + if [ "${{ matrix.platform }}" = "windows" ]; then + [ -f "OmniRoute.exe" ] && cp OmniRoute.exe ../../release-assets/ + fi - name: Upload artifacts uses: actions/upload-artifact@v4 @@ -160,5 +164,6 @@ jobs: release-assets/*.blockmap release-assets/*.source.tar.gz release-assets/*.source.zip + release-assets/OmniRoute.exe env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/electron/package.json b/electron/package.json index 77746f6669..0aa6b5c1f6 100644 --- a/electron/package.json +++ b/electron/package.json @@ -63,6 +63,12 @@ "arch": [ "x64" ] + }, + { + "target": "portable", + "arch": [ + "x64" + ] } ], "icon": "assets/icon.ico" From 90de0fbf68879a9dedf78bb2d82d9f35d09704d3 Mon Sep 17 00:00:00 2001 From: benzntech Date: Sat, 28 Feb 2026 23:21:39 +0530 Subject: [PATCH 6/7] docs: add installation instructions with macOS Gatekeeper workaround --- electron/README.md | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/electron/README.md b/electron/README.md index 98662eeffd..1b224c7d19 100644 --- a/electron/README.md +++ b/electron/README.md @@ -100,10 +100,48 @@ npm run build:linux Built applications are placed in `dist-electron/`: -- Windows: `.exe` installer (NSIS) -- macOS: `.dmg` installer (universal) +- Windows: `.exe` installer (NSIS) + portable `.exe` +- macOS: `.dmg` installer (Intel + Apple Silicon) - Linux: `.AppImage` +## Installation + +### macOS + +1. Download the latest `.dmg` from the [Releases](https://github.com/diegosouzapw/OmniRoute/releases) page. +2. Open the `.dmg` file. +3. Drag `OmniRoute.app` to the Applications folder. +4. Launch from Applications. + +> ⚠️ **Note:** The app is not signed with an Apple Developer certificate yet. If macOS blocks the app, run: +> ```bash +> xattr -cr /Applications/OmniRoute.app +> ``` +> Or right-click the app → Open → Open (to bypass Gatekeeper on first launch). + +### Windows + +**Installer (Recommended):** +1. Download `OmniRoute.Setup.*.exe` from [Releases](https://github.com/diegosouzapw/OmniRoute/releases). +2. Run the installer. +3. Launch from Start Menu or Desktop shortcut. + +**Portable (No Installation):** +1. Download `OmniRoute.exe` from [Releases](https://github.com/diegosouzapw/OmniRoute/releases). +2. Run directly from any folder. + +### Linux + +1. Download the `.AppImage` from [Releases](https://github.com/diegosouzapw/OmniRoute/releases). +2. Make it executable: + ```bash + chmod +x OmniRoute-*.AppImage + ``` +3. Run: + ```bash + ./OmniRoute-*.AppImage + ``` + ## Features - **Server Readiness** — Waits for health check before showing window From 09a094629c274f5931f411e4e0d059c313aced7c Mon Sep 17 00:00:00 2001 From: benzntech Date: Sat, 28 Feb 2026 23:34:37 +0530 Subject: [PATCH 7/7] fix: include arm64 dmg in release assets - Add explicit pattern for *-arm64.dmg files - Fixes Kilo bot review: *.dmg doesn't match -arm64.dmg --- .github/workflows/electron-release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/electron-release.yml b/.github/workflows/electron-release.yml index ccfb9903b0..2d155566c3 100644 --- a/.github/workflows/electron-release.yml +++ b/.github/workflows/electron-release.yml @@ -159,6 +159,7 @@ jobs: generate_release_notes: true files: | release-assets/*.dmg + release-assets/*-arm64.dmg release-assets/*.exe release-assets/*.AppImage release-assets/*.blockmap