ci: add desktop Electron builds to GitHub Actions with unified production gate#14532
ci: add desktop Electron builds to GitHub Actions with unified production gate#14532dylanjeffers wants to merge 2 commits into
Conversation
…tion gate Desktop (Electron) builds were never migrated when web CI moved from CircleCI to GitHub Actions. This restores them as three jobs — mac, win, linux — behind a single `production-gate` job holding the `production` environment, so one approval releases web and all three desktop platforms instead of the four separate approval gates CircleCI had. web-deploy now depends on production-gate and no longer declares the environment itself. web-deploy-release-candidate is unchanged and still auto-deploys without approval. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
|
Dependency limit exceeded — report not shown. This pull request scan exceeded the 10,000-dependency limit applied to this scan, so the results are incomplete and may be inaccurate. To avoid reporting false positives, Socket has not posted a report. Upgrade your plan to raise the dependency limit and get complete reports, or view the partial scan in the dashboard. Socket is always free for open source. If this is a non-commercial open source project, contact us to request a free Team account. |
Switch @electron/notarize from the sunset Apple ID + app-specific password flow to notarytool with an App Store Connect API key, reusing the APP_STORE_CONNECT_API_KEY_* secrets the mobile workflow already uses so no new secrets are needed. The .p8 key content is written to a 0600 temp file since notarytool takes a path, and removed afterwards. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
What
Desktop (Electron) builds were never migrated when web CI moved from CircleCI to GitHub Actions (~#13560). This adds them back, and consolidates the release approval.
Single approval gate. A new
production-gatejob holdsenvironment: productionand runs afterweb-build+web-check-ssr-bundlesize. Approving it releases web and all three desktop platforms. The old CircleCI pipeline had four separate approval gates (web, mac, win, linux) — now it's one.production-gate— new, holds theproductionenvironmentweb-deploy— nowneeds: [production-gate],environment:block removed (the gate owns it)desktop-build-mac—macos-latestdesktop-build-win—ubuntu-latestinelectronuserland/builder:18-winedesktop-build-linux—ubuntu-latestinelectronuserland/builderweb-deploy-release-candidate— unchanged, still auto-deploys toreleasewith no approvalEach desktop job downloads the existing
buildsartifact, runs the per-platform publish script, and posts the same Slack deploy message the CircleCI jobs did.These were in CircleCI's "Audius Client" context and need to exist in Settings → Secrets and variables → Actions:
APPLE_IDAPPLE_ID_PASSWORDASC_PROVIDERteamId)CSC_LINKCSC_KEY_PASSWORDAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY(S3 publish) andSLACK_DAILY_DEPLOY_WEBHOOKare already used by existing jobs.Notes on deviations from the original plan
Three things came out of reading
packages/web/scripts/dist.jsand the deleted CircleCI config:Per-platform npm scripts. Used
dist:mac-publish-production/dist:win-publish-production/dist:linux-publish-productionrather thandist-publish-production -- --mac.dist-publish-productionalready expands to--mac --win --linux, so appending--macwould not narrow it — every job would try to build all three platforms.No
mv build-production build.dist.jsreadsbuild-productiondirectly (PRODUCTION_BUILD_DIR), so the artifact is downloaded in place. The old CircleCIweb-distributecommand had no move step either. Renaming would break the Electron packaging.setup-nodeinside the containers. The repo's.npmrcsetsengine-strict=truewithnode >=24.10.0;electronuserland/builder:18-wineships Node 18, sonpm ciwould hard-fail without it.Also carried over from CircleCI's mac job: Python 3.11 (node-gyp needs
distutils, removed in 3.12+) and thedmg-licenseinstall required to produce the.dmg.Test plan
The desktop jobs are
if: github.ref == 'refs/heads/main', so they don't run on this PR — first real exercise is the next production release after merge. Verified locally: YAML parses and everyneeds:reference resolves.🤖 Generated with Claude Code