Plan Go toolchain updates for releases

This commit is contained in:
2026-10-08 13:33:43 +00:00
parent c0605fab44
commit 5aafd943b4

View File

@@ -47,13 +47,20 @@ best effort. ReleaseKit's other optional checks, including formatting,
Markdown, module-distribution, and file-size checks, remain unselected unless Markdown, module-distribution, and file-size checks, remain unselected unless
a separate decision establishes a distinct need for them. a separate decision establishes a distinct need for them.
The release tool is selected at a known version and prepared before offline At each release preparation, select the newest Go version available in the
candidate validation. The `go` executable used by ReleaseKit must be a development environment and advance ConfigKit's `go.mod` `go` directive to
maintained Go 1.25 patch with native race prerequisites available: ReleaseKit that version. This deliberately raises ConfigKit's minimum Go version for
sets `GOTOOLCHAIN=local` for its child commands, so ConfigKit's existing consumers when the selected version is newer. Use the same selected Go
`CONFIGKIT_BASELINE_TOOLCHAIN` environment selection cannot serve as the executable to build the pinned ReleaseKit tool and to run ReleaseKit's
validation mechanism. Dependency and tool preparation may use the network; validation, with native race prerequisites available. ReleaseKit sets
candidate validation remains offline and readonly. `GOTOOLCHAIN=local` for its child commands, so ConfigKit's existing
`CONFIGKIT_BASELINE_TOOLCHAIN` environment selection cannot select a
different validation toolchain. Prepare the tool and dependencies before
offline candidate validation; the `go.mod` change belongs in the committed
candidate. Review any minimum-Go increase as a compatibility change and
explain its consumer impact in the release note. Before v1.0.0, an intentional
increase requires a minor rather than patch release under ConfigKit's
[versioning policy](../policy/release.md#versioning-and-compatibility).
ReleaseKit owns generic candidate guards, test and compile coordination, tag ReleaseKit owns generic candidate guards, test and compile coordination, tag
creation, publication, and push recovery. ConfigKit owns version selection, creation, publication, and push recovery. ConfigKit owns version selection,
@@ -64,14 +71,16 @@ release process adds no ConfigKit public API or runtime use of ReleaseKit.
## Changes from the baseline ## Changes from the baseline
- Add the minimal profile and a documented, versioned tool-preparation method. - Add the minimal profile and a documented, versioned tool-preparation method.
Keep the selected release command small and do not re-create generic Git The release runbook should select the newest Go available in the development
guards or Go check sequencing in a wrapper. environment, advance `go.mod`, and build ReleaseKit with that same Go
executable. Keep the selected release command small and do not re-create
generic Git guards or Go check sequencing in a wrapper.
- Revise the [release policy](../policy/release.md) and - Revise the [release policy](../policy/release.md) and
[maintainer procedure](../release.md) for candidate publication to `main` [maintainer procedure](../release.md) for candidate publication to `main`
before ReleaseKit's command, its effective-push-URL check, toolchain before ReleaseKit's command, its effective-push-URL check, recurring Go
preparation, one selected validation pass, tag-only publication, and version selection and compatibility review, one selected validation pass,
ReleaseKit's failure states. Preserve ConfigKit's source-only deliverables, tag-only publication, and ReleaseKit's failure states. Preserve ConfigKit's
compatibility rules, supported targets, and no-CI completion rule. source-only deliverables, supported targets, and no-CI completion rule.
- Update the [development guide](../development.md) so its release guidance and - Update the [development guide](../development.md) so its release guidance and
task-to-test map describe the adopted process. Keep ordinary development task-to-test map describe the adopted process. Keep ordinary development
checks separate from release gates; review other references to the retired checks separate from release gates; review other references to the retired
@@ -84,8 +93,9 @@ release process adds no ConfigKit public API or runtime use of ReleaseKit.
- Verify the migration without publishing a real ConfigKit version: exercise - Verify the migration without publishing a real ConfigKit version: exercise
the selected profile and release command against an isolated candidate and the selected profile and release command against an isolated candidate and
temporary Git remote, including a validation failure and successful tag temporary Git remote, including a validation failure and successful tag
publication. Confirm the maintained Go 1.25 patch runs the selected gates publication. Confirm that the selected Go executable matches the candidate's
once. Do not make a separate successful CI run a release condition. `go.mod` directive, builds ReleaseKit, and runs the selected gates once. Do
not make a separate successful CI run a release condition.
Historical tags and release notes remain unchanged. This adoption work does Historical tags and release notes remain unchanged. This adoption work does
not itself authorize publication of a ConfigKit version. not itself authorize publication of a ConfigKit version.
@@ -95,11 +105,12 @@ not itself authorize publication of a ConfigKit version.
### How should ConfigKit pin and acquire ReleaseKit? ### How should ConfigKit pin and acquire ReleaseKit?
**Recommendation:** Use a separately installed ReleaseKit executable pinned to **Recommendation:** Use a separately installed ReleaseKit executable pinned to
v0.2.0 for the first migration, and document acquisition before offline v0.2.0 for the first migration, built with the Go version selected during
validation. ConfigKit has no hosted-delivery workflow to coordinate with a CI release preparation. Document acquisition before offline validation. ConfigKit
tool pin, so this keeps ReleaseKit and its tool dependencies out of ConfigKit's has no hosted-delivery workflow to coordinate with a CI tool pin, so this
library module graph. The [OSS policy](../policy/oss.md) does not require an keeps ReleaseKit and its tool dependencies out of ConfigKit's library module
attribution entry merely for using a development tool. graph. The [OSS policy](../policy/oss.md) does not require an attribution entry
merely for using a development tool.
**Viable alternative:** Declare ReleaseKit in ConfigKit's `go.mod` and use its **Viable alternative:** Declare ReleaseKit in ConfigKit's `go.mod` and use its
module-selected tooling convention. This gives local publication and any future module-selected tooling convention. This gives local publication and any future