Skip to content

Ship dual-arch releases with OTA verification#495

Merged
BunsDev merged 3 commits intomainfrom
okcode/streamlined-ota-release
Apr 25, 2026
Merged

Ship dual-arch releases with OTA verification#495
BunsDev merged 3 commits intomainfrom
okcode/streamlined-ota-release

Conversation

@BunsDev
Copy link
Copy Markdown
Member

@BunsDev BunsDev commented Apr 25, 2026

Summary

  • Add macOS x64 release artifacts and merge updater manifests so OTA updates work across both macOS architectures.
  • Tighten release gating: stable Windows builds now require Azure Trusted Signing, while prereleases can still publish unsigned artifacts.
  • Improve Codex session reliability by handling thread-start failures, cleaning stale session/turn state, and treating resume timeouts as recoverable.
  • Add remote folder browsing and shallow directory listing support for web sessions, plus related UI updates in the chat, sidebar, and onboarding flows.
  • Expand provider health probing so Codex is considered ready when app-server turns can start even if codex login status is unauthenticated.

Testing

  • bun fmt
  • bun lint
  • bun typecheck
  • Added and updated unit/integration coverage for release shipping, provider health, session recovery, projection cleanup, workspace directory listing, and chat interrupt behavior.
  • Not run: manual browser verification of the served app endpoint in this turn.

- add one-shot release shipping command
- build and validate macOS arm64 and x64 artifacts
- merge and verify published macOS updater manifests
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 25, 2026

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

Project Deployment Actions Updated (UTC)
okcode-marketing Ready Ready Preview Apr 25, 2026 8:08am
v0-compute-the-platform-to-build Ready Ready Preview, Open in v0 Apr 25, 2026 8:08am

- Attach the original parse error as the cause
- Use `toSorted` when selecting the latest workflow run
- Keep release ship tests aligned with shared asset fixtures
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds an end-to-end release shipping command and tightens the desktop release contract so macOS OTA updates work across both arm64 and x64, with CI enforcing completeness and Windows stable signing requirements.

Changes:

  • Require dual-arch macOS (arm64 + x64) DMG/ZIP/blockmap artifacts and merge macOS updater manifests before publishing.
  • Add release:ship orchestration script to run local preflight + prepare-release, wait for the release.yml workflow, then verify the published GitHub Release (including merged latest-mac.yml OTA coverage).
  • Update release docs/playbooks and CI gating (stable Windows builds must have Azure Trusted Signing secrets configured).

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
scripts/validate-release-assets.ts Tightens required release asset rules to enforce macOS dual-arch OTA artifacts.
scripts/validate-release-assets.test.ts Expands validation tests to cover missing macOS x64 OTA assets.
scripts/release-smoke.ts Updates smoke fixtures/assertions for dual-arch macOS and merged manifest behavior.
scripts/release-ship.ts New release shipping orchestrator + published-release verification (assets + merged latest-mac.yml).
scripts/release-ship.test.ts Adds coverage for workflow-run selection, publish verification, and orchestration call order.
scripts/prepare-release.ts Updates rollout checklist wording to reflect dual-arch macOS as part of the main train.
package.json Adds release:ship script entrypoint.
docs/superpowers/plans/2026-04-25-release-ship-and-ota.md Documents the implementation plan for release shipping + OTA validation.
docs/release.md Updates release process docs to require both macOS architectures and describe release:ship.
.github/workflows/release.yml Adds macOS x64 to the matrix, merges macOS manifests, and enforces Windows stable signing secrets.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread scripts/release-ship.ts Outdated
Comment thread scripts/release-ship.ts
Comment on lines +265 to +276
case "--repo":
repo = argv[index + 1] ?? repo;
index += 1;
break;
case "--timeout-ms":
timeoutMs = Number(argv[index + 1] ?? timeoutMs);
index += 1;
break;
case "--poll-interval-ms":
pollIntervalMs = Number(argv[index + 1] ?? pollIntervalMs);
index += 1;
break;
Copy link

Copilot AI Apr 25, 2026

Choose a reason for hiding this comment

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

parseArgs coerces --timeout-ms / --poll-interval-ms with Number(...) but never validates the result or ensures a value is actually provided. Passing a non-numeric value (or omitting the next token) can yield NaN, causing the workflow wait loop to behave incorrectly and producing confusing errors like Timed out after NaNms. Please validate that flag values are present, finite numbers, and > 0 (or fall back to defaults) and throw a clear error otherwise.

Copilot uses AI. Check for mistakes.
@BunsDev
Copy link
Copy Markdown
Member Author

BunsDev commented Apr 25, 2026

@copilot apply changes based on the comments in this thread

…gs in release-ship

Agent-Logs-Url: https://github.com/OpenKnots/okcode/sessions/283afe47-b626-4d9f-9e8e-ae1e3c8ff9bd

Co-authored-by: BunsDev <68980965+BunsDev@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 25, 2026

@copilot apply changes based on the comments in this thread

Applied both review findings in commit 086a582:

  1. Path resolution (lines 174-182): runPreReleaseValidate and runPrepareRelease now resolve script paths from import.meta.url via a module-level repoRoot constant (same pattern as release-smoke.ts) and pass cwd: repoRoot — making them location-independent regardless of the caller's working directory.

  2. Numeric flag validation (lines 265-276): --timeout-ms and --poll-interval-ms now check that the next token is present, Number.isFinite, and > 0 before accepting the value, throwing a descriptive error (e.g., --timeout-ms requires a positive finite number (got: abc)) instead of silently producing NaN.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants