Upgrade ReleaseKit and align release profiles with SSH

This commit is contained in:
2026-11-03 15:09:19 +00:00
parent 3934038b98
commit a74fcb2004
11 changed files with 60 additions and 31 deletions

View File

@@ -24,9 +24,10 @@ core-only, ConfigKit-only, and composed applications.
## Go compatibility ## Go compatibility
All three modules declare a consumer minimum of Go 1.26.0. The root module also All three modules declare a consumer minimum of Go 1.26.0. The root module also
selects ReleaseKit v0.4.2 as a Go tool, which makes that tool's module graph part selects ReleaseKit v0.8.0 (`go.maximumdirect.net/releasekit`) as a Go tool, which
of the root consumer module requirements even though production packages do not makes that tool's module graph part of the root consumer module requirements
import ReleaseKit. The [release policy](../policy/release.md#consumer-minimum-and-release-toolchain) even though production packages do not import ReleaseKit. The
[release policy](../policy/release.md#consumer-minimum-and-release-toolchain)
defines the support assumption. Maintainers use Go 1.26.8 for validation and defines the support assumption. Maintainers use Go 1.26.8 for validation and
publication; see the [release procedure](../release.md#release-toolchain). publication; see the [release procedure](../release.md#release-toolchain).

View File

@@ -139,16 +139,16 @@ License and notices: [CC BY-SA 4.0](licenses/CC-BY-SA-4.0.txt) |
## ReleaseKit ## ReleaseKit
Selected module: `gitea.maximumdirect.net/eric/ReleaseKit` at `v0.4.2` (selected Go tool; not a runtime import). Selected module: `go.maximumdirect.net/releasekit` at `v0.8.0` (selected Go tool; not a runtime import).
Copyright (C) 2026 Eric Rakestraw Copyright (C) 2026 Eric Rakestraw
SPDX-License-Identifier: LGPL-3.0-or-later SPDX-License-Identifier: LGPL-3.0-or-later
License and notices: [LGPL v3.0](../../LICENSE) | License and notices: [LGPL v3.0](../../LICENSE) |
[LICENSE](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8/LICENSE). [LICENSE](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f/LICENSE).
[Source](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8). [Source](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f).
## Goldmark ## Goldmark

View File

@@ -25,7 +25,7 @@ additional release requirements.
CommandKit independently versions three source-only Go modules: the root core, CommandKit independently versions three source-only Go modules: the root core,
`integrations/ckconfig`, and `integrations/ckprompt`. Standard CLI behavior is `integrations/ckconfig`, and `integrations/ckprompt`. Standard CLI behavior is
exposed by consuming applications; CommandKit does not declare binary exposed by consuming applications; CommandKit does not declare binary
deliverables or a cross-platform build matrix. ReleaseKit v0.4.2 is selected as deliverables or a cross-platform build matrix. ReleaseKit v0.8.0 is selected as
the maintainer publication tool. The [release procedure](../release.md) owns the maintainer publication tool. The [release procedure](../release.md) owns
the selected-module workflow, release order, and repository-specific commands; the selected-module workflow, release order, and repository-specific commands;
the integration adds no application command family or runtime ReleaseKit the integration adds no application command family or runtime ReleaseKit

View File

@@ -15,17 +15,18 @@ release runs only the root module's default suite; it need not run suites for
independently released integrations. independently released integrations.
Use branch `main`, remote `origin`, and expected effective push endpoint Use branch `main`, remote `origin`, and expected effective push endpoint
`https://gitea.maximumdirect.net/eric/CommandKit.git`. The selected module profile `ssh://git@forge.maximumdirect.net:22222/base-layer/commandkit.git`. The selected
enforces the endpoint. The maintainer needs the selected module profile enforces the endpoint. The maintainer needs the selected
[release toolchain](#release-toolchain), Git push access, and a POSIX shell. [release toolchain](#release-toolchain), Git push access, and a POSIX shell.
This procedure follows the [release policy](policy/release.md); release-note This procedure follows the [release policy](policy/release.md); release-note
footers follow the [OSS discoverability policy](policy/oss.md#discoverability). footers follow the [OSS discoverability policy](policy/oss.md#discoverability).
ReleaseKit v0.4.2 owns candidate validation, publication guards, tag creation, ReleaseKit v0.8.0 (`go.maximumdirect.net/releasekit`) owns candidate validation,
tag publication, and outcome reporting. Its pinned public contracts are the publication guards, tag creation, tag publication, and outcome reporting.
[CLI reference](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8/docs/cli.md), Its pinned public contracts are the
[profile reference](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8/docs/config.md), [CLI reference](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f/docs/cli.md),
and [publication guide](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8/docs/consumers/publish.md). [profile reference](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f/docs/config.md),
and [publication guide](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f/docs/consumers/publish.md).
The repository selects one default module suite per invocation. The launcher The repository selects one default module suite per invocation. The launcher
bootstraps the native tool into ignored `.releasekit/` storage and delegates to bootstraps the native tool into ignored `.releasekit/` storage and delegates to
its `publish` command. its `publish` command.
@@ -73,7 +74,7 @@ All three release profiles explicitly select the repository-root `COPYRIGHT`,
`LICENSE`, and `docs/oss/attribution.md` through `validation.shared_files`. `LICENSE`, and `docs/oss/attribution.md` through `validation.shared_files`.
ReleaseKit requires these committed files to exist in the candidate even when ReleaseKit requires these committed files to exist in the candidate even when
no optional file checks are enabled. The list does not enable content checks no optional file checks are enabled. The list does not enable content checks
or expand Go validation scope; see the pinned [profile reference](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/b96262eb0ce9c8f2eb3e948a5841db2b799bc91b/docs/config.md). or expand Go validation scope; see the pinned [profile reference](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f/docs/config.md).
Each integration also distributes its own `COPYRIGHT`, `LICENSE`, and Each integration also distributes its own `COPYRIGHT`, `LICENSE`, and
`docs/oss/attribution.md`. These module-local materials are separate from the `docs/oss/attribution.md`. These module-local materials are separate from the
@@ -121,14 +122,41 @@ proxy availability, or downstream installation.
## Completion and ambiguous publication ## Completion and ambiguous publication
A successful push to the expected endpoint completes the source release. On an A successful push to the expected endpoint completes the source release.
ambiguous result, use the exact endpoint, full tag, and annotated tag object ReleaseKit also attempts to save private publication evidence under the
reported by that invocation. Confirm endpoint resolution has not changed, then repository's Git common directory, shared by linked worktrees. It reports the
query only that exact tag ref. Compare the remote annotated tag-object ID with saved record path or a recording warning separately from publication status;
the reported object: an exact match confirms publication, a different object is a storage failure does not change publication status. Records can contain
a conflict, successful output without the ref proves absence at that endpoint, credential-bearing endpoints. Retain them privately while recovery is needed
and remove them when their recovery value expires; retention is maintainer-owned.
On an ambiguous result, use the recovery command printed for that invocation's
saved record. To discover records and explicitly select the matching attempt,
the bootstrapped executable can also be used from the repository root:
```sh
./.releasekit/bin/releasekit publication-attempts --repo .
./.releasekit/bin/releasekit reconcile --record /absolute/path/to/attempt.json
```
Replace the example record path with the saved path for the intended attempt.
Discovery lists local evidence without querying remotes or selecting an attempt.
Reconciliation observes the recorded endpoint, full tag, and tag object without
rerunning candidate validation or changing tags. It distinguishes confirmed
publication, current absence, conflict, and an unresolved observation. Current
absence does not prove that a version was never published. The pinned
[CLI reference](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f/docs/cli.md#recover-a-saved-publication-attempt-or-discover-local-attempts)
owns recovery statuses and structured output; the
[publication guide](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/23203f235cc414c4ffe0fd3941030eb0c9f9943f/docs/consumers/publish.md#retain-and-reconcile-publication-evidence)
describes record storage and recovery entry points.
If no usable record was saved, use the exact endpoint, full tag, and annotated
tag object reported by that invocation. Query only that exact tag ref at the
captured endpoint. An exact tag-object match confirms publication, a different
object is a conflict, successful output without the ref shows current absence,
and a failed query leaves the result unresolved. Do not infer the captured and a failed query leaves the result unresolved. Do not infer the captured
endpoint's state from another remote or a rewritten URL. endpoint's state from another remote or a rewritten URL. Resolve unknown
publication state before retrying.
ReleaseKit may retain a local tag after a failed push. Remove an unpublished ReleaseKit may retain a local tag after a failed push. Remove an unpublished
local tag only after proving absence at the captured endpoint and confirming local tag only after proving absence at the captured endpoint and confirming

4
go.mod
View File

@@ -9,10 +9,10 @@ require (
) )
require ( require (
gitea.maximumdirect.net/eric/ReleaseKit v0.4.2 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/yuin/goldmark/v2 v2.1.6 // indirect github.com/yuin/goldmark/v2 v2.1.6 // indirect
go.maximumdirect.net/releasekit v0.8.0 // indirect
golang.org/x/mod v0.40.0 // indirect golang.org/x/mod v0.40.0 // indirect
) )
tool gitea.maximumdirect.net/eric/ReleaseKit/cmd/releasekit tool go.maximumdirect.net/releasekit/cmd/releasekit

4
go.sum
View File

@@ -1,5 +1,3 @@
gitea.maximumdirect.net/eric/ReleaseKit v0.4.2 h1:P2eDQ29BgyYqHnaz5MV+vzOk7r3s8py2y9k8JISFtJ0=
gitea.maximumdirect.net/eric/ReleaseKit v0.4.2/go.mod h1:LVodqNQ3OIKv9NBq+fFeyMByd1lHY25YOmmpah/NaNI=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
@@ -10,6 +8,8 @@ github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY=
github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/yuin/goldmark/v2 v2.1.6 h1:igy0q9JcqovoFXFx/XjtU8sHVhcUHavPj2sA3EoKJUE= github.com/yuin/goldmark/v2 v2.1.6 h1:igy0q9JcqovoFXFx/XjtU8sHVhcUHavPj2sA3EoKJUE=
github.com/yuin/goldmark/v2 v2.1.6/go.mod h1:G6M4/qOFtfn01/o14BU1UR2Lo5N3S9Qo7xCuz/sHjGQ= github.com/yuin/goldmark/v2 v2.1.6/go.mod h1:G6M4/qOFtfn01/o14BU1UR2Lo5N3S9Qo7xCuz/sHjGQ=
go.maximumdirect.net/releasekit v0.8.0 h1:hSaHPbUI7tAhnolfbu7UMj2fvmm9FGBY+jhkygdbxR0=
go.maximumdirect.net/releasekit v0.8.0/go.mod h1:QE4BLrAhVJTzi+/YTcVl21K/qZp9ojRLg5kuoy3Zb44=
go.yaml.in/yaml/v4 v4.0.0-rc.6 h1:1h7H1ohdUh93/FyE4YaDa1Zh64K6VVbjF4K6WUxMtH4= go.yaml.in/yaml/v4 v4.0.0-rc.6 h1:1h7H1ohdUh93/FyE4YaDa1Zh64K6VVbjF4K6WUxMtH4=
go.yaml.in/yaml/v4 v4.0.0-rc.6/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= go.yaml.in/yaml/v4 v4.0.0-rc.6/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0=
golang.org/x/mod v0.40.0 h1:hUv+3cXcdRHz08UmSiOob7sadHig73uo5bkXxQ/tvUs= golang.org/x/mod v0.40.0 h1:hUv+3cXcdRHz08UmSiOob7sadHig73uo5bkXxQ/tvUs=

View File

@@ -2,7 +2,7 @@
"product": "CommandKit ckconfig", "product": "CommandKit ckconfig",
"module_dir": "integrations/ckconfig", "module_dir": "integrations/ckconfig",
"remote": "origin", "remote": "origin",
"expected_push_url": "https://gitea.maximumdirect.net/eric/CommandKit.git", "expected_push_url": "ssh://git@forge.maximumdirect.net:22222/base-layer/commandkit.git",
"validation": { "validation": {
"shared_files": [ "shared_files": [
"COPYRIGHT", "COPYRIGHT",

View File

@@ -2,7 +2,7 @@
"product": "CommandKit ckprompt", "product": "CommandKit ckprompt",
"module_dir": "integrations/ckprompt", "module_dir": "integrations/ckprompt",
"remote": "origin", "remote": "origin",
"expected_push_url": "https://gitea.maximumdirect.net/eric/CommandKit.git", "expected_push_url": "ssh://git@forge.maximumdirect.net:22222/base-layer/commandkit.git",
"validation": { "validation": {
"shared_files": [ "shared_files": [
"COPYRIGHT", "COPYRIGHT",

View File

@@ -2,7 +2,7 @@
"product": "CommandKit", "product": "CommandKit",
"module_dir": ".", "module_dir": ".",
"remote": "origin", "remote": "origin",
"expected_push_url": "https://gitea.maximumdirect.net/eric/CommandKit.git", "expected_push_url": "ssh://git@forge.maximumdirect.net:22222/base-layer/commandkit.git",
"validation": { "validation": {
"shared_files": [ "shared_files": [
"COPYRIGHT", "COPYRIGHT",

View File

@@ -40,7 +40,7 @@ GOTOOLCHAIN=local \
go build \ go build \
-mod=readonly \ -mod=readonly \
-o "$commandkit_root/.releasekit/bin/releasekit" \ -o "$commandkit_root/.releasekit/bin/releasekit" \
gitea.maximumdirect.net/eric/ReleaseKit/cmd/releasekit go.maximumdirect.net/releasekit/cmd/releasekit
GOWORK=off GOTOOLCHAIN=local exec "$commandkit_root/.releasekit/bin/releasekit" publish \ GOWORK=off GOTOOLCHAIN=local exec "$commandkit_root/.releasekit/bin/releasekit" publish \
--repo "$commandkit_root" \ --repo "$commandkit_root" \

View File

@@ -17,7 +17,7 @@ import (
) )
const ( const (
releasePackage = "gitea.maximumdirect.net/eric/ReleaseKit/cmd/releasekit" releasePackage = "go.maximumdirect.net/releasekit/cmd/releasekit"
releaseVersion = "v1.2.3-rc.1+local" releaseVersion = "v1.2.3-rc.1+local"
) )