Fix release workflow: move deb config and use matrix.script #2
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build & Release | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| workflow_dispatch: | |
| inputs: | |
| dry_run: | |
| description: 'Build only (skip release creation)' | |
| required: false | |
| default: 'false' | |
| permissions: | |
| contents: write | |
| jobs: | |
| build: | |
| name: Build (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, windows-latest, macos-latest] | |
| include: | |
| - os: ubuntu-latest | |
| script: linux | |
| artifact_glob: | | |
| dist/*.AppImage | |
| dist/*.deb | |
| - os: windows-latest | |
| script: win | |
| artifact_glob: | | |
| dist/*.exe | |
| - os: macos-latest | |
| script: mac | |
| artifact_glob: | | |
| dist/*.dmg | |
| dist/*.zip | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: npm ci | |
| # Linux: install LinuxBuild dependencies so electron-builder can produce .deb / .AppImage | |
| - name: Install Linux build dependencies | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| fakeroot dpkg rpm \ | |
| libgtk-3-0 libnotify4 libnss3 libxss1 libxtst6 \ | |
| xauth xvfb libasound2t64 ffmpeg \ | |
| python3 python3-venv python3-pip | |
| # Windows: enable long paths for electron-builder | |
| - name: Enable Windows long paths | |
| if: matrix.os == 'windows-latest' | |
| shell: pwsh | |
| run: git config --system core.longpaths true | |
| - name: Build | |
| shell: bash | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # macOS code signing (optional) | |
| CSC_LINK: ${{ secrets.CSC_LINK }} | |
| CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} | |
| # Windows code signing (optional) | |
| CSC_IDENTITY_AUTO_DISCOVERY: 'false' | |
| run: npm run build:${{ matrix.script }} | |
| - name: List build output | |
| if: always() | |
| run: ls -la dist || true | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: opencluely-${{ matrix.os }} | |
| path: ${{ matrix.artifact_glob }} | |
| if-no-files-found: warn | |
| release: | |
| name: Create GitHub Release | |
| needs: build | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Flatten artifacts | |
| run: | | |
| mkdir -p release | |
| find artifacts -type f \( -name '*.dmg' -o -name '*.zip' -o -name '*.exe' -o -name '*.AppImage' -o -name '*.deb' \) -exec cp -v {} release/ \; | |
| ls -la release/ | |
| - name: Generate SHA256 checksums | |
| working-directory: release | |
| run: | | |
| sha256sum * > SHA256SUMS.txt | |
| cat SHA256SUMS.txt | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ github.ref_name }} | |
| name: OpenCluely ${{ github.ref_name }} | |
| draft: false | |
| prerelease: false | |
| generate_release_notes: true | |
| body: | | |
| ## Installation | |
| Choose the artifact for your platform: | |
| | Platform | File | Notes | | |
| |---|---|---| | |
| | **Windows** | `*.exe` | NSIS installer — installs app + adds to Start Menu | | |
| | **Windows** | `*-portable.exe` | Portable, no install required | | |
| | **macOS (Apple Silicon)** | `*-arm64.dmg` | M1/M2/M3 Macs | | |
| | **macOS (Intel)** | `*-x64.dmg` | Older Intel Macs | | |
| | **Linux** | `*.deb` | Debian/Ubuntu — auto-pulls system deps (Python, ffmpeg, GTK) | | |
| | **Linux** | `*.AppImage` | Universal — no install, just chmod +x and run | | |
| ## First Run | |
| On first launch, OpenCluely will create `.env` and open the **Settings** window for you to enter your **Google Gemini API key**. You can paste it in the Settings UI or edit `.env` directly. | |
| ## Optional: Local Whisper | |
| For offline speech recognition, install **Python 3.10+** and **ffmpeg** on your system, then run from the project folder: | |
| ```bash | |
| ./setup.sh --skip-install-system-deps | |
| ``` | |
| See [README.md](https://github.com/TechyCSR/OpenCluely) for full setup details. | |
| ## Checksums | |
| See `SHA256SUMS.txt` attached to this release. | |
| files: | | |
| release/* | |
| fail_on_unmatched_files: false |