name: SCREEN-008 release candidate on: workflow_dispatch: permissions: contents: read jobs: build: strategy: fail-fast: false matrix: include: - runner: macos-15-intel target: mac arch: x64 - runner: macos-15 target: mac arch: arm64 - runner: windows-2025 target: win arch: x64 - runner: windows-11-arm target: win arch: arm64 - runner: ubuntu-24.04 target: linux arch: x64 - runner: ubuntu-24.04-arm target: linux arch: arm64 runs-on: ${{ matrix.runner }} env: CSC_IDENTITY_AUTO_DISCOVERY: 'false' ELECTRON_BUILDER_COMPRESSION_LEVEL: '1' steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '24.15.0' cache: npm - name: Install ffmpeg on macOS if: runner.os == 'macOS' run: brew install ffmpeg - name: Install ffmpeg on Linux if: runner.os == 'Linux' run: sudo apt-get update && sudo apt-get install -y ffmpeg xvfb - name: Install ffmpeg on Windows if: runner.os == 'Windows' shell: pwsh run: | choco install ffmpeg -y --no-progress "C:\ProgramData\chocolatey\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - run: npm ci - run: npx --no-install install-electron --no - run: npm run type-check - run: npm run lint - run: npm run lint:css - run: npm test - run: npm run media:generate - name: Package Linux archive if: runner.os == 'Linux' run: npm run dist -- --linux --${{ matrix.arch }} --publish never - name: Package macOS or Windows archive if: runner.os != 'Linux' run: npm run dist -- --${{ matrix.target }} --${{ matrix.arch }} --publish never - name: Test packaged application on Linux x64 if: matrix.target == 'linux' && matrix.arch == 'x64' run: xvfb-run -a npm run smoke:packaged - uses: actions/upload-artifact@v4 with: name: screen-${{ matrix.target }}-${{ matrix.arch }} path: | release/*.zip release/*.tar.gz release/*.build-info.json release/SHA256SUMS-* if-no-files-found: error