Skip to content

Release the Mac app from CI's build, and keep pull requests off the scarce macOS runners - #241

Open
itz4blitz wants to merge 1 commit into
mainfrom
ci/faster-macos
Open

itz4blitz wants to merge 1 commit into
mainfrom
ci/faster-macos

Conversation

@itz4blitz

Copy link
Copy Markdown
Collaborator

What changed and why

Shipping v0.2.66 took 33 minutes from tag to published, and two thirds of that went to macOS. Release rebuilt the Mac app it was supposed to reuse from CI, and the iOS build waited 24 minutes for a macOS runner, because the org gets only two at a time. This PR fixes the first and stops pull requests from taking macOS runners for tests.

  • Release reuses CI's Mac build. reuse-binaries.sh looked for a tinyclient.app folder. CI uploads target/release/tinyclient.app, and upload-artifact keeps only what's inside it, so the download is Contents/ with no folder around it. The lookup never matched, and every release compiled macOS again: 13 of the macOS job's 14 minutes in v0.2.66. It now finds Contents/MacOS. Windows and both Linux jobs already reused CI's builds and took about 1 minute each.
  • macOS tests run on main, not on pull requests.
    • A PR tests on Linux and Windows.
    • Main still tests on all three, so a Mac-only break shows up on main before the next release ships it.
    • The window's own tests build only with the gui feature, which only the Mac job turned on. On a PR, the Linux job turns it on instead, so those tests still run before merge.

Type

  • feature
  • fix
  • perf
  • refactor
  • chore
  • docs

Platforms

  • windows
  • macos
  • linux
  • android
  • ios

Proof

CI change, no app behaviour.

  • Reuse script: I ran the new reuse-binaries.sh against the real tinyclient-macos artifact from v0.2.66's CI run (43071835317). The old script found nothing in it. The new one copies all four Mach-O programs. Locally it still reported found=false, but only on the executable-bit check, because Windows has no executable bits. On a macOS runner the script's chmod +x sets them.
  • Matrix and gui tests: this PR's own CI is the test. It should show no test (macos-latest), and test (ubuntu-22.04) running with the gui feature.
  • Release reuse: the next release's macOS job should log using tinyclient-macos from CI run … and take about 2 minutes.

Compatibility

CI only. No required status check names test (macos-latest).

Risk and rollback

  • Mac-only breaks: a break only a Mac shows now turns main red after merge, instead of failing the PR. The release waits for green CI on main, so it still can't ship.
  • gui tests on Linux: if they need something the Linux runner lacks, this PR's CI shows it.
  • Rollback: revert the commit.

Release note

None (CI only).

🤖 Generated with Claude Code

…carce macOS runners

The release rebuilt the macOS app from scratch every time: reuse-binaries.sh looked for a
tinyclient.app folder, but upload-artifact keeps only what is inside the folder it is given,
so the download is Contents/ alone. v0.2.66's macOS job spent 13 of its 14 minutes compiling
what CI had already built. It now looks for Contents/MacOS, as Windows and Linux already reuse.

The org gets two macOS runners at a time, shared by CI's tests and package, the iOS build and
the release; v0.2.66's iOS build waited 24 minutes for one. A pull request now tests on Linux
and Windows only, and main adds macOS. The window's tests, which build only with the gui
feature, run on Linux for a pull request so they are not lost with the Mac.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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