Migrate ConfigKit to its vanity module path
This commit is contained in:
@@ -6,6 +6,9 @@ applications. Consumers still own their configuration structs, defaults, semanti
|
||||
validation, schema-version policy, CLI parsing, runtime matching and conversion,
|
||||
resource checks, remote acquisition, and service initialization.
|
||||
|
||||
Import the public root package as `"go.maximumdirect.net/configkit"`; its package
|
||||
name remains `configkit`.
|
||||
|
||||
## Choosing a loading entry point
|
||||
|
||||
- Use [`Load`](../../lifecycle.go) with one source for an ordinary configuration.
|
||||
@@ -311,6 +314,26 @@ The examples preserve domain meaning while adopting one configuration convention
|
||||
blocked empty variables remain blocked, and ordinary `Load` never changes the
|
||||
process environment.
|
||||
|
||||
### Vanity module path migration
|
||||
|
||||
ConfigKit's module identifier changed from
|
||||
`gitea.maximumdirect.net/eric/ConfigKit` to `go.maximumdirect.net/configkit` before
|
||||
v1.0.0. Update the dependency requirement in your application's `go.mod` and its
|
||||
Go imports together, selecting a revision or release that declares the new module
|
||||
path. The package name remains `configkit`; the configuration model and public
|
||||
symbol names are unchanged by this identity migration.
|
||||
|
||||
Old and new import paths identify distinct Go packages, including distinct named
|
||||
types. Coordinate adoption with any dependencies that exchange ConfigKit values
|
||||
with your application; changing a requirement alone does not make those types
|
||||
interchangeable. The maintained examples use the new path, but other repositories
|
||||
must manage their own migrations.
|
||||
|
||||
Historical tags keep their original module declarations and contents. Older
|
||||
releases such as v0.10.2 still use the old path and cannot be installed under the
|
||||
vanity identifier simply because discovery can find their repository. A matching
|
||||
migrated revision is needed; no old-path compatibility module is supplied here.
|
||||
|
||||
### Pre-v1 public API cleanup
|
||||
|
||||
The pre-v1 API cleanup replaces these names outright; it does not retain
|
||||
|
||||
@@ -7,10 +7,10 @@ container image, generated package, or separate registry publication.
|
||||
|
||||
## Release identity and support
|
||||
|
||||
- Module: `gitea.maximumdirect.net/eric/ConfigKit`
|
||||
- Module: `go.maximumdirect.net/configkit`
|
||||
- Primary branch: `main`
|
||||
- Authoritative remote: `origin`
|
||||
- Authoritative push URL: `https://gitea.maximumdirect.net/eric/ConfigKit.git`
|
||||
- Authoritative push URL: `ssh://git@forge.maximumdirect.net:22222/base-layer/configkit.git`
|
||||
- Tags: stable Semantic Versions such as `v0.5.0`; no prereleases
|
||||
- Minimum Go version: the first stable patch of the selected Go series, or a
|
||||
higher patch when required by a dependency or specific correctness fix, as
|
||||
@@ -24,6 +24,9 @@ Release validation runs one offline race-enabled Go suite, one full vet pass,
|
||||
and CGO-disabled package compilation for both Linux targets. macOS and CI are
|
||||
not release gates; do not wait for or poll CI.
|
||||
|
||||
The vanity module path identifies Go imports. Source/tag browser links and public
|
||||
Go retrieval use the Forge HTTPS repository independently of SSH publication.
|
||||
|
||||
## 1. Select Go and prepare the tool
|
||||
|
||||
Use a clean checkout with Git, Bash 3.2 or newer, and a native compiler for race
|
||||
@@ -91,7 +94,7 @@ executable first on `PATH` through the publication command.
|
||||
Verify access to the authoritative remote without displaying credentials:
|
||||
|
||||
```sh
|
||||
git ls-remote https://gitea.maximumdirect.net/eric/ConfigKit.git HEAD refs/heads/main
|
||||
git ls-remote ssh://git@forge.maximumdirect.net:22222/base-layer/configkit.git HEAD refs/heads/main
|
||||
```
|
||||
|
||||
Publication requires explicit authorization. Local implementation commits do
|
||||
@@ -111,7 +114,7 @@ Create `docs/releases/<version>.md`. Its first line must be exactly
|
||||
`# ConfigKit <version>`, and it must end with the license and attribution footer:
|
||||
|
||||
```markdown
|
||||
[COPYRIGHT](https://gitea.maximumdirect.net/eric/ConfigKit/src/tag/VERSION/COPYRIGHT) | [LICENSE](https://gitea.maximumdirect.net/eric/ConfigKit/src/tag/VERSION/LICENSE) | [ATTRIBUTION](https://gitea.maximumdirect.net/eric/ConfigKit/src/tag/VERSION/docs/oss/attribution.md)
|
||||
[COPYRIGHT](https://forge.maximumdirect.net/base-layer/configkit/src/tag/VERSION/COPYRIGHT) | [LICENSE](https://forge.maximumdirect.net/base-layer/configkit/src/tag/VERSION/LICENSE) | [ATTRIBUTION](https://forge.maximumdirect.net/base-layer/configkit/src/tag/VERSION/docs/oss/attribution.md)
|
||||
```
|
||||
|
||||
Replace `VERSION` with the full tag and confirm the three target files exist in
|
||||
@@ -127,7 +130,7 @@ Push only that committed candidate to the literal authoritative URL. This does
|
||||
not follow local tags:
|
||||
|
||||
```sh
|
||||
git push --no-follow-tags https://gitea.maximumdirect.net/eric/ConfigKit.git HEAD:refs/heads/main
|
||||
git push --no-follow-tags ssh://git@forge.maximumdirect.net:22222/base-layer/configkit.git HEAD:refs/heads/main
|
||||
```
|
||||
|
||||
ReleaseKit requires authoritative `main` to equal this candidate before it
|
||||
@@ -228,8 +231,8 @@ consumer_dir=$(mktemp -d)
|
||||
(
|
||||
cd "$consumer_dir"
|
||||
go mod init example.invalid/configkit-release-check
|
||||
GOPRIVATE=gitea.maximumdirect.net GOPROXY=direct go get "gitea.maximumdirect.net/eric/ConfigKit@$release_version"
|
||||
go list -m -f '{{.Path}} {{.Version}}' gitea.maximumdirect.net/eric/ConfigKit
|
||||
GOWORK=off GOPROXY=direct go get "go.maximumdirect.net/configkit@$release_version"
|
||||
GOWORK=off go list -m -f '{{.Path}} {{.Version}}' go.maximumdirect.net/configkit
|
||||
)
|
||||
```
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# Vanity Module Path Migration
|
||||
|
||||
Status: target settled; implementation has not begun.
|
||||
Status: repository implementation complete and locally verified. Exact-revision
|
||||
remote consumer verification awaits availability of the migrated commit.
|
||||
Planning baseline: `21c9bc0ad0315c4ac96268b487a52376558a18d7`.
|
||||
|
||||
This roadmap defines the target and work needed to adopt
|
||||
@@ -201,3 +202,44 @@ application adoption, and release publication are separate outcomes. No push,
|
||||
tag, or downstream change is authorized merely by completing this roadmap.
|
||||
|
||||
No significant open decision remains for this migration.
|
||||
|
||||
## Implementation And Verification
|
||||
|
||||
The module declaration and all ConfigKit self-imports now use
|
||||
`go.maximumdirect.net/configkit`, including internal packages, external-package
|
||||
tests, maintained examples, and benchmarks. The import-boundary predicates and
|
||||
root-type reflection expectations use the new prefix. Review of every changed
|
||||
Go hunk confirmed only the intended module-prefix replacements and publication
|
||||
URL expectation; no loading behavior or public symbol names changed.
|
||||
|
||||
`releasekit.json`, its profile test, and the runbook now use the retained Forge
|
||||
SSH publication endpoint, matching the existing effective `origin` push URL.
|
||||
The runbook distinguishes that transport from Forge HTTPS browser links and
|
||||
vanity-path consumer retrieval. README and the consumer guide identify the new
|
||||
import path; migration guidance covers named-type identity and historical tags.
|
||||
|
||||
The Go minimum, dependency/tool versions, and `go.sum` are unchanged. Historical
|
||||
release records, accepted ADRs, adopted policies, and upstream attribution were
|
||||
left intact. Remaining old ConfigKit path references describe the migration's
|
||||
baseline, consumer upgrade instructions, or historical releases.
|
||||
|
||||
Local validation passed on Linux with Go 1.26.10 and cached dependencies:
|
||||
|
||||
```sh
|
||||
GOTOOLCHAIN=local GOPROXY=off GOTELEMETRY=off ./scripts/check.sh
|
||||
GOTOOLCHAIN=local GOPROXY=off GOTELEMETRY=off go mod tidy -diff
|
||||
GOTOOLCHAIN=local GOPROXY=off GOTELEMETRY=off go test -race ./...
|
||||
```
|
||||
|
||||
The everyday check included maintained examples, documentation links, root type
|
||||
ownership, dependency boundaries, and the release profile. Module/package
|
||||
inspection reported the new main-module identity and no old ConfigKit imports
|
||||
in the assembled test dependency graph. The module-selected ReleaseKit built
|
||||
outside the checkout and reported v0.4.2. Module tidiness produced no diff.
|
||||
|
||||
No push or release was performed. A fresh remote consumer has not yet installed
|
||||
the migrated revision, because that revision has not been published to the remote.
|
||||
The earlier infrastructure checks remain preliminary evidence only. Once the
|
||||
commit is available through an authorized push, the one-time exact-revision
|
||||
consumer check described above can verify retrieval and public-API compilation
|
||||
without a local replacement; it remains separate from release completion.
|
||||
|
||||
Reference in New Issue
Block a user