Skip to content

perf(ci): release and deploy checkouts skip the iOS terminal archives - #28649

Closed
only21mil wants to merge 3 commits into
pingdotgg:mainfrom
only21mil:fix/audit-m058
Closed

only21mil wants to merge 3 commits into
pingdotgg:mainfrom
only21mil:fix/audit-m058

Conversation

@only21mil

@only21mil only21mil commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

Problem

The repo vendors two iOS-only libghostty-fat.a archives under apps/mobile/modules/t3-terminal/Vendor/, 49.5 MB on disk together. #20044 stopped the CI jobs from checking them out, but the release workflow's jobs, the desktop builds it calls, and the Windows test, relay preview and web preview workflows still fetch and write both archives on every run, though none of them builds the iOS app.

Change

The exclusion line ci.yml already uses, !/apps/mobile/modules/t3-terminal/Vendor/**/*.a, is added right after !/.repos/ in every remaining whole-repo sparse checkout outside the mobile workflows: 13 in release.yml, the Windows test, relay and web preview workflows, and the hand-written git sparse-checkout set steps in release-desktop.yml and desktop-macos-preview.yml. None of these jobs reads the archives: the only consumer is T3TerminalNative.podspec, which runs in the iOS build. Those two fetch with a hand-written git fetch and no blob filter, so in those two of the eight files the line saves the disk write but not the download.

Scope

No issue: this is a focused CI maintenance change that applies an existing maintainer pattern from #20044 to the equivalent checkouts it did not cover. It changes no product behavior. Every whole-repo checkout that never builds iOS gets the line, and mobile workflows are left alone.

Verification

Fork run 43187910073, GitHub-hosted Ubuntu and Windows, three times each: both depth-1 checkout forms, main's patterns against this line, at dd165bbb97 (bcd2981108 plus that workflow). Every pair: 2 fewer files, exactly 49,489,024 fewer bytes written. actions/checkout never downloads the two blobs: packs 10,941 to 10,978 KiB (about 10.7 MiB) smaller. Hand-written packs stay 119,517 to 119,528 KiB.

PROOF form=actions-checkout variant=before os=ubuntu-24.04 attempt=1 head=dd165bbb97d2c35d0280617daca95d95b9b3daa3 git=2.56.0 checked_out_files=7776 worktree_bytes=192714624 vendor_a_files=2 size_pack_kib=62911 blob_ios_arm64_simulator=present blob_ios_arm64=present clock_to_after_checkout_s=12.38
PROOF form=actions-checkout variant=after os=ubuntu-24.04 attempt=1 head=dd165bbb97d2c35d0280617daca95d95b9b3daa3 git=2.56.0 checked_out_files=7774 worktree_bytes=143225600 vendor_a_files=0 size_pack_kib=51970 blob_ios_arm64_simulator=absent blob_ios_arm64=absent clock_to_after_checkout_s=10.81

Not checked:

  • A real run of release.yml, release-desktop.yml or the preview and deploy workflows. They need release secrets or labels, so the first run after merge is their first end-to-end check.
  • Timings on the repository's own runners: only byte and file counts carry over from GitHub-hosted ones.
Change in full and every check

The exclusion line ci.yml already uses, !/apps/mobile/modules/t3-terminal/Vendor/**/*.a, is added right after !/.repos/ in every remaining whole-repo sparse checkout outside the mobile workflows:

  • the 13 whole-repo checkouts in release.yml (preflight through announce). publish_cli and deploy_web now check out only three files on main, so they need no line
  • windows-tests.yml, deploy-relay.yml, relay-preview.yml, relay-preview-cleanup.yml (2) and web-preview.yml
  • the hand-written git sparse-checkout set step in release-desktop.yml (the 6 desktop build jobs) and in desktop-macos-preview.yml

The headers, Info.plist and VERSION stay checked out. None of these jobs reads the archives: the only consumer is T3TerminalNative.podspec, which runs in the iOS build. The release finalize job commits only named package.json files and the lockfile, so excluded files never reach a commit.

The actions/checkout jobs fetch with a blob filter when sparse, so they no longer download the archives at all. The two hand-written steps fetch without a filter, so for them this skips only the 49.5 MB disk write, which release-desktop.yml already treats as worth tuning on Windows. mobile-showcase-screenshots.yml keeps the archives: it is a mobile workflow and its iOS job builds the app.

  • A local reproduction cloned base 8760d063e9 with a blob filter, --depth=1 and no-cone sparse patterns, with and without the new line. With it, checkout skipped both archive blobs (11,075 to 11,073 objects; both blobs absent from the object store), the working tree shrank by 49,489,024 bytes (exactly the two archives' sizes), and the headers, Info.plist and VERSION stayed present.

  • The same check through the hand-written git fetch and git sparse-checkout set form: both archives absent, the rest of Vendor/ present, the same 129,790,036-byte working tree.

  • vp run check:changed passed on the final commit (format, typecheck, tests beside changes).

  • actionlint on the changed workflows reports the same findings before and after (Blacksmith runner labels, concurrency.queue, and existing shellcheck notes). The change adds no new finding.

  • git grep across the changed workflows, the scripts they run and .github/actions found no reader of t3-terminal/Vendor outside the iOS podspec.

  • After merging main, a --depth=1 no-cone sparse checkout of the merged head with and without the line: with it, both archives are absent from the working tree, which shrinks by exactly their 49,489,024 bytes, and the other six files in Vendor/ stay. This local run doesn't measure transfer savings.

  • Transfer: the 10.7 MiB is from the fork run; a local --depth=1 fetch of head bcd2981108 measured 10,929 KiB. The 6.6 MB this description gave before is the two blobs' delta-compressed size in a local repository with full history, which a depth-1 CI fetch does not get. The 49,489,024 bytes are the same in the fork run and locally. Pack sizes are GitHub's packs as served to my fork. The fork proof uses depth 1; the full-history checkouts in release.yml's preflight, release and finalize jobs were not measured.

  • Fork run 43187910073: the other pairs, attempt 1, unedited. Attempts 2 and 3 gave the same file and byte counts; pack sizes varied by up to 37 KiB. On Windows the hand-written form checks out more files in both variants (31,902 and 31,900); the difference between them is still the two archives.

PROOF form=handwritten variant=before os=ubuntu-24.04 attempt=1 head=dd165bbb97d2c35d0280617daca95d95b9b3daa3 git=2.56.0 checked_out_files=7776 worktree_bytes=192714624 vendor_a_files=2 size_pack_kib=119528 blob_ios_arm64_simulator=present blob_ios_arm64=present clock_to_after_checkout_s=13.34
PROOF form=handwritten variant=after os=ubuntu-24.04 attempt=1 head=dd165bbb97d2c35d0280617daca95d95b9b3daa3 git=2.56.0 checked_out_files=7774 worktree_bytes=143225600 vendor_a_files=0 size_pack_kib=119528 blob_ios_arm64_simulator=present blob_ios_arm64=present clock_to_after_checkout_s=13.13
PROOF form=actions-checkout variant=before os=windows-2025 attempt=1 head=dd165bbb97d2c35d0280617daca95d95b9b3daa3 git=2.56.0.windows.4 checked_out_files=7776 worktree_bytes=192714624 vendor_a_files=2 size_pack_kib=62948 blob_ios_arm64_simulator=present blob_ios_arm64=present clock_to_after_checkout_s=23.04
PROOF form=actions-checkout variant=after os=windows-2025 attempt=1 head=dd165bbb97d2c35d0280617daca95d95b9b3daa3 git=2.56.0.windows.4 checked_out_files=7774 worktree_bytes=143225600 vendor_a_files=0 size_pack_kib=51970 blob_ios_arm64_simulator=absent blob_ios_arm64=absent clock_to_after_checkout_s=10.39
PROOF form=handwritten variant=before os=windows-2025 attempt=1 head=dd165bbb97d2c35d0280617daca95d95b9b3daa3 git=2.56.0.windows.4 checked_out_files=31902 worktree_bytes=372030193 vendor_a_files=2 size_pack_kib=119517 blob_ios_arm64_simulator=present blob_ios_arm64=present clock_to_after_checkout_s=18.32
PROOF form=handwritten variant=after os=windows-2025 attempt=1 head=dd165bbb97d2c35d0280617daca95d95b9b3daa3 git=2.56.0.windows.4 checked_out_files=31900 worktree_bytes=322541169 vendor_a_files=0 size_pack_kib=119528 blob_ios_arm64_simulator=present blob_ios_arm64=present clock_to_after_checkout_s=16.17

Prior PRs

Generated with Claude Opus 5.5 and GPT-6.1 Sol in T3 Code Nightly

Apply ci.yml's sparse exclusion of the vendored libghostty .a files to the release, desktop build, Windows test, relay and web preview checkouts, which never build the iOS app.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@github-actions github-actions Bot added vouch:unvouched Author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Nov 1, 2026
@macroscopeapp

macroscopeapp Bot commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 960b261

Macroscope's review found this PR approvable — Release, deploy and test workflows skip vendored iOS terminal archives they do not use. Mobile build checkouts, deployment behavior and analysis commands remain unchanged, keeping the operational impact limited to runner workspace contents.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

Workflow sparse-checkout rules now exclude .a archives under apps/mobile/modules/t3-terminal/Vendor.

Changes: Workflow checkouts

Layer / File(s) Summary
Exclude vendored archives
.github/workflows/*
Deployment, preview, release, cleanup, and test workflow checkouts exclude .a files under the terminal module’s Vendor directory.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Change: Other

Suggested reviewers: juliusmarminge, t3dotgg

Merge Risk: Minimal · up to bcd29

The affected checkouts omit iOS terminal archives. No actionable merge-blocking risk is established; normal workflow checks remain appropriate.

Pre-merge checks: Passed 4

Check name Status Explanation
Title check Passed The title clearly summarizes the primary change: CI release and deploy checkouts skip the iOS terminal archives.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description check Passed The description follows the repository template closely. It has Problem, Change, Scope, and Verification sections, and each section gives specific content. The Problem section names the two vendored i…
Full details: Description check

Explanation

The description follows the repository template closely. It has Problem, Change, Scope, and Verification sections, and each section gives specific content. The Problem section names the two vendored iOS archives, the 49.5 MB size, and the workflows that still fetch them. The Change section lists each affected file and the exclusion line. The Scope section explains why no issue is linked and cites the maintainer pattern from PR #20044. The Verification section includes a fork CI run, proof output with byte and file counts, and a list of checks that were not run. It also names the model and harness, as the template asks. The template's required title is a conventional commit, which the PR title meets ("perf(ci): ..."). The description is detailed and somewhat long, but it is complete and on topic. The only possible gap is the Scope section: the template says to link an issue or a maintainer request for bug fixes, and this change is a CI performance change, not a bug fix. The author explicitly justifies the absence of an issue, so the requirement is addressed.

Finishing Touches

Generate unit tests (beta)

  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 091d78a and bcd2981.

Files selected for processing: 1

  • .github/workflows/release.yml

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 3 remain after this review.

# Conflicts:
#	.github/workflows/release.yml
Conflict in release.yml: deploy_web now checks out three files on main,
so it keeps main's checkout and needs no exclusion line.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@only21mil

Copy link
Copy Markdown
Contributor Author

Note

🤖 Opus 5.5 replying on behalf of Victor.

I merged main into this branch in bcd2981 to clear the conflict in release.yml. On main, deploy_web now checks out three files (#33145), so I kept main's checkout and dropped the exclusion line there. publish_cli was already narrowed the same way. The other 13 release.yml checkouts and the other workflows keep the line. I updated the count in the description.

@only21mil

Copy link
Copy Markdown
Contributor Author

Note

🤖 Opus 5.5 replying on behalf of Victor.

I am closing this: it trims what CI jobs check out and does not fix a bug, and this repository now takes only bug fixes from outside contributors.

@only21mil only21mil closed this Nov 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S 10-29 changed lines (additions + deletions). vouch:unvouched Author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants