Integrate selected builds with candidate workflows

This commit is contained in:
2026-10-05 19:38:50 +00:00
parent 5d6a6d10bd
commit e98ee0f7b9
21 changed files with 848 additions and 31 deletions

View File

@@ -18,23 +18,26 @@ type Candidate struct {
Version string
}
// ReleaseRequest contains the local inputs used by Check. Remote is retained
// for publication operations; Check makes no remote availability claim.
// ReleaseRequest contains the inputs used to validate and optionally build one
// local candidate. Remote is retained for publication operations; Check makes
// no remote availability claim.
type ReleaseRequest struct {
RepositoryDir string
Product string
Version string
Remote string
Validate func(context.Context, Candidate) error
Build *BuildSpec // optional selected-target build after validation.
Output io.Writer
}
// Check validates one local, committed release candidate. It requires a clean
// worktree and index on main, a committed note matching Product and Version,
// and an unused local tag. If Validate is nil, the offline Go test suite runs.
// It rechecks branch, HEAD, worktree, index, and local tag state after
// validation. Success establishes local candidate evidence only; it does not
// establish remote availability.
// If Build selects targets, Check builds them after validation in temporary
// storage outside the worktree, then rechecks branch, HEAD, worktree, index,
// and local tag state. Success establishes local candidate evidence only; it
// does not establish remote availability.
func Check(ctx context.Context, request ReleaseRequest) (Candidate, error) {
var validate func(context.Context, candidate.Candidate) error
if request.Validate != nil {
@@ -51,6 +54,7 @@ func Check(ctx context.Context, request ReleaseRequest) (Candidate, error) {
Product: request.Product,
Version: request.Version,
Validate: validate,
AfterValidate: candidateBuildCallback(request.Build, request.Output),
Output: request.Output,
})
if err != nil {