feat: adopt madtea.lol vanity import path and route distribution through the GitHub edge #420

Open
opened 2026-08-17 15:50:13 +00:00 by hexajon · 2 comments
Owner

Goal

Make go install madtea.lol/cmd/madtea@latest work, and serve the install channels a user's machine fetches directly from GitHub, so networks that allowlist github.com but not a self-hosted forge can still install madtea.

Public home and distribution topology

I settled this a while ago and never wrote it down, which is why it kept getting re-opened. It is recorded here and as ADR 0032.

  • Canonical source home (code, issues, contributors): git.cheshirecube.cloud/sixfold-space/madtea.
  • Public distribution edge: GitHub, github.com/sixfold-space. Everything a user's machine fetches directly lives here: release binaries, the curl installer, the self-updater, homebrew-tap, scoop-bucket, the claude-plugins marketplace, and the go-get mirror. Reason: corporate proxies allowlist github.com, not a self-hosted .cloud domain.
  • Import identity: vanity madtea.lol. The go-import meta on madtea.lol points at github.com/sixfold-space/madtea, and the Go module path becomes madtea.lol. This keeps the import path portable off any single forge.
  • Plumbing: cheshirecube pushes to GitHub via a push mirror (code and tags); GoReleaser publishes tap, scoop, and release artifacts to GitHub.

Scope

  • Rename the Go module path to madtea.lol (go.mod plus every internal import).
  • Point distribution config at GitHub: GoReleaser release/tap/scoop targets, the self-updater base URL, the curl installer, and the plugin-marketplace URL.
  • Point source-home references at cheshirecube: issue-tracker links and the clone URL (and fix the stale Codeberg links in existing ADRs).
  • Update the install docs; the go install line becomes madtea.lol/cmd/madtea@latest. Commit the push-mirror runbook (docs/contributing/github-push-mirror.md).
  • Add ADR 0032 recording this topology.

Out of scope (infrastructure)

Creating the GitHub push mirror. The runbook is docs/contributing/github-push-mirror.md. go get resolves only after the first post-rename release reaches the GitHub mirror.

Done when

  • The gate is green with module madtea.lol.
  • A release cut after this change installs via go install madtea.lol/cmd/madtea@latest.
  • Every documented install channel points at GitHub (or madtea.lol for go get), and human/source links point at cheshirecube.
## Goal Make `go install madtea.lol/cmd/madtea@latest` work, and serve the install channels a user's machine fetches directly from GitHub, so networks that allowlist github.com but not a self-hosted forge can still install madtea. ## Public home and distribution topology I settled this a while ago and never wrote it down, which is why it kept getting re-opened. It is recorded here and as ADR 0032. - **Canonical source home** (code, issues, contributors): `git.cheshirecube.cloud/sixfold-space/madtea`. - **Public distribution edge**: GitHub, `github.com/sixfold-space`. Everything a user's machine fetches directly lives here: release binaries, the curl installer, the self-updater, `homebrew-tap`, `scoop-bucket`, the `claude-plugins` marketplace, and the go-get mirror. Reason: corporate proxies allowlist github.com, not a self-hosted `.cloud` domain. - **Import identity**: vanity `madtea.lol`. The go-import meta on `madtea.lol` points at `github.com/sixfold-space/madtea`, and the Go module path becomes `madtea.lol`. This keeps the import path portable off any single forge. - **Plumbing**: cheshirecube pushes to GitHub via a push mirror (code and tags); GoReleaser publishes tap, scoop, and release artifacts to GitHub. ## Scope - [ ] Rename the Go module path to `madtea.lol` (`go.mod` plus every internal import). - [ ] Point distribution config at GitHub: GoReleaser release/tap/scoop targets, the self-updater base URL, the curl installer, and the plugin-marketplace URL. - [ ] Point source-home references at cheshirecube: issue-tracker links and the clone URL (and fix the stale Codeberg links in existing ADRs). - [ ] Update the install docs; the `go install` line becomes `madtea.lol/cmd/madtea@latest`. Commit the push-mirror runbook (`docs/contributing/github-push-mirror.md`). - [ ] Add ADR 0032 recording this topology. ## Out of scope (infrastructure) Creating the GitHub push mirror. The runbook is `docs/contributing/github-push-mirror.md`. `go get` resolves only after the first post-rename release reaches the GitHub mirror. ## Done when - The gate is green with `module madtea.lol`. - A release cut after this change installs via `go install madtea.lol/cmd/madtea@latest`. - Every documented install channel points at GitHub (or `madtea.lol` for `go get`), and human/source links point at cheshirecube.
Author
Owner

Correction after checking the object format: the canonical repo is SHA-256, as all of my Forgejo repos are. GitHub is SHA-1 only and cannot host a SHA-256 repo, so the push mirror in the scope above is impossible.

Revised mechanism. The topology is unchanged (GitHub stays the go-get source and the distribution edge), only the plumbing changes:

  • go-get resolves from an independent SHA-1 copy of the source on GitHub, maintained by a one-way git fast-export | git fast-import sync in cheshirecube CI, not a push mirror. The SHA-1 output is deterministic from the source content.
  • Distribution (release binaries, Homebrew tap, Scoop bucket, plugin marketplace) still publishes to GitHub via GoReleaser.
  • Cost: commits and tags on the GitHub copy are unsigned. Release artifacts stay GPG-signed and are what madtea update verifies, so end-user trust is intact.

Recorded as the 2026-08-16 amendment to ADR 0032. Runbook: docs/contributing/github-source-sync.md (replaces the push-mirror runbook).

Correction after checking the object format: the canonical repo is SHA-256, as all of my Forgejo repos are. GitHub is SHA-1 only and cannot host a SHA-256 repo, so the push mirror in the scope above is impossible. Revised mechanism. The topology is unchanged (GitHub stays the go-get source and the distribution edge), only the plumbing changes: - go-get resolves from an independent SHA-1 copy of the source on GitHub, maintained by a one-way `git fast-export | git fast-import` sync in cheshirecube CI, not a push mirror. The SHA-1 output is deterministic from the source content. - Distribution (release binaries, Homebrew tap, Scoop bucket, plugin marketplace) still publishes to GitHub via GoReleaser. - Cost: commits and tags on the GitHub copy are unsigned. Release artifacts stay GPG-signed and are what `madtea update` verifies, so end-user trust is intact. Recorded as the 2026-08-16 amendment to ADR 0032. Runbook: `docs/contributing/github-source-sync.md` (replaces the push-mirror runbook).
Author
Owner

Migration status

The config repoint is merged (PR #382): module path to madtea.lol, distribution to GitHub, source home to cheshirecube, docs updated. Gate-green.

Remaining work, all tracked:

  • #421 - madtea's runtime GitHub-API calls (self-updater, release scripts, plugin vendor) still speak the Gitea API and fail against GitHub. Needs a design decision, then the build. Blocks the first GitHub release.
  • #386 - build the cheshirecube to GitHub source sync (fast-export/import). Needed for go get madtea.lol to resolve.
  • #384 - purge the remaining Codeberg refs (sample hosts to example.com; ADR issue-links to cheshirecube; genuine externals and history exempt).
  • #422 - re-sign the unsigned commits from a signing-config gap. Separate hygiene, not a migration blocker.

Facts worth stating plainly here, so nobody has to reconstruct them (also in ADR 0032):

  • madtea is public on Codeberg and migrating off it, so this is not pre-launch work.
  • The canonical repo is SHA-256. GitHub is a SHA-1 source copy via the #386 sync, not a push mirror, because GitHub is SHA-1 only.
  • Do not reference Codeberg in madtea's own code or docs. Exempt: the Forgejo upstream image, third-party tools, and CHANGELOG/ADR history (#384).
  • The first GitHub release is gated on #421 and #386.
## Migration status The config repoint is **merged** (PR #382): module path to `madtea.lol`, distribution to GitHub, source home to cheshirecube, docs updated. Gate-green. Remaining work, all tracked: - **#421** - madtea's runtime GitHub-API calls (self-updater, release scripts, plugin vendor) still speak the Gitea API and fail against GitHub. Needs a design decision, then the build. **Blocks the first GitHub release.** - **#386** - build the cheshirecube to GitHub source sync (fast-export/import). Needed for `go get madtea.lol` to resolve. - **#384** - purge the remaining Codeberg refs (sample hosts to `example.com`; ADR issue-links to cheshirecube; genuine externals and history exempt). - **#422** - re-sign the unsigned commits from a signing-config gap. Separate hygiene, not a migration blocker. Facts worth stating plainly here, so nobody has to reconstruct them (also in ADR 0032): - madtea is **public on Codeberg and migrating off it**, so this is not pre-launch work. - The canonical repo is **SHA-256**. GitHub is a **SHA-1 source copy** via the #386 sync, not a push mirror, because GitHub is SHA-1 only. - Do **not** reference Codeberg in madtea's own code or docs. Exempt: the Forgejo upstream image, third-party tools, and CHANGELOG/ADR history (#384). - The first GitHub release is gated on #421 and #386.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
sixfold-space/madtea#420
No description provided.