Skip to content

CI freeze: replace LFS artifact pipeline with source-build CI #191

@daiimus

Description

@daiimus

Context

The CI workflow (.github/workflows/ci.yml) previously fetched pre-built .a static libraries via Git LFS / media.githubusercontent.com. Git LFS has been permanently removed from this repo due to bandwidth budget issues, so the download step now returns empty files and the build fails.

CI has been frozen: the workflow trigger was changed from push/pull_request to workflow_dispatch only (manual). It will not run automatically until re-enabled.

Commit: the CI freeze is part of the upcoming infra(ci): freeze CI commit on main.

What needs to happen to unfreeze

Replace the old LFS-fetch steps with a source-build pipeline:

  1. Checkout daiimus/ghostty at ios-external-backend (or a pinned ref via ghostty.ref file)
  2. Install Zig 0.15.x (use mlugg/setup-zig action or similar)
  3. Build GhosttyKit: zig build -Demit-xcframework=true -Dxcframework-target=universal
  4. Copy xcframework to Geistty/Frameworks/GhosttyKit.xcframework/
  5. Rename modulemap: module.modulemapGhosttyKit.modulemap in each arch's Headers dir
  6. Build Geistty (existing xcodebuild steps)
  7. Run tests (existing xcodebuild test steps)

Optional improvements

  • Two CI lanes: fast (Swift-only, skip GhosttyKit rebuild if no ghostty changes) and integration (full rebuild)
  • ghostty.ref pin file: a single file containing the ghostty commit SHA to build against, for reproducibility once iteration slows
  • Cache the built xcframework keyed on the ghostty ref

Exit criteria

  • CI runs automatically on push to main and on PRs
  • Build succeeds end-to-end (GhosttyKit from source + Geistty build + tests)
  • No Git LFS dependency anywhere in the pipeline

Re-enable trigger

When the tmux C API surface and core terminal behavior stabilize (fewer breaking ghostty changes per week), making it practical to build GhosttyKit in CI without constant failures from API churn.

Current local-only workflow

Until CI is re-enabled, validation is local:

# Build GhosttyKit
cd /Users/daiimus/Repositories/ghostty
zig build -Demit-xcframework=true -Dxcframework-target=universal
cp -R macos/GhosttyKit.xcframework /Users/daiimus/Repositories/geistty/Geistty/Frameworks/

# Build + test Geistty
cd /Users/daiimus/Repositories/geistty/Geistty
./ci.sh build
./ci.sh test

Metadata

Metadata

Assignees

No one assigned

    Labels

    artifact-policyBuild artifact tracking, LFS, binary managementinfraCI, build system, tooling

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions