fix(update): bundle app-update.yml so electron-updater can install (forge omits it)#2244
Merged
Priyanchew merged 6 commits intoJun 28, 2026
Merged
Conversation
…eedURL electron-forge does not emit app-update.yml; electron-updater requires it at process.resourcesPath to resolve the GitHub release feed. Without it every packaged app threw ENOENT on the first download attempt, making updates detected but never installed. Two-part fix: - forge.config.ts: add postPackage hook that writes app-update.yml into each platform's Resources dir (baked from AO_RELEASE_REPO so fork builds point at the fork, prod at AgentWrapper/agent-orchestrator). - auto-updater.ts: remove setFeedURL + repo() + DEFAULT_RELEASE_REPO; configureFeed now only sets channel + allowDowngrade. electron-updater auto-loads the bundled yml on the first checkForUpdates call. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The postPackage hook wrote app-update.yml into Contents/Resources AFTER osxSign sealed the bundle, so the added file was unsealed and macOS reported the app as "damaged" (codesign: "a sealed resource is missing or invalid"). Generate it in a prePackage hook and ship it via packagerConfig.extraResource, so it is copied into the bundle and signed as part of the seal. The generated app-update.yml is gitignored. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
macos-13 is deprecated and has no runner capacity (multi-hour queues), so the detached release-intel leg never completed. Switch it to the supported macos-15-intel image in both the release and nightly workflows. Now that the Intel leg gets a runner and builds + signs the x64 installer reliably (verified on fork v0.10.10), re-couple it into publish-feed (needs: [release, release-intel]) so latest-mac.yml / nightly-mac.yml always carry the x64 entry and Intel macOS users receive auto-updates. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This was referenced Jun 27, 2026
# Conflicts: # .github/workflows/frontend-release.yml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What / why
Critical auto-update bug: electron-updater detects a release but crashes during download/install with
ENOENT ... Contents/Resources/app-update.yml. electron-forge (unlike electron-builder) never generatesapp-update.yml, which electron-updater requires at runtime. The #2221 design assumedsetFeedURL(...)alone was enough; a real fork build's log disproves it:This affects every forge build, prod included: updates are found but never install.
Fix
forge.config.ts: apostPackagehook writesapp-update.yml(provider github + owner/repo from the existingparseReleaseRepo(AO_RELEASE_REPO)+updaterCacheDirName) into each packaged app's resources dir (mac:<App>.app/Contents/Resources, win/linux:resources/). The repo is baked at build time, so a build auto-updates from whatever repo it was published to.auto-updater.ts: drop the runtimesetFeedURL/repo()override (which read the absentAO_RELEASE_REPOenv and wrongly defaulted to prod in installed apps).configureFeednow only sets channel +allowDowngrade; electron-updater loads the bundledapp-update.yml. This also removes the need for any runtime env to point a fork build at the fork.Verification
update-settingsvitest green.npm run packageis a no-op on the build host, pre-existing). Validated by a fresh fork build: confirmapp-update.ymlis in the.appand an installed older build updates to completion.🤖 Generated with Claude Code