Carry module identity through candidate results
This commit is contained in:
42
check.go
42
check.go
@@ -18,9 +18,13 @@ var ErrInvalidVersion = candidate.ErrInvalidVersion
|
||||
var ErrUnexpectedPushURL = publish.ErrUnexpectedPushURL
|
||||
|
||||
// Candidate identifies one committed local source revision selected for
|
||||
// validation.
|
||||
// validation. ModuleDir is the absolute selected module directory, ModulePath
|
||||
// is its declared Go import path, and Tag is the complete derived Git tag.
|
||||
type Candidate struct {
|
||||
RepositoryDir string
|
||||
ModuleDir string
|
||||
ModulePath string
|
||||
Tag string
|
||||
Commit string
|
||||
Version string
|
||||
}
|
||||
@@ -30,9 +34,12 @@ type Candidate struct {
|
||||
// no remote availability claim.
|
||||
type ReleaseRequest struct {
|
||||
RepositoryDir string
|
||||
Product string
|
||||
Version string
|
||||
Remote string
|
||||
// ModuleDir selects a repository-relative module directory; empty selects
|
||||
// the repository root.
|
||||
ModuleDir string
|
||||
Product string
|
||||
Version string
|
||||
Remote string
|
||||
// ExpectedPushURL optionally requires Publish's resolved push URL to match
|
||||
// this string exactly before validation or tag creation. Check ignores this
|
||||
// publication-only expectation. A mismatch returns ErrUnexpectedPushURL.
|
||||
@@ -107,9 +114,12 @@ type GoValidationSpec struct {
|
||||
}
|
||||
|
||||
// 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. It always runs the offline Go test suite with the
|
||||
// available compatible local Go toolchain and Go host target, then calls
|
||||
// worktree and index on main, a selected module declaration and module-local
|
||||
// committed note matching Product and Version, and an unused local tag. An
|
||||
// empty ModuleDir selects the repository root. The module declaration
|
||||
// determines the full Git tag for the semantic Version. It always runs the
|
||||
// offline Go test suite with the available compatible local Go toolchain and
|
||||
// Go host target, then calls
|
||||
// AdditionalChecks when supplied. Validation.Go.Race runs that one suite with
|
||||
// the race detector, Validation.Go.FullVet runs go vet after the suite instead
|
||||
// of test-time vet, and Validation.Go.CompileTargets compiles all packages for
|
||||
@@ -139,19 +149,27 @@ type GoValidationSpec struct {
|
||||
func Check(ctx context.Context, request ReleaseRequest) (Candidate, error) {
|
||||
checked, err := candidate.Check(ctx, candidateRequest(request))
|
||||
if err != nil {
|
||||
return Candidate{}, convertValidationError(err)
|
||||
return publicCandidate(checked), convertValidationError(err)
|
||||
}
|
||||
return publicCandidate(checked), nil
|
||||
}
|
||||
|
||||
func publicCandidate(checked candidate.Candidate) Candidate {
|
||||
return Candidate{
|
||||
RepositoryDir: checked.RepositoryDir,
|
||||
ModuleDir: checked.ModuleDir,
|
||||
ModulePath: checked.ModulePath,
|
||||
Tag: checked.Tag,
|
||||
Commit: checked.Commit,
|
||||
Version: checked.Version,
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
func candidateRequest(request ReleaseRequest) candidate.Request {
|
||||
fileSize := internalFileSizeSettings(request.Validation.FileSize)
|
||||
result := candidate.Request{
|
||||
RepositoryDir: request.RepositoryDir,
|
||||
ModuleDir: request.ModuleDir,
|
||||
Product: request.Product,
|
||||
Version: request.Version,
|
||||
Validation: validation.Settings{
|
||||
@@ -203,10 +221,6 @@ func candidateChecks(checks func(context.Context, Candidate) error) func(context
|
||||
return nil
|
||||
}
|
||||
return func(ctx context.Context, captured candidate.Candidate) error {
|
||||
return checks(ctx, Candidate{
|
||||
RepositoryDir: captured.RepositoryDir,
|
||||
Commit: captured.Commit,
|
||||
Version: captured.Version,
|
||||
})
|
||||
return checks(ctx, publicCandidate(captured))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user