Separate Go minimum from release toolchain
This commit is contained in:
@@ -9,17 +9,18 @@ current release procedure authoritative until the replacement is working.
|
|||||||
Follow the task-specific reading guide in [development.md](../development.md)
|
Follow the task-specific reading guide in [development.md](../development.md)
|
||||||
and avoid adding gates, compatibility promises, or restrictions beyond the
|
and avoid adding gates, compatibility promises, or restrictions beyond the
|
||||||
roadmap and adopted policies. Stages 3–5 are one documentation-and-machinery
|
roadmap and adopted policies. Stages 3–5 are one documentation-and-machinery
|
||||||
cutover; their intermediate state is not a release candidate.
|
cutover; do not commit or hand off their intermediate state as a release-ready
|
||||||
|
candidate.
|
||||||
|
|
||||||
## Stage 1: Select Go and declare the release tool
|
## Stage 1: Select Go and declare the release tool
|
||||||
|
|
||||||
1. Identify the newest Go executable available in the development environment
|
1. Identify the latest locally available patch in the newest stable Go series
|
||||||
when implementing this stage. Make it the `go` on `PATH`, verify it with
|
available in the development environment. Make it the `go` on `PATH` and
|
||||||
`GOTOOLCHAIN=local go version`, and advance ConfigKit's `go.mod` `go`
|
verify it with `GOTOOLCHAIN=local go version`. Keep ConfigKit's current
|
||||||
directive to its full version. Do not substitute a newer downloaded
|
`go.mod` `go` minimum until the release-workflow cutover in Stage 4: the
|
||||||
toolchain during later validation. Record the resulting minimum-Go increase
|
existing release checker still selects Go 1.25 and cannot validate a module
|
||||||
for the next release's compatibility review; before v1.0.0, an intentional
|
requiring Go 1.26. Do not substitute an automatically downloaded toolchain
|
||||||
increase requires a minor release, not a patch release.
|
during later validation.
|
||||||
2. Using that same Go executable, add
|
2. Using that same Go executable, add
|
||||||
`gitea.maximumdirect.net/eric/ReleaseKit/cmd/releasekit@v0.2.0` as a
|
`gitea.maximumdirect.net/eric/ReleaseKit/cmd/releasekit@v0.2.0` as a
|
||||||
`go.mod` tool dependency (the Go `tool` directive and its module
|
`go.mod` tool dependency (the Go `tool` directive and its module
|
||||||
@@ -34,10 +35,13 @@ cutover; their intermediate state is not a release candidate.
|
|||||||
[OSS policy](../policy/oss.md); a tool used only for development and release
|
[OSS policy](../policy/oss.md); a tool used only for development and release
|
||||||
work does not by itself require an attribution entry.
|
work does not by itself require an attribution entry.
|
||||||
|
|
||||||
Completion evidence: `go.mod` selects the chosen Go version and the pinned
|
Completion evidence: `go.mod` retains its current Go minimum and selects the
|
||||||
ReleaseKit tool, `go.sum` is consistent, `go mod tidy` leaves no unintended
|
pinned ReleaseKit tool, `go.sum` is consistent, `go mod tidy` leaves no
|
||||||
changes, the module-selected executable builds with the selected Go, and the
|
unintended changes, the module-selected executable builds with the selected
|
||||||
ordinary offline Go suite still passes after dependencies are prepared.
|
local Go, and the ordinary offline Go suite still passes after dependencies
|
||||||
|
are prepared. If the new tool dependency itself requires a higher minimum,
|
||||||
|
handle that compatibility change together with the cutover rather than
|
||||||
|
leaving the current release checker unusable.
|
||||||
|
|
||||||
## Stage 2: Add ConfigKit's ReleaseKit profile
|
## Stage 2: Add ConfigKit's ReleaseKit profile
|
||||||
|
|
||||||
@@ -70,8 +74,11 @@ delivery configuration.
|
|||||||
baseline with the selected local Go executable, the current `go.mod`
|
baseline with the selected local Go executable, the current `go.mod`
|
||||||
minimum, the module-selected ReleaseKit CLI, its one race suite with
|
minimum, the module-selected ReleaseKit CLI, its one race suite with
|
||||||
test-time vet disabled, full vet, and Linux amd64/arm64 package compilation.
|
test-time vet disabled, full vet, and Linux amd64/arm64 package compilation.
|
||||||
State that preparation advances `go.mod` to the newest Go available in the
|
State that preparation records the initial stable release of the newest
|
||||||
development environment and reviews any minimum-version increase under
|
locally available Go series in `go.mod`, retaining a higher patch minimum
|
||||||
|
only when required by a dependency or specific correctness fix. Use the
|
||||||
|
latest locally available compatible patch in that series for ReleaseKit's
|
||||||
|
build and validation, and review any minimum-version increase under
|
||||||
existing compatibility rules. Keep dependency acquisition and tool build
|
existing compatibility rules. Keep dependency acquisition and tool build
|
||||||
before offline candidate validation; do not add a separate successful test
|
before offline candidate validation; do not add a separate successful test
|
||||||
or CI run as a publication prerequisite.
|
or CI run as a publication prerequisite.
|
||||||
@@ -89,16 +96,21 @@ stronger automated guards as current behavior.
|
|||||||
## Stage 4: Replace the maintainer release runbook
|
## Stage 4: Replace the maintainer release runbook
|
||||||
|
|
||||||
1. Revise [the runbook](../release.md) into copyable steps for the adopted
|
1. Revise [the runbook](../release.md) into copyable steps for the adopted
|
||||||
process. During preparation, select the newest Go executable available in
|
process. During this cutover, move `go.mod` from its current minimum to the
|
||||||
the development environment, keep it first on `PATH`, verify its version
|
first stable release of the newest Go series available in the development
|
||||||
with `GOTOOLCHAIN=local`, and update `go.mod` to that full version if needed.
|
environment (for example, `go 1.26.0` when using Go 1.26.8), unless a
|
||||||
|
dependency or specific correctness fix needs a higher patch minimum. Have
|
||||||
|
the runbook derive the series from `GOTOOLCHAIN=local go env GOVERSION` and
|
||||||
|
use `go mod edit` to record its `.0` release, without lowering an existing
|
||||||
|
required higher patch minimum. Keep that series' latest locally available
|
||||||
|
compatible patch first on `PATH` for both the tool build and validation.
|
||||||
Explain the minimum-Go compatibility impact and version choice, including
|
Explain the minimum-Go compatibility impact and version choice, including
|
||||||
the pre-v1.0.0 minor-release rule. Prepare dependencies, then build the
|
the pre-v1.0.0 minor-release rule. Prepare
|
||||||
module-selected `cmd/releasekit` with that executable into temporary storage
|
dependencies, then build the module-selected `cmd/releasekit` with that
|
||||||
outside the repository. Use the native executable for publication so its
|
executable into temporary storage outside the repository. Use the native
|
||||||
exit status and diagnostic state are preserved. Its child Go commands must
|
executable for publication so its exit status and diagnostic state are
|
||||||
find the same selected `go` on `PATH`; the old
|
preserved. Its child Go commands must find the same selected `go` on `PATH`;
|
||||||
`CONFIGKIT_BASELINE_TOOLCHAIN` selector cannot choose them.
|
the old `CONFIGKIT_BASELINE_TOOLCHAIN` selector cannot choose them.
|
||||||
2. Keep ordinary candidate preparation: check access to the authoritative
|
2. Keep ordinary candidate preparation: check access to the authoritative
|
||||||
remote, choose an unused stable version, review compatibility and content,
|
remote, choose an unused stable version, review compatibility and content,
|
||||||
write `docs/releases/<version>.md` with the exact ConfigKit first line and
|
write `docs/releases/<version>.md` with the exact ConfigKit first line and
|
||||||
@@ -151,8 +163,10 @@ profile wiring without duplicating ReleaseKit's generic behavior.
|
|||||||
|
|
||||||
## Stage 6: Exercise the migration without publishing ConfigKit
|
## Stage 6: Exercise the migration without publishing ConfigKit
|
||||||
|
|
||||||
1. Build ReleaseKit from the candidate's `go.mod` selection with the same Go
|
1. Build ReleaseKit from the candidate's `go.mod` selection with the latest
|
||||||
executable declared by that candidate. In disposable Git fixtures, use
|
selected local Go patch for that minimum's series. Use that same executable
|
||||||
|
for ReleaseKit's validation, without requiring its patch number to equal
|
||||||
|
the `go.mod` minimum. In disposable Git fixtures, use
|
||||||
ConfigKit's selected profile with only `expected_push_url` changed to a
|
ConfigKit's selected profile with only `expected_push_url` changed to a
|
||||||
temporary bare remote, and provide a matching committed fixture release
|
temporary bare remote, and provide a matching committed fixture release
|
||||||
note. Never push a ConfigKit tag or source commit to its real remote.
|
note. Never push a ConfigKit tag or source commit to its real remote.
|
||||||
|
|||||||
@@ -56,18 +56,20 @@ adding a runtime API. Review the resulting module changes and license
|
|||||||
treatment under the [OSS policy](../policy/oss.md); tooling use alone does not
|
treatment under the [OSS policy](../policy/oss.md); tooling use alone does not
|
||||||
require an attribution entry.
|
require an attribution entry.
|
||||||
|
|
||||||
At each release preparation, select the newest Go version available in the
|
At each release preparation, select the newest stable Go series available in
|
||||||
development environment and advance ConfigKit's `go.mod` `go` directive to
|
the development environment. Record that series' first stable release in
|
||||||
that version. This deliberately raises ConfigKit's minimum Go version for
|
ConfigKit's `go.mod` `go` directive (for example, `go 1.26.0` when using Go
|
||||||
consumers when the selected version is newer. Use the same selected Go
|
1.26.8), retaining a higher patch minimum when a dependency or specific
|
||||||
executable to build the pinned ReleaseKit tool and to run ReleaseKit's
|
correctness fix requires it. This directive is the consumer minimum, not the
|
||||||
validation, with native race prerequisites available. ReleaseKit sets
|
release toolchain version. Use the latest locally available patch in the
|
||||||
`GOTOOLCHAIN=local` for its child commands, so ConfigKit's existing
|
selected series to build the pinned ReleaseKit tool and run its validation,
|
||||||
`CONFIGKIT_BASELINE_TOOLCHAIN` environment selection cannot select a
|
provided it meets that minimum and has native race prerequisites available.
|
||||||
|
ReleaseKit sets `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
|
different validation toolchain. Prepare the tool and dependencies before
|
||||||
offline candidate validation; the `go.mod` change belongs in the committed
|
offline candidate validation; any `go.mod` change belongs in the committed
|
||||||
candidate. Review any minimum-Go increase as a compatibility change and
|
candidate. Review a minimum-Go increase as a compatibility change and explain
|
||||||
explain its consumer impact in the release note. Before v1.0.0, an intentional
|
its consumer impact in the release note. Before v1.0.0, an intentional
|
||||||
increase requires a minor rather than patch release under ConfigKit's
|
increase requires a minor rather than patch release under ConfigKit's
|
||||||
[versioning policy](../policy/release.md#versioning-and-compatibility).
|
[versioning policy](../policy/release.md#versioning-and-compatibility).
|
||||||
|
|
||||||
@@ -90,9 +92,9 @@ release process adds no ConfigKit public API or runtime use of ReleaseKit.
|
|||||||
- Add the minimal profile and declare ReleaseKit v0.2.0 as a tool dependency in
|
- Add the minimal profile and declare ReleaseKit v0.2.0 as a tool dependency in
|
||||||
`go.mod`, updating `go.sum` and reviewing its dependency and license impact.
|
`go.mod`, updating `go.sum` and reviewing its dependency and license impact.
|
||||||
Document how to build the module-selected tool before offline validation.
|
Document how to build the module-selected tool before offline validation.
|
||||||
The release runbook should select the newest Go available in the development
|
The release runbook should record the selected series' minimum in `go.mod`,
|
||||||
environment, advance `go.mod`, and build ReleaseKit with that same Go
|
use its latest locally available patch to build ReleaseKit and validate the
|
||||||
executable. Keep the selected release command small and do not re-create
|
candidate, and keep the selected release command small. Do not re-create
|
||||||
generic Git guards or Go check sequencing in a wrapper.
|
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`
|
||||||
@@ -113,9 +115,10 @@ 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 that the selected Go executable matches the candidate's
|
publication. Confirm that the candidate's `go.mod` records the selected
|
||||||
`go.mod` directive, builds ReleaseKit, and runs the selected gates once. Do
|
series' minimum or a required higher patch, and that the same selected Go
|
||||||
not make a separate successful CI run a release condition.
|
executable 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.
|
||||||
|
|||||||
Reference in New Issue
Block a user