name: Build Electron Apps on: workflow_dispatch: push: branches: ["main", "electron"] paths: - 'frontend/**' - 'package.json' - 'package-lock.json' - 'frontend/electron/**' - '.github/workflows/build.yml' jobs: build: name: Build (${{ matrix.os }}) runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] steps: - name: Checkout uses: actions/checkout@v4 - name: Force npm to use Bash if: runner.os == 'Windows' run: npm config set script-shell "C:\Program Files\Git\bin\bash.exe" - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '24' - name: Cache npm (Linux/macOS) if: runner.os != 'Windows' uses: actions/cache@v4 with: path: ~/.npm key: npm-${{ runner.os }}-node-24-${{ hashFiles('package.json') }} restore-keys: | npm-${{ runner.os }}-node-24- - name: Cache npm (Windows) if: runner.os == 'Windows' uses: actions/cache@v4 with: path: ~\AppData\Local\npm-cache key: npm-${{ runner.os }}-node-24-${{ hashFiles('package.json') }} restore-keys: | npm-${{ runner.os }}-node-24- - name: Install root deps (no scripts) run: npm install --ignore-scripts --no-audit --no-fund - name: Install Electron Forge deps run: npm run frontend:electron:dependencies - name: Build Electron app shell: bash run: npm run build:electron - name: Upload artifact uses: actions/upload-artifact@v4 with: name: fromchat-${{ runner.os }} path: | frontend/electron/forge/out/** if-no-files-found: error