Commit graph

43 commits

Author SHA1 Message Date
Lawrence Chen
7916b2d418
Fix Xcode Cloud UI tests by running TestAction in Debug (#672)
* Set cmux TestAction to Debug for UI tests

* Broaden XCTest detection for debug launch gate

* Fix AutomationSocketUITests launch hang in CI

* Stabilize CI Swift package resolution for test jobs

* Stabilize Xcode Cloud UI test focus and socket handling

* Add Xcode Cloud pre-xcodebuild submodule bootstrap

* Harden Xcode Cloud bonsplit bootstrap fallback
2026-02-28 01:48:49 -08:00
Lawrence Chen
be89812bea
Harden CI unit tests against SwiftPM artifact flakes (#682) 2026-02-28 00:38:46 -08:00
Lawrence Chen
ae3bcd7eea
Set up full test suite in CI and Xcode Cloud (#447)
* Set up full test suite in CI and Xcode Cloud

Add build-ghosttykit.yml workflow to pre-build and publish
GhosttyKit.xcframework as a GitHub release on manaflow-ai/ghostty,
keyed by submodule SHA. Add ci_scripts/ci_post_clone.sh for Xcode
Cloud to download the pre-built xcframework with retry logic. Create
cmux-ci scheme that runs both cmuxTests and cmuxUITests. Switch the
CI tests job from running a single UI test class to the full suite.

* Run unit tests + single UI test class on self-hosted runner

The self-hosted runner can't launch the full app for UI tests (no GUI
session), so run all unit tests via cmux-unit scheme and keep the
original UpdatePillUITests as a smoke test. Full UI test suite runs
on Xcode Cloud which has proper macOS GUI support.

* Handle expected test failures in unit tests step

xcodebuild returns exit code 65 even for expected failures
(XCTExpectFailure). Parse the summary line to only fail the CI job
when there are unexpected failures.
2026-02-27 04:18:26 -08:00
Lawrence Chen
c7eec9fbb5
Pin create-dmg version in signed build workflows (#401)
* Pin create-dmg version in release workflows

* Bump pinned create-dmg to 8.0.0
2026-02-25 19:30:10 -08:00
Lawrence Chen
4d2fd30143 Fix UI test hang: bypass launch guard for XCUITest apps
XCUITest launches the app as a separate process that doesn't inherit
XCTest env vars (XCTestConfigurationFilePath, etc.), so
isRunningUnderXCTest() returns false. The app then hits
shouldBlockUntaggedDebugLaunch() and exits with code 64, causing the
test runner to hang waiting for the app to launch.

Fix: detect CMUX_UI_TEST_* env vars set via XCUIApplication.launchEnvironment
and skip the launch guard. Also revert the failed CMUX_TAG ci.yml workaround.
2026-02-24 23:28:34 -08:00
Lawrence Chen
77a59b5743 Fix UI test hang: set CMUX_TAG for debug launch guard
Debug builds refuse to launch without CMUX_TAG to prevent accidental
untagged launches. XCUITest launches the app as a separate process
without XCTest env vars, so the app's isRunningUnderXCTest() check
fails and the app calls exit(64). The test runner then waits forever
for the app to report back. Set CMUX_TAG=ci in the CI env.
2026-02-24 23:19:04 -08:00
Lawrence Chen
79266ee03b Fix UI test hang: remove ad-hoc signature before test launch
The Mac Mini runner has no dev certificates, so xcodebuild produces
an ad-hoc signed app. Gatekeeper rejects it, causing XCUITest to hang
forever at app.launch(). Split build and test phases, strip the ad-hoc
signature between them so the app can launch.
2026-02-24 23:15:11 -08:00
Lawrence Chen
fc3e3a4d7d Pin all GitHub Actions to full commit SHAs
Org policy now requires actions pinned to immutable SHAs instead of
mutable version tags. Pin actions/checkout, actions/github-script,
softprops/action-gh-release, and oven-sh/setup-bun across all workflows.
2026-02-24 22:21:40 -08:00
Lawrence Chen
f3fc880468 Guard self-hosted CI from fork pull requests 2026-02-23 14:58:17 -08:00
Lawrence Chen
d08f28d770
Merge pull request #83 from manaflow-ai/perf/portal-hosting-selected-mount
Reduce terminal input latency via portal hosting + selected-only workspace mounting
2026-02-18 22:31:45 -08:00
Lawrence Chen
699db2a9ed
Fix menubar lag on M1 Macs by using universal xcframework target (#93)
Remove -Dxcframework-target=native from CI and release workflows,
defaulting to universal (matching upstream ghostty). The native target
produces a macos-arm64 xcframework slice that causes Xcode to link the
final binary differently (~70KB more __text), resulting in menubar and
right-click lag on M1 Max. The arm64 static libraries are byte-for-byte
identical between native and universal builds - the difference is purely
in how Xcode resolves the xcframework slice.
2026-02-18 22:09:13 -08:00
Lawrence Chen
442eb1f01d Rename test targets to cmuxTests and cmuxUITests 2026-02-18 21:19:56 -08:00
Lawrence Chen
915e34bd38
Revert xcframework-target removal that broke CI (#86) (#90)
The -Dxcframework-target flag controls platform slices (native=macOS
only, universal=macOS+iOS), not CPU microarchitecture. Removing it
caused CI to attempt iOS builds which fail due to missing Metal
iOS toolchain on the runner.
2026-02-18 20:37:59 -08:00
Austin Wang
65ac29d827
Fix zsh git branch refresh race after cwd change (#71)
* Fix zsh git branch refresh race after cwd change

* Clarify intentional duplicate cwd check in git refresh path

* Add Metal Toolchain download step to CI and release workflows

Fixes build failure when compiling Metal shaders for iOS xcframework
targets — the self-hosted runner needs `xcodebuild -downloadComponent
MetalToolchain` installed before `xcrun metal` can run.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 20:36:27 -08:00
Lawrence Chen
d24030db58
Use universal xcframework target instead of native (#86)
The self-hosted runner (M4 Mac Mini) was building GhosttyKit with
-Dxcframework-target=native, producing M4-tuned binaries. This caused
menubar and right-click lag on M1 machines. Dropping the flag defaults
to universal, which works well across all Apple Silicon chips.
2026-02-18 20:21:34 -08:00
Lawrence Chen
299a5eb3d8 ci: run ui tests directly on self-hosted macmini 2026-02-14 03:00:26 -08:00
Lawrence Chen
0dd3252980 CI: add cmux-macmini as UI test VM fallback 2026-02-11 18:09:45 -08:00
Lawrence Chen
2013be43ef CI: allow cmux-vm host/user via GitHub secrets 2026-02-10 17:29:38 -08:00
Lawrence Chen
de1b2e1c37 CI: require reachable cmux-vm; fail fast instead of slow scan 2026-02-10 17:28:01 -08:00
Lawrence Chen
7022517b47 CI: use dhcp lease IPs as vm candidates 2026-02-10 17:16:50 -08:00
Lawrence Chen
023abc48e0 CI: fix yaml; parse dhcp leases with awk 2026-02-10 17:06:02 -08:00
Lawrence Chen
110715b09c CI: derive vm IP from /var/db/dhcpd_leases 2026-02-10 17:04:39 -08:00
Lawrence Chen
bc9f1ff663 CI: bound vm discovery time; faster ssh probes 2026-02-10 16:54:26 -08:00
Lawrence Chen
6612b389c6 CI: fix vm discovery scan under set -u 2026-02-10 16:45:32 -08:00
Lawrence Chen
d7475a2356 CI: make vm subnet scan compatible with pipefail 2026-02-10 16:44:34 -08:00
Lawrence Chen
4bca80affe CI: discover vm via subnet scan when host alias missing 2026-02-10 16:38:06 -08:00
Lawrence Chen
7e1653a3ca CI: fix vm host detection quoting 2026-02-10 16:36:26 -08:00
Lawrence Chen
a5a29962e5 CI: find cmux-vm host via ssh config; fail if unreachable 2026-02-10 16:33:51 -08:00
Lawrence Chen
e72916a77d CI: require UI tests via vm; robust ssh opts 2026-02-10 16:32:10 -08:00
Lawrence Chen
0d950cb891 CI: run mac UI tests only in cmux-vm 2026-02-10 16:27:29 -08:00
Lawrence Chen
aa4c7ceede CI: gate mac UI tests on real GUI session 2026-02-10 16:25:44 -08:00
Lawrence Chen
635f8fe223 Fix CI: handle app activation failure in UI test runner
Add "Failed to activate application" to the retry/skip patterns so
the self-hosted runner gracefully skips UI tests when the app can't
come to foreground (Running Background state).
2026-02-10 16:15:24 -08:00
Lawrence Chen
5febb66873 Update landing page: switch to Bun, add view transitions and UI polish
- CI: replace Node/npm with Bun
- Add view-transition animations for theme toggle
- Set html background for flash-free theme switches
- UI refinements to download button, brew command, and layout
- Replace package-lock.json with bun.lock
2026-02-09 22:01:53 -08:00
Lawrence Chen
d25f14a79f Add landing page (web/) with Next.js + Tailwind
- Minimal centered layout with Geist sans font
- Typing animation cycling through agent names
- Light/dark mode toggle via next-themes
- Download for Mac button linking to latest DMG
- Feature list, GitHub + Docs footer links
- Meta tags and Open Graph for SEO
- CI: add web typecheck job (tsc --noEmit)
2026-02-09 20:51:27 -08:00
Lawrence Chen
20c62b3b9a
Fix CI race condition on self-hosted runner (#19)
* Fix zsh ZDOTDIR wrapper + log parsing with -- messages

* Fix CI race condition: serialize self-hosted builds with concurrency group

Two workflows racing on the same self-hosted runner caused DerivedData
corruption (release's rm -rf nuked DerivedData while CI was building).
Add shared concurrency group and scope DerivedData cleanup to project.
2026-02-06 22:32:14 -08:00
Lawrence Chen
7c8ac4c887 Fix CI build cache error by cleaning DerivedData
Add a step to remove stale GhosttyTabs DerivedData before building
to prevent the "cannot open constant extraction protocol list input
file" error that occurs with incremental builds on self-hosted runners.
2026-01-29 17:55:02 -08:00
Lawrence Chen
66a87dc25e Handle UI test retry without exiting early 2026-01-28 15:28:42 -08:00
Lawrence Chen
f070a72260 Fix CI UI test log handling 2026-01-28 15:20:22 -08:00
Lawrence Chen
e1cf5cd33d Skip UI tests when automation unavailable 2026-01-28 15:17:38 -08:00
Lawrence Chen
4b01de1ba9 Avoid sudo in CI UI tests 2026-01-28 15:09:30 -08:00
Lawrence Chen
6067aa1dbd Prepare 1.3.0 and harden CI UI tests 2026-01-28 15:04:41 -08:00
Lawrence Chen
d76ccaa531 Build GhosttyKit.xcframework in CI 2026-01-28 04:51:44 -08:00
Lawrence Chen
03ee628fb6 Add mock update feed UI tests 2026-01-28 03:22:37 -08:00