6.1 KiB
Pending notes for the next release
Status: pending release preparation. This feature does not select a release
version or move this draft to docs/releases/<version>.md.
Release individual Go modules
ReleaseKit operations can now select one Go module within a Git repository.
Omitted module selection retains the repository-root default. A selected module
is identified by both its repository-relative physical directory and its own
declared module path. ReleaseKit derives a semantic version's complete Git tag
from that identity, including Go's /v2 major-version convention. For example,
v2.1.0 for a module declared as example.com/project/integrations/core/v2
uses integrations/core/v2.1.0, whether the module is physically stored at
integrations/core or integrations/core/v2. Its release note stays at the
physical module's docs/releases/v2.1.0.md path.
The public Check, Publish, Build, and Deliver requests add ModuleDir;
results expose the resolved module directory, declared module path, and complete
tag alongside existing commit and outcome evidence. Version remains the
stable semantic version used in note titles, binary version output, and asset
names. Git publication and hosted delivery use the complete tag. Product
commands receive both repository and module paths, and candidate callbacks
receive the module identity.
ValidationSpec.SharedFiles and profile validation.shared_files allow a
repository-relative list of committed shared files to join optional file
checks. Omission or null selects the available root COPYRIGHT, LICENSE,
and docs/oss/attribution.md defaults; an explicit list replaces those
defaults, and [] selects none. Explicit files must exist even when file
checks are disabled. This selection does not enable a check.
Profiles add module_dir for physical module selection. The CLI's ci-deliver
now takes a full Git TAG; its final path component supplies the semantic
version. The optional --prepared mode verifies an already prepared checkout
without fetching or checking it out again. --expected-module binds a mapped
launcher selection to the selected profile. The public tagged-checkout request
renames Version to Tag and adds VerifyOnly; dependency preparation now
takes a DependencyPreparationRequest with repository and module directories.
DeliveryRequest.ExpectedTag binds delivery to the exact CI event tag before
building artifacts or contacting Gitea.
The private .releasekit-build.json receipt now requires schema version 1 and
binds artifacts to the module directory, declared module path, semantic
version, complete tag, source commit, normalized build settings, and artifact
declarations. Older and unversioned receipts are rejected; rebuild with the
updated build command before using deliver --assets DIR.
Relative build --output DIR and deliver --assets DIR paths both use the
selected module directory. Nested-module consumers can use the same relative
directory for building and retrying delivery; absolute directories remain usable.
The maintained multi-module example shares a
four-column release-modules.tsv and POSIX selector between its local launcher
and mapped Woodpecker workflow. The workflow verifies and detaches the triggering
tag before reading the mapping, profile, module files, or ReleaseKit version.
Retries therefore use the original tagged source after the default branch
changes. Root-only consumers can keep the ordinary profile and the simpler
root tag workflow without a map.
Consumer migration
Update callers, profiles, receipts, and CI declarations together for this clean interface cutover; compatibility shims and legacy receipt readers are not provided.
- Set
ModuleDirin Go requests ormodule_dirin profiles for a nested module. The selected directory must contain its owngo.mod; module paths and release tags are read from that declaration, not inferred from a folder name. KeepVersionas a semantic version in ordinary commands and API calls. - Update reads of result identity to use
ModuleDir,ModulePath, andTagwhere needed. Product commands can useRELEASEKIT_REPOSITORY_DIRandRELEASEKIT_MODULE_DIRto distinguish repository-level work from module-local checks. - Replace
TaggedCheckoutRequest.Versionwith the completeTag. SetVerifyOnlywhen a bootstrap step already verified and detached the event checkout. ChangePrepareBuildDependenciescalls to pass aDependencyPreparationRequest. - Add
module_dirand, when needed,validation.shared_filesto profiles. Recheck profile-relative and repository-relative paths. Prepare and commit each binary module'sgo.sumbefore tagging so dependency preparation leaves the tagged source clean for delivery verification. - Change
ci-deliver VERSIONinvocations to pass the full eventTAGand required--commit OID. Maintained bootstraps should use--preparedafter verifying the tag and commit. A mapped launcher should pass--expected-module DIR; the profile remains the source of selection. - Regenerate existing build receipts with the new
buildcommand before prebuilt delivery. Do not edit old receipts into the new format. - Root-module validation now excludes independently released nested modules from module-scoped file checks. Run a nested module's checks from that module when it is the release unit. Nested module fixtures remain available to the parent module's product tests.
ReleaseKit's current consumer minimum remains Go 1.26.0. Root-module releases retain their existing note path, unprefixed tags, profile defaults, and small root-only workflow. A successful push of the intended source tag remains the source-release completion point; hosted page and asset delivery remains asynchronous and may be retried from the same immutable tag. No live-service, deployment, or consumer-rollout gate is introduced.
For current behavior, see the API and consumer guides, CLI contract, configuration reference, Gitea integration, and ReleaseKit release procedure.