name: Manual Windows Release on: workflow_dispatch: jobs: build-windows: runs-on: windows steps: - name: Checkout repository uses: actions/checkout@v4 # Node 20 should be preinstalled on the Windows host runner; skipping setup-node avoids 7zip download issues. - name: Verify Node.js run: node -v - name: Install electron-app dependencies working-directory: electron-app run: npm ci - name: Create production .env file working-directory: electron-app run: | echo "WS_URL=${{ secrets.WS_URL }}" > .env echo "API_URL=${{ secrets.API_URL }}" >> .env echo "NODE_ENV=production" >> .env - name: Verify icon file exists working-directory: electron-app run: | if (Test-Path "resources/icons/icon.ico") { Write-Host "Icon file found" Get-Item "resources/icons/icon.ico" | Select-Object FullName, Length } else { Write-Error "Icon file not found!" exit 1 } - name: Build TypeScript working-directory: electron-app run: npm run build - name: Build Windows portable executable (skip signing) working-directory: electron-app env: CSC_IDENTITY_AUTO_DISCOVERY: false run: npx electron-builder --win portable --config electron-builder.yml - name: Upload Windows portable artifact uses: actions/upload-artifact@v4 with: name: rmtPocketWatcher-Windows-Portable path: electron-app/release/rmtPocketWatcher-*.exe retention-days: 7