42 lines
1.8 KiB
Markdown
42 lines
1.8 KiB
Markdown
# Source tag publication
|
|
|
|
Use `releasekit.Publish` to validate a committed candidate and push its exact
|
|
annotated source tag:
|
|
|
|
```go
|
|
result, err := releasekit.Publish(ctx, releasekit.ReleaseRequest{
|
|
RepositoryDir: "/work/project",
|
|
Product: "Example",
|
|
Version: "v1.2.3",
|
|
AdditionalChecks: func(ctx context.Context, candidate releasekit.Candidate) error {
|
|
return runProjectChecks(ctx, candidate.RepositoryDir)
|
|
},
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Println(result.Version, result.CandidateCommit, result.TagObject)
|
|
```
|
|
|
|
Publication captures a clean candidate on `main`, validates its committed
|
|
release note, and checks the selected remote before running candidate checks.
|
|
It always runs `go test -mod=readonly -count=1 ./...` with the available
|
|
compatible local Go toolchain. It then calls `AdditionalChecks` once when
|
|
supplied. The standard suite cannot be replaced; move product-specific behavior
|
|
into `AdditionalChecks` and remove repeated standard-suite commands from custom
|
|
checks. A failed suite or additional check prevents tag creation, and wrapped
|
|
errors preserve their causes.
|
|
|
|
If `Build` selects targets, ReleaseKit verifies them after the standard suite
|
|
and additional checks, before creating the tag. The operation then rechecks the
|
|
candidate and remote guards, creates an annotated tag for the captured commit,
|
|
and pushes only that tag object.
|
|
|
|
A successful result means Git confirmed the push or an exact authoritative tag
|
|
query confirmed it after a push error. The local tag is retained after a failed
|
|
push. `PublicationState` distinguishes a known failure, conflict, confirmed
|
|
publication, and unresolved outcome. Resolve an unknown result against the
|
|
captured endpoint before retrying; see the [maintainer procedure](../release.md)
|
|
for the recovery steps. The [CLI contract](../cli.md) documents command output
|
|
and exit statuses.
|