Skip to content

ci(flatpak): publish stock upstream Ghostty to the tuna-os remote - #83

Merged
hanthor merged 1 commit into
ptyxis-portfrom
flatpak/publish-upstream-ghostty
Sep 6, 2026
Merged

hanthor merged 1 commit into
ptyxis-portfrom
flatpak/publish-upstream-ghostty

Conversation

@hanthor

@hanthor hanthor commented Sep 6, 2026

Copy link
Copy Markdown
Member

Puts unmodified upstream Ghostty (com.mitchellh.ghostty) on the TunaOS Flatpak remote next to BlueShell. The app IDs differ, so a user can install either or both from the one remote.

flatpak remote-add --if-not-exists tuna-os https://tunaos.org/flatpak/tuna-os.flatpakrepo
flatpak install tuna-os com.mitchellh.ghostty   # stock upstream
flatpak install tuna-os org.tunaos.BlueShell    # already live

It's the standard tuna-os pipeline, not a new one

publish-ghostty-flatpak.yml is 60 lines of trigger policy. The body is the reusable tuna-os/.github/.github/workflows/publish-flatpak.yml that finupdate, mariner, mandelbrot, dualcut and the four installer frontends already call — same native per-arch OCI builds, same skopeo push, same publish-flatpak-index action.

It depends on tuna-os/.github#75, which adds an optional source-repo input to that reusable workflow (additive; all six existing callers resolve byte-identically). Merge that first.

Nothing about Ghostty is vendored here: it builds from a clean checkout of ghostty-org/ghostty with upstream's own manifest, dependencies.yml and zig-packages.json, so upstream dependency and runtime bumps need no action in this repo.

Two things that would have broken it

  • default-branch: tip. Upstream's manifest sets it; the remote's tuna-os.flatpakrepo declares DefaultBranch=master. A tip ref means flatpak install tuna-os com.mitchellh.ghostty fails with "Nothing matches" — the 2026-07-27 incident check-flatpak-remote.py exists to catch. No patch needed: flatpak-builder resolves manifest branch: → --default-branch → manifest default-branch:, and flatpak-github-actions always passes --default-branch=master. Documented so a later move off that action doesn't silently reintroduce it.
  • GHCR package visibility. ghcr.io/tuna-os/ghostty must be made public by hand after the first run; a private package fails to install exactly like a missing one.

Also in this PR

docs/TUNA_OS_PROMOTION.md corrected against reality — it described the tunaos.org listing as one page when an app is listed in six places, and its checklist had drifted from what is actually done.

Unrelated bug this uncovered (already fixed)

upstream-sync.yml has failed every weekly run since the 2026-08-17 transfer — silently, because the failure is in the conflict-reporting step. Labels don't survive a repo transfer, so gh issue create --label upstream-sync was erroring on a label that no longer existed. The label has been recreated on this repo; the next Monday run should complete.

Cadence

Weekly (Sundays 05:00 UTC) plus workflow_dispatch, because the reusable pipeline has no "upstream unchanged" short-circuit — every run is two full Zig builds. Easy to raise if that turns out to be too slow.

🤖 Generated with Claude Code

https://claude.ai/code/session_01EMBRswEeeX2kzVSwpbxCoy

Puts unmodified upstream Ghostty (com.mitchellh.ghostty) on the TunaOS
remote next to BlueShell, so a user can install either or both from the
one remote -- the app IDs differ, so they coexist.

The workflow is trigger policy and nothing else: the body is the reusable
tuna-os/.github publish-flatpak.yml that finupdate, mariner, mandelbrot,
dualcut and the four installer frontends already call. The app is built
from a clean checkout of ghostty-org/ghostty via that workflow's new
source-repo input, using upstream's own manifest, dependencies.yml and
zig-packages.json, so upstream dependency and runtime bumps need no change
here and there is nothing vendored to drift.

Weekly rather than daily: the reusable pipeline has no "upstream
unchanged" short-circuit, so each run is two full Zig builds, and a
republished upstream terminal doesn't need same-day freshness. A dispatch
input takes a specific ref when it does.

Upstream's manifest sets `default-branch: tip`, which would publish a ref
the remote can't resolve -- tuna-os.flatpakrepo declares
DefaultBranch=master, and a mismatch is the 2026-07-27 "Nothing matches"
incident that check-flatpak-remote.py was written for. No patch is needed
and none is applied: flatpak-builder resolves manifest `branch:` ->
`--default-branch` -> manifest `default-branch:`, and flatpak-github-actions
always passes `--default-branch=master`. Recorded in the doc so a later
change away from that action doesn't silently reintroduce it.

Also corrects docs/TUNA_OS_PROMOTION.md against reality. It described the
site listing as one page when an app is listed in six places, and its
checklist had drifted from what is actually done -- BlueShell has been
live in the remote index since the transfer. The upstream-sync entry
records a real failure this uncovered: the `upstream-sync` label does not
survive a repo transfer, so every weekly sync run since 2026-08-17 failed
at `gh issue create --label upstream-sync`. Label recreated.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EMBRswEeeX2kzVSwpbxCoy
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