Skip to content

Separate cmux NIGHTLY as standalone app - #164

Merged
lawrencecchen merged 1 commit into
mainfrom
feat-nightly-app
Feb 20, 2026
Merged

lawrencecchen merged 1 commit into
mainfrom
feat-nightly-app

Conversation

@lawrencecchen

Copy link
Copy Markdown
Contributor

Summary

  • cmux NIGHTLY is now a separate app with bundle ID com.cmuxterm.app.nightly, installable alongside the stable cmux release
  • Nightly builds produce cmux-nightly-macos.dmg containing cmux NIGHTLY.app
  • The nightly Sparkle feed URL (releases/download/nightly/appcast.xml) is baked into the app's Info.plist by CI — no in-app channel switching needed
  • Removed the "Receive Nightly Builds" toggle from Settings since nightly users now download the separate app
  • Removed UpdateChannelSettings enum and simplified feedURLString() to just read SUFeedURL from the plist

What changed

File Change
.github/workflows/nightly.yml Rename app to "cmux NIGHTLY", set bundle ID com.cmuxterm.app.nightly, hardcode nightly feed URL, publish as cmux-nightly-macos.dmg
Sources/Update/UpdateDelegate.swift Remove UpdateChannelSettings enum; feedURLString() now reads SUFeedURL directly from Info.plist
Sources/Update/UpdateController.swift Remove nightly channel defaults registration
Sources/cmuxApp.swift Remove "Receive Nightly Builds" toggle and @AppStorage from SettingsView
cmuxTests/CmuxWebViewKeyEquivalentTests.swift Remove UpdateChannelSettingsTests (no longer applicable)

How it works

  • Stable app (cmux): bundle ID com.cmuxterm.app, SUFeedURL → stable appcast (from Info.plist)
  • Nightly app (cmux NIGHTLY): bundle ID com.cmuxterm.app.nightly, SUFeedURL → nightly appcast (injected by CI)
  • Both can be installed side-by-side since they have different bundle IDs
  • Each app checks for updates from its own feed — no user-facing toggle needed

Test plan

  • Verify the nightly workflow runs successfully (trigger via workflow_dispatch with force: true)
  • Confirm the produced DMG contains cmux NIGHTLY.app with bundle ID com.cmuxterm.app.nightly
  • Verify cmux NIGHTLY.app can be installed alongside stable cmux.app
  • Check that the "Updates" section no longer appears in Settings
  • Verify stable cmux still checks for updates from the stable feed

The nightly build is now a distinct app called "cmux NIGHTLY" with
bundle ID com.cmuxterm.app.nightly, allowing side-by-side installation
with the stable release. The nightly appcast URL is baked into the
app's Info.plist by CI, so no in-app channel switching is needed.

- Nightly workflow: rename app to "cmux NIGHTLY", set bundle ID to
  com.cmuxterm.app.nightly, hardcode nightly Sparkle feed URL, publish
  DMG as cmux-nightly-macos.dmg
- Remove "Receive Nightly Builds" toggle from settings
- Remove UpdateChannelSettings enum and simplify feed URL resolution
  to just use SUFeedURL from Info.plist
- Remove UpdateChannelSettingsTests (no longer applicable)
@cmux-agent

cmux-agent Bot commented Feb 20, 2026 •

Copy link
Copy Markdown
Contributor

Preview Videos and Screenshots

Open Workspace (1 hr expiry) · Open Dev Browser (1 hr expiry) · Open Diff Heatmap

Screenshot status is unknown for this run.


Generated by manaflow preview system

@vercel

vercel Bot commented Feb 20, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment Feb 20, 2026 11:44am

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a80a6e0b5d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

UpdateLogStore.shared.append("update channel: \(isNightly ? "nightly" : "stable")")
let usedFallback = feedURL == nil || feedURL?.isEmpty == true
recordFeedURLString(feedURL ?? "https://github.com/manaflow-ai/cmux/releases/latest/download/appcast.xml", usedFallback: usedFallback)
return feedURL

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Return fallback feed URL when SUFeedURL is missing

When SUFeedURL is absent or empty in Info.plist (for example in custom/local builds or misconfigured packaging), this delegate now logs and records the stable fallback URL but still returns feedURL directly, which is nil/empty in that case. Sparkle then receives no usable feed URL and update checks can fail, whereas the previous implementation always returned a concrete fallback URL.

Useful? React with 👍 / 👎.

@lawrencecchen
lawrencecchen merged commit 707be44 into main Feb 20, 2026
8 checks passed
@lawrencecchen
lawrencecchen deleted the feat-nightly-app branch February 20, 2026 11:54
bn-l pushed a commit to bn-l/cmux that referenced this pull request Apr 3, 2026
…low-ai#164)

The nightly build is now a distinct app called "cmux NIGHTLY" with
bundle ID com.cmuxterm.app.nightly, allowing side-by-side installation
with the stable release. The nightly appcast URL is baked into the
app's Info.plist by CI, so no in-app channel switching is needed.

- Nightly workflow: rename app to "cmux NIGHTLY", set bundle ID to
  com.cmuxterm.app.nightly, hardcode nightly Sparkle feed URL, publish
  DMG as cmux-nightly-macos.dmg
- Remove "Receive Nightly Builds" toggle from settings
- Remove UpdateChannelSettings enum and simplify feed URL resolution
  to just use SUFeedURL from Info.plist
- Remove UpdateChannelSettingsTests (no longer applicable)
@coderabbitai coderabbitai Bot mentioned this pull request Sep 22, 2026
3 of 6 tasks

This branch was successfully deployed

1 active deployment
Preview — a80a6e0b Deployed Feb 20, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant