name: Build and Package on: push: branches: [ main ] pull_request: branches: [ main ] workflow_dispatch: jobs: build-web: name: Build Web Application runs-on: ubuntu-latest steps: - name: Checkout code 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 - name: Build web application run: npm run build - name: Upload web build artifacts uses: actions/upload-artifact@v4 with: name: web-build path: dist/ retention-days: 7 build-electron: name: Build Electron - ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] steps: - name: Checkout code 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 - name: Package Electron app run: npm run package - name: Create distributables run: npm run make - name: Upload Windows artifacts if: matrix.os == 'windows-latest' uses: actions/upload-artifact@v4 with: name: electron-windows path: | out/make/squirrel.windows/**/*.exe out/make/squirrel.windows/**/*.nupkg retention-days: 30 - name: Upload macOS artifacts if: matrix.os == 'macos-latest' uses: actions/upload-artifact@v4 with: name: electron-macos path: | out/make/zip/**/*.zip retention-days: 30 - name: Upload Linux artifacts if: matrix.os == 'ubuntu-latest' uses: actions/upload-artifact@v4 with: name: electron-linux path: | out/make/deb/**/*.deb out/make/rpm/**/*.rpm retention-days: 30