Skip to content

Commit 21cdcd2

Browse files
committed
ci(selfhost): stop publishing the legacy gittensory-selfhost image tag
The self-host container image release workflow published every orb-v tag under both the renamed "loopover-selfhost" name and the pre-rename "gittensory-selfhost" name as a dual-publish alias. Stop publishing under the old name going forward -- only "loopover-selfhost" ships from here on. Already-published tags and digests under the old name are untouched; GHCR has no server-side alias, so an existing exact-version or digest pin keeps resolving forever regardless. Only a ":latest"-style pin stops advancing, which is the accepted tradeoff of retiring the dual-publish, not something this change works around. Updates the release workflow's image metadata step and release-notes template, trims the now-stale dual-publish/alias commentary from the deploy script, release-automation scripts, and .env.example, and brings the self-hosting docs and unit tests in line with the new single-name publish. Part of #4777
1 parent 313342d commit 21cdcd2

14 files changed

Lines changed: 35 additions & 69 deletions

.env.example

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -262,10 +262,7 @@ REDIS_URL=redis://redis:6379 # REQUIRED for the self-host review
262262
# # starts Redis automatically; override for an external Redis.
263263
# GITTENSORY_IMAGE=ghcr.io/jsonbored/loopover-selfhost:latest # image used by scripts/deploy-selfhost-image.sh;
264264
# # pin production rollouts to a release tag such as :orb-v0.1.0
265-
# # or to an immutable @sha256 digest. #4770: the pre-rename
266-
# # ghcr.io/jsonbored/gittensory-selfhost name is a deprecated
267-
# # alias of the same image during the deprecation window (#4777)
268-
# # -- an existing pin to it keeps working unmodified.
265+
# # or to an immutable @sha256 digest.
269266
# GITHUB_CACHE_TTL_SECONDS=20 # Enables the Redis-backed GitHub GET-response cache when >0; set 0
270267
# # to disable. NOT a per-entry TTL duration — each cached class
271268
# # resolves its own TTL below (GITHUB_BRANCH_PROTECTION_CACHE_TTL_SECONDS

.github/workflows/orb-beta-release.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
# Automated ORB (self-host container image, ghcr.io/jsonbored/loopover-selfhost -- #4770: the pre-rename
2-
# ghcr.io/jsonbored/gittensory-selfhost name remains a deprecated alias of the same build during the
3-
# deprecation window tracked by #4777) beta channel.
1+
# Automated ORB (self-host container image, ghcr.io/jsonbored/loopover-selfhost) beta channel.
42
# Daily (or on demand via workflow_dispatch), checks whether any image-relevant commit has landed
53
# since the last orb-v tag (scripts/check-orb-release-due.mjs / scripts/orb-release-core.mjs) and,
64
# if so, cuts the next `orb-vX.Y.Z-beta.N` tag and dispatches release-selfhost.yml to build + publish

.github/workflows/orb-stable-release-pr.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
# Automated ORB (self-host container image, ghcr.io/jsonbored/loopover-selfhost -- #4770: the pre-rename
2-
# ghcr.io/jsonbored/gittensory-selfhost name remains a deprecated alias of the same build during the
3-
# deprecation window tracked by #4777) STABLE-channel Release PR --
1+
# Automated ORB (self-host container image, ghcr.io/jsonbored/loopover-selfhost) STABLE-channel Release PR --
42
# the release-please-equivalent for ORB, whose cross-cutting image-relevant scoping (src/** shared with
53
# UI/MCP-only subtrees it must exclude -- see orb-release-core.mjs's IMAGE_RELEVANT_PREFIXES/EXCLUDED_PREFIXES)
64
# doesn't fit release-please's directory-component model the way packages/gittensory-mcp and

.github/workflows/release-selfhost.yml

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
#
66
# Pull: docker pull ghcr.io/<owner>/loopover-selfhost:orb-v0.1.0
77
#
8-
# #4770: `ghcr.io/<owner>/gittensory-selfhost` is a deprecated alias of the SAME image, published from this
9-
# same build/push so both names resolve to the byte-identical digest -- see the "Image metadata" step below.
10-
# Self-hosters pinned to the old name keep working unmodified during the deprecation window; do not remove
11-
# that alias without the sign-off tracked by #4777.
8+
# #4777: publishing under the pre-rename "gittensory-selfhost" name stopped -- see the "Image metadata"
9+
# step below. Already-published tags/digests under that name are untouched and keep resolving forever
10+
# (GHCR has no server-side alias); only new pushes moved to "loopover-selfhost" exclusively.
1211
#
1312
# Prerelease tags (#1937): orb-v0.1.0-rc.1 / orb-v0.1.0-beta.1 run the identical pipeline but never move
1413
# `latest` and are marked prerelease on the GitHub Release -- for beta-testing an image before it becomes
@@ -222,21 +221,15 @@ jobs:
222221
echo "GTORBTAGS"
223222
} >> "$GITHUB_OUTPUT"
224223
225-
# #4770: publish under BOTH the new "loopover-selfhost" name (primary going forward, listed first) and
226-
# the legacy "gittensory-selfhost" name (deprecated alias) from this SAME buildx build/push below --
227-
# docker/metadata-action applies the identical `tags:` set to every entry in a multi-line `images:`
228-
# list, so both names resolve to the byte-identical multi-arch manifest with no second build and no
229-
# extra registry round-trip. Self-hosters who pinned the old image reference in their own deployment
230-
# config must keep working unmodified until the deprecation window closes. Removal of the alias is
231-
# tracked by #4777 ("retire every deprecation shim") and requires an explicit, separately-announced
232-
# window before it's dropped -- do not remove the second `images:` line without that sign-off.
224+
# #4777: publishes only under the "loopover-selfhost" name now. The pre-rename "gittensory-selfhost"
225+
# name is no longer pushed to; GHCR has no server-side alias, so its already-published exact-version
226+
# and digest pins keep resolving forever regardless -- this only stops new tags from landing there.
233227
- name: Image metadata
234228
id: meta
235229
uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6
236230
with:
237231
images: |
238232
ghcr.io/${{ github.repository_owner }}/loopover-selfhost
239-
ghcr.io/${{ github.repository_owner }}/gittensory-selfhost
240233
tags: ${{ steps.tags.outputs.list }}
241234
labels: |
242235
org.opencontainers.image.title=gittensory-orb
@@ -354,10 +347,6 @@ jobs:
354347
Multi-arch (linux/amd64 + linux/arm64). See https://loopover.ai/docs/maintainer-self-hosting for setup.
355348
Includes the Claude Code / Codex subscription CLIs by default; credentials stay runtime-only.
356349
Sentry release id baked into the image: \`${RELEASE_ID}\`.
357-
358-
#4770: \`ghcr.io/${REPOSITORY_OWNER_LOWER}/gittensory-selfhost:${RELEASE_TAG}\` (the pre-rename name)
359-
still resolves to this identical build/digest during the deprecation window -- no action needed if
360-
you're already pinned to it. Track eventual removal via #4777.
361350
EOF
362351
)"
363352
# #1937: a prerelease tag never becomes the repo's "Latest release" and is visibly marked as such

apps/gittensory-ui/src/routes/docs.self-hosting-operations.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -982,9 +982,8 @@ SENTRY_ORG_SLUG=<your-sentry-org-slug>
982982
GITTENSORY_IMAGE=ghcr.io/jsonbored/loopover-selfhost@sha256:... ./scripts/deploy-selfhost-image.sh`}
983983
/>
984984
<p>
985-
<code>ghcr.io/jsonbored/gittensory-selfhost</code> (the pre-rename name) remains a
986-
deprecated alias of the identical image during the deprecation window — an existing pin to
987-
it keeps resolving unmodified.
985+
<code>ghcr.io/jsonbored/gittensory-selfhost</code> (the pre-rename name) is no longer
986+
published to, but an existing pin to a specific tag or digest under it keeps resolving.
988987
</p>
989988
<p>
990989
The pull always runs with <code>--policy always</code>, so re-running the script against an

apps/gittensory-ui/src/routes/docs.self-hosting-quickstart.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,8 @@ curl http://localhost:8787/ready`}
120120
GITTENSORY_IMAGE=ghcr.io/jsonbored/loopover-selfhost@sha256:... ./scripts/deploy-selfhost-image.sh`}
121121
/>
122122
<p>
123-
<code>ghcr.io/jsonbored/gittensory-selfhost</code> (the pre-rename name) remains available
124-
as a deprecated alias of the identical image during the deprecation window — existing pins
125-
keep working unmodified.
123+
<code>ghcr.io/jsonbored/gittensory-selfhost</code> (the pre-rename name) is no longer
124+
published to, but an existing pin to a specific tag or digest under it keeps resolving.
126125
</p>
127126
<Callout variant="note" title="Building from source instead">
128127
Contributors and anyone customizing the Dockerfile can still build locally —{" "}

apps/gittensory-ui/src/routes/docs.self-hosting-release-checklist.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ git push origin orb-v0.1.0`}
233233
<code>scripts/deploy-selfhost-prebuilt.sh</code>, run{" "}
234234
<code>
235235
scripts/deploy-selfhost-image.sh
236-
ghcr.io/&lt;owner&gt;/gittensory-selfhost:orb-v0.1.0
236+
ghcr.io/&lt;owner&gt;/loopover-selfhost:orb-v0.1.0
237237
</code>
238238
.
239239
</td>
@@ -570,8 +570,8 @@ docker rm -f gt-qdrant && docker network rm gt-rag-smoke`}
570570
</p>
571571
<CodeBlock
572572
lang="bash"
573-
code={`docker pull ghcr.io/jsonbored/gittensory-selfhost:orb-v0.1.0
574-
docker images ghcr.io/jsonbored/gittensory-selfhost:orb-v0.1.0 --format '{{.Size}}'`}
573+
code={`docker pull ghcr.io/jsonbored/loopover-selfhost:orb-v0.1.0
574+
docker images ghcr.io/jsonbored/loopover-selfhost:orb-v0.1.0 --format '{{.Size}}'`}
575575
/>
576576
<Callout variant="note">
577577
This audit is Dockerfile-derived, not a runtime scan. If a future dependency bump adds a
@@ -635,7 +635,7 @@ docker images ghcr.io/jsonbored/gittensory-selfhost:orb-v0.1.0 --format '{{.Size
635635
code={`Gittensory Orb container image:
636636
637637
\`\`\`bash
638-
docker pull ghcr.io/jsonbored/gittensory-selfhost:orb-v0.1.0
638+
docker pull ghcr.io/jsonbored/loopover-selfhost:orb-v0.1.0
639639
\`\`\`
640640
641641
Multi-arch (linux/amd64 + linux/arm64). See https://gittensory.aethereal.dev/docs/maintainer-self-hosting for setup.

apps/gittensory-ui/src/routes/docs.self-hosting-releases.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@ function SelfHostingReleases() {
5656
docker pull ghcr.io/jsonbored/loopover-selfhost:latest`}
5757
/>
5858
<Callout variant="note" title="Renamed from gittensory-selfhost">
59-
<code>ghcr.io/jsonbored/loopover-selfhost</code> is the current name. The pre-rename{" "}
60-
<code>ghcr.io/jsonbored/gittensory-selfhost</code> remains available as a deprecated alias
61-
of the byte-identical image during the deprecation window — existing pins keep working
62-
unmodified.
59+
<code>ghcr.io/jsonbored/loopover-selfhost</code> is the only name new releases publish
60+
under. The pre-rename <code>ghcr.io/jsonbored/gittensory-selfhost</code> is no longer
61+
published to, but an existing pin to a specific tag or digest under that name keeps
62+
resolving — pull it and switch to the new name at your convenience.
6363
</Callout>
6464

6565
<h2>Prerelease (beta/rc) images</h2>

orb-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
22
"version": "1.0.0",
3-
"description": "Source of truth for the self-hostable gittensory-orb container image's target release version (ghcr.io/jsonbored/loopover-selfhost -- #4770: ghcr.io/jsonbored/gittensory-selfhost is a deprecated alias of the same build/digest during the deprecation window tracked by #4777). Bumped by a maintainer when a feat/fix/breaking change since the last stable orb-v tag warrants moving to a new target version -- scripts/orb-release-core.mjs and .github/workflows/orb-beta-release.yml read this file to decide what version the next automated beta snapshot targets. Promoting a beta to a stable orb-vX.Y.Z release is still a manual `git tag` -- this manifest only drives the automated beta channel."
3+
"description": "Source of truth for the self-hostable gittensory-orb container image's target release version (ghcr.io/jsonbored/loopover-selfhost). Bumped by a maintainer when a feat/fix/breaking change since the last stable orb-v tag warrants moving to a new target version -- scripts/orb-release-core.mjs and .github/workflows/orb-beta-release.yml read this file to decide what version the next automated beta snapshot targets. Promoting a beta to a stable orb-vX.Y.Z release is still a manual `git tag` -- this manifest only drives the automated beta channel."
44
}

scripts/deploy-selfhost-image.sh

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,6 @@
1010
# ./scripts/deploy-selfhost-image.sh ghcr.io/jsonbored/loopover-selfhost:orb-v0.1.0
1111
# GITTENSORY_IMAGE=ghcr.io/jsonbored/loopover-selfhost@sha256:... ./scripts/deploy-selfhost-image.sh
1212
#
13-
# #4770: ghcr.io/jsonbored/gittensory-selfhost (the pre-rename name) is a deprecated alias of the SAME
14-
# build/digest during the deprecation window -- an existing GITTENSORY_IMAGE override or CLI argument
15-
# pinned to that old name keeps resolving unmodified; only DEFAULT_IMAGE below moves to the new name.
16-
# Removal of the alias is tracked by #4777.
17-
#
1813
# The image itself carries official release metadata. Set SENTRY_RELEASE only for custom images whose
1914
# source maps were uploaded under that exact id.
2015
set -euo pipefail

0 commit comments

Comments
 (0)