Skip to content

refactor(release): publish self-host container image as loopover-selfhost with old-name alias#5559

Merged
JSONbored merged 1 commit into
mainfrom
loopover/container-image-rename
Jul 13, 2026
Merged

refactor(release): publish self-host container image as loopover-selfhost with old-name alias#5559
JSONbored merged 1 commit into
mainfrom
loopover/container-image-rename

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

Summary

Publishes ghcr.io/jsonbored/loopover-selfhost as the primary self-host image going forward, while ghcr.io/jsonbored/gittensory-selfhost keeps resolving to the byte-identical build through the deprecation window (#4777 removes it later). Both names come from a single docker buildx build/push — docker/metadata-action's images: input now lists both repository names, so the same multi-arch manifest gets pushed under both, with zero risk of the two tags ever drifting (traced the workflow step-by-step to confirm this).

Updates the release notes' pull command, deploy-selfhost-image.sh's default, .env.example's GITTENSORY_IMAGE example, and 3 self-hosting docs pages to present the new name as canonical while noting the old alias still works.

⚠️ Manual step needed after the first release under this PR

GHCR defaults a brand-new package name to private on first push via the automatic GITHUB_TOKENgittensory-selfhost is already public because someone set that manually in the past. The new loopover-selfhost package will likely need its visibility set to Public in the org's Packages settings after the first release runs, or self-hosters following the new pull command will hit an auth error. This isn't fixable in code.

Deliberately unchanged

  • The OCI label block's gittensory-orb title — overlaps the separately-tracked GitHub App slug (GitHub App rename #4772), extensively tested elsewhere; out of scope here.
  • Sentry/OTEL release-naming defaults — separate identifier namespace.
  • docs.self-hosting-release-checklist.tsx — a historical record of a specific past release (orb-v0.1.0); rewriting it would misrepresent what actually shipped, same reasoning as never editing CHANGELOG.md.
  • docker-compose.yml — its service builds locally, never pulls the ghcr path.

Test plan

  • Traced the dual-tag mechanism line-by-line: one buildx build, images: cross-producted with tags:, byte-identical digest under both names by construction.
  • actionlint clean on all 3 touched workflow files.
  • New regression test proving an explicit pre-rename image pin (CLI arg override) still resolves unmodified despite the new default.
  • Full npm run test:ci gate green (802 test files / unsharded coverage 94.85% stmts).
  • npm audit --audit-level=moderate — 0 vulnerabilities.
  • Re-verified targeted tests green after rebasing onto latest main.

Closes #4770.

…host with old-name alias

Publishes ghcr.io/jsonbored/loopover-selfhost as the primary self-host image
going forward, while the existing ghcr.io/jsonbored/gittensory-selfhost tag
keeps resolving to the byte-identical build through the deprecation window
(#4777 removes it later). Both names come from a SINGLE docker buildx
build/push -- docker/metadata-action's images: input now lists both
repository names, so the same multi-arch manifest gets pushed under both,
with no risk of the two tags ever drifting.

Updates the release notes' pull command, deploy-selfhost-image.sh's default,
.env.example's GITTENSORY_IMAGE example, and 3 self-hosting docs pages to
present the new name as canonical while noting the old alias still works.

Deliberately unchanged: the OCI label block's gittensory-orb title (overlaps
the separately-tracked GitHub App slug, #4772), Sentry/OTEL release-naming
defaults (separate identifier namespace), docs.self-hosting-release-
checklist.tsx (a historical record of a specific past release, same
reasoning as never editing CHANGELOG.md), and docker-compose.yml (its
service builds locally, never pulls the ghcr path).

Note for whoever runs the first release after this merges: GHCR defaults a
brand-new package name to private on first push via the automatic
GITHUB_TOKEN -- the new loopover-selfhost package will likely need its
visibility manually set to Public in the org's Packages settings, or
self-hosters following the new pull command will hit an auth error.

Closes #4770.
@superagent-security

Copy link
Copy Markdown
Contributor

Superagent didn't find any vulnerabilities or security issues in this PR.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
gittensory-ui ad88ce1 Commit Preview URL

Branch Preview URL
Jul 13 2026, 05:08 AM

@codecov

codecov Bot commented Jul 13, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.91%. Comparing base (a5bec8a) to head (ad88ce1).
⚠️ Report is 2 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #5559   +/-   ##
=======================================
  Coverage   94.91%   94.91%           
=======================================
  Files         570      570           
  Lines       45351    45351           
  Branches    14675    14675           
=======================================
  Hits        43046    43046           
  Misses       1571     1571           
  Partials      734      734           
Flag Coverage Δ
shard-1 44.14% <ø> (ø)
shard-2 35.71% <ø> (ø)
shard-3 32.08% <ø> (ø)
shard-4 31.13% <ø> (ø)
shard-5 32.87% <ø> (ø)
shard-6 44.15% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@loopover-orb loopover-orb Bot added the gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. label Jul 13, 2026
@loopover-orb

loopover-orb Bot commented Jul 13, 2026

Copy link
Copy Markdown

Warning

🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨

⏸️ Gittensory review result - manual review recommended

Review updated: 2026-07-13 05:16:19 UTC

13 files · 2 AI reviewers · no blockers · readiness 82/100 · CI green · clean

⏸️ Suggested Action - Manual Review

  • Touches a guarded path — held for manual review: This PR changes guardrail-protected path(s): apps/gittensory-ui/src/routes/docs.self-hosting-operations.tsx (matched apps/gittensory-ui/**), apps/gittensory-ui/src/routes/docs.self-hosting-quickstart.tsx (matched apps/gittensory-ui/**), apps/gittensory-ui/src/routes/docs.self-hosting-releases.tsx (matched apps/gittensory-ui/**), .github/workflows/orb-beta-release.yml (matched .github/workflows/**), .github/workflows/orb-stable-release-pr.yml (matched .github/workflows/**), and 3 more.

Review summary
This PR renames the primary self-host container image from `gittensory-selfhost` to `loopover-selfhost` while keeping the old name as a byte-identical alias published from the same buildx build (via a two-entry `images:` list in docker/metadata-action), and propagates the new name through docs, deploy script defaults, .env.example, and release-notes generation. The core mechanism is correct: since `images:` is cross-producted with the same `tags:` list in a single build/push step, both names necessarily resolve to the same manifest digest, eliminating drift risk. Tests were updated to assert both names appear in the workflow/notes and that an explicit legacy pin still passes through the deploy script unchanged, which is real coverage of the relevant paths.

Nits — 7 non-blocking
  • The PR description itself flags that the new `loopover-selfhost` GHCR package will likely default to private on first push and require a manual visibility change — this is an operational risk worth a follow-up checklist item, not something code can fix here.
  • docs.self-hosting-operations.tsx is very large (~989 lines per the external brief); consider whether this file should eventually be split, though that's out of scope for this rename PR.
  • The three docs pages each duplicate near-identical 'deprecated alias' Callout/paragraph text (docs.self-hosting-releases.tsx, docs.self-hosting-operations.tsx, docs.self-hosting-quickstart.tsx); a shared snippet/component could avoid drift if the wording ever needs to change again.
  • Confirm the manual GHCR visibility step for `loopover-selfhost` is tracked in an issue/runbook so it isn't forgotten after the first release ships.
  • Consider extracting the repeated 'pre-rename alias' doc blurb into a shared MDX partial or component used by all three self-hosting docs pages.
  • PR author also opened the linked issue — Link an issue that was opened by a different contributor, or provide a rationale for why this self-authored issue represents genuine discovery work.
  • Touches a guarded path — held for manual review — A maintainer must review and merge this change.
Signal Result Evidence
Code review ✅ No blockers 2 reviewers, synthesized
Linked issue ✅ Linked #4770
Related work ⚠️ 3 scoped overlaps Top overlaps are listed below; lower-confidence bulk is hidden.
Change scope ❌ 8/20 High review scope from cached public metadata (1 linked issue).
Validation posture ✅ 25/25 PR body includes validation/test evidence.
Contributor workload ✅ 10/10 Author activity: 44 registered-repo PR(s), 36 merged, 399 issue(s).
Contributor context ✅ Confirmed Gittensor contributor JSONbored; Gittensor profile; 44 PR(s), 399 issue(s).
Gate result ⚠️ Not blocking Advisory; not blocking this PR.
Improvement ✅ Minor risk: clean · value: minor — Code changes are accompanied by test evidence. LLM value judgment: moderate — The diff is a well-scoped, mechanically consistent rename across workflow, scripts, docs, and tests that closes issue #4770 without introducing drift risk between the old and new image names.
Linked issue satisfaction

Addressed
The diff publishes the image as loopover-selfhost while retaining gittensory-selfhost as a byte-identical alias from the same buildx build/push, and updates the release manifest, deploy script default, .env.example, and self-host docs to the new name as required.

Review context
  • Author: JSONbored
  • Role context: owner (maintainer lane)
  • Public audience mode: oss maintainer
  • Lane context: Repository is configured for direct PR review.
  • Public profile languages: Python, TypeScript, Ruby, Go, JavaScript, MDX, Shell, Solidity
  • Official Gittensor activity: 44 PR(s), 399 issue(s).
  • Related work: Titles/paths share 5 meaningful terms. (issue #5120, issue #4770)
  • Related work: Titles/paths share 3 meaningful terms. (issue #4767, issue #4770)
  • Related work: Titles/paths share 3 meaningful terms. (issue #4801, issue #4770)
  • Additional title-only matches omitted; title-only overlap does not block.
Contributor next steps
  • Treat this as maintainer-lane context rather than normal contributor-lane activity.
  • Review top overlaps.
  • Add a concise scope and risk note.
  • Check active issues and PRs before submitting.
Signal definitions
  • Related work = same linked issue, overlapping active PRs, or title/path similarity.
  • Change scope = cached public metadata such as size labels, draft state, and review-burden hints.
  • Validation posture = whether the PR provides enough public validation/test evidence for maintainer review.
  • Contributor workload = public contributor activity and cleanup pressure, not a repo-wide quality failure.
  • Contributor context = public GitHub/Gittensor identity context; non-Gittensor status is not a blocker.
[BETA] Chat with Gittensory

Ask Gittensory a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.

  • @gittensory ask &lt;question&gt; answers contribution-quality Q&A with source citations and freshness.
  • @gittensory chat &lt;question&gt; answers in natural prose from cached decision-pack facts via local inference (maintainer/collaborator; read-only).
  • A plain-language @gittensory mention with a real question is routed to the closest matching read-only command automatically -- no exact syntax required.

Full command reference: https://gittensory.aethereal.dev/docs/gittensory-commands

Visual preview
Route Viewport Before (production) After (this PR's preview) Diff
/docs/self-hosting-operations desktop before /docs/self-hosting-operations after /docs/self-hosting-operations
/docs/self-hosting-operations mobile before /docs/self-hosting-operations (mobile) after /docs/self-hosting-operations (mobile)
/docs/self-hosting-quickstart desktop before /docs/self-hosting-quickstart after /docs/self-hosting-quickstart
/docs/self-hosting-quickstart mobile before /docs/self-hosting-quickstart (mobile) after /docs/self-hosting-quickstart (mobile)

Click any thumbnail to open the full-size screenshot. Before = production · After = this PR's preview deploy.

🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed


💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →.

Checked by Gittensory, a quiet PR intelligence layer for OSS maintainers.

  • Re-run Gittensory review

@JSONbored JSONbored self-assigned this Jul 13, 2026
@JSONbored
JSONbored merged commit 81f9dc0 into main Jul 13, 2026
20 checks passed
@loopover-orb loopover-orb Bot added the manual-review Gittensor contributor context label Jul 13, 2026
@JSONbored
JSONbored deleted the loopover/container-image-rename branch July 13, 2026 05:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. manual-review Gittensor contributor context

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Rename the self-host container image

1 participant