name: Build Electron App on: workflow_call: outputs: appVersion: description: "The version of the app" value: ${{ jobs.build-electron.outputs.app_version }} jobs: build-electron: strategy: fail-fast: false matrix: # IDs: # - seanime-denshi-darwin-arm # - seanime-denshi-darwin-intel # - seanime-denshi-linux # - seanime-denshi-windows include: # For Mac Universal - os: 'macos-latest' id: 'seanime-denshi-darwin-arm64' go_binary_id: 'seanime-server-darwin' # Artifact: go-seanime-server-darwin (contains both arm64 and x86_64) electron_args: '--mac --arm64' # For Intel-based macs - os: 'macos-latest' id: 'seanime-denshi-darwin-x64' go_binary_id: 'seanime-server-darwin' # Artifact: go-seanime-server-darwin (contains both arm64 and x86_64) electron_args: '--mac --x64' # For Linux - os: 'ubuntu-latest' id: 'seanime-denshi-linux-x64' go_binary_id: 'seanime-server-linux' # Artifact: go-seanime-server-linux (contains x86_64) electron_args: '--linux' # For Windows - os: 'windows-latest' id: 'seanime-denshi-windows-x64' go_binary_id: 'seanime-server-windows' # Artifact: go-seanime-server-windows (contains x86_64) electron_args: '--win' runs-on: ${{ matrix.os }} outputs: app_version: ${{ steps.get-version.outputs.version }} steps: - name: Checkout code 📂 uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js 📦 uses: actions/setup-node@v4 with: node-version: '20' - name: Get package version 📦 id: get-version run: | NODE_VERSION=$(node -p "require('./seanime-denshi/package.json').version") echo "version=$NODE_VERSION" >> $GITHUB_OUTPUT shell: bash # Install dependencies - name: Install dependencies (Ubuntu) 📦 if: matrix.os == 'ubuntu-latest' run: | sudo apt-get update sudo apt-get install -y libgtk-3-dev libnss3-dev libxss-dev libasound2-dev # Download the web folders - name: Download web folder artifact 📥 uses: actions/download-artifact@v4 with: name: web-denshi path: web-denshi # Move web-denshi folder into seanime-denshi - name: Move web-denshi folder 🚚 run: mv web-denshi seanime-denshi/ shell: bash - name: Ensure binaries folder exists (UNIX) if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest' run: mkdir -p ./seanime-denshi/binaries - name: Ensure binaries folder exists (Windows) if: matrix.os == 'windows-latest' run: mkdir .\seanime-denshi\binaries # Download the server binaries based on matrix.go_binary_id - name: Download server binaries 📥 uses: actions/download-artifact@v4 with: name: go-${{ matrix.go_binary_id }} path: ./seanime-denshi/binaries # Extract server binaries - name: Extract server binaries (macOS x64) 📂 if: matrix.os == 'macos-latest' && matrix.id == 'seanime-denshi-darwin-x64' # Extracts seanime-server-darwin-arm64 and seanime-server-darwin-amd64 # Only keep seanime-server-darwin-amd64 run: | tar -xf ./seanime-denshi/binaries/binaries-${{ matrix.go_binary_id }}.tar -C ./seanime-denshi/binaries # Remove the other binary rm -rf ./seanime-denshi/binaries/seanime-server-darwin-arm64 - name: Extract server binaries (macOS arm64) 📂 if: matrix.os == 'macos-latest' && matrix.id == 'seanime-denshi-darwin-arm64' # Extracts seanime-server-darwin-arm64 and seanime-server-darwin-amd64 # Only keep seanime-server-darwin-arm64 run: | tar -xf ./seanime-denshi/binaries/binaries-${{ matrix.go_binary_id }}.tar -C ./seanime-denshi/binaries # Remove the other binary rm -rf ./seanime-denshi/binaries/seanime-server-darwin-amd64 - name: Extract server binaries (Linux) 📂 if: matrix.os == 'ubuntu-latest' && matrix.id == 'seanime-denshi-linux-x64' # Extracts seanime-server-linux-amd64 run: tar -xf ./seanime-denshi/binaries/binaries-${{ matrix.go_binary_id }}.tar -C ./seanime-denshi/binaries - name: Extract server binaries (Windows) 📂 if: matrix.os == 'windows-latest' # Extracts seanime-server-windows-amd64 run: 7z x ".\seanime-denshi\binaries\binaries-${{ matrix.go_binary_id }}.zip" "-o./seanime-denshi/binaries/" # Copy app icon - name: Copy app icon 📝 run: | mkdir -p ./seanime-denshi/assets cp ./seanime-desktop/src-tauri/app-icon.png ./seanime-denshi/assets/ shell: bash # Install and build - name: Install and build 📦️ run: | cd seanime-denshi npm install npm run build -- ${{ matrix.electron_args }} shell: bash env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Upload the artifacts - name: Upload Electron artifacts 📤 uses: actions/upload-artifact@v4 with: name: electron-${{ matrix.id }} path: | ./seanime-denshi-* ./seanime-denshi/dist/*.yml