61 lines
2.4 KiB
Go
61 lines
2.4 KiB
Go
package releasekit
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
|
|
internalpreparation "gitea.maximumdirect.net/eric/ReleaseKit/internal/preparation"
|
|
"gitea.maximumdirect.net/eric/ReleaseKit/internal/releaseidentity"
|
|
)
|
|
|
|
// TaggedCheckoutRequest selects a stable tag and the full Git object ID
|
|
// expected by an external build or CI event. An empty Remote selects origin.
|
|
type TaggedCheckoutRequest struct {
|
|
RepositoryDir string
|
|
Version string
|
|
Remote string
|
|
ExpectedCommit string
|
|
}
|
|
|
|
// PrepareTaggedCheckout fetches Version from Remote, verifies that its peeled
|
|
// commit matches ExpectedCommit, and checks out that commit detached. This
|
|
// operation mutates the selected local repository; use it for disposable
|
|
// checkouts where tag-fetch and checkout conflicts can be resolved by the
|
|
// caller. It does not publish a tag or hosted content.
|
|
func PrepareTaggedCheckout(ctx context.Context, request TaggedCheckoutRequest) error {
|
|
return internalpreparation.PrepareTaggedCheckout(ctx, internalpreparation.TaggedCheckoutRequest{
|
|
RepositoryDir: request.RepositoryDir,
|
|
Version: request.Version,
|
|
Remote: request.Remote,
|
|
ExpectedCommit: request.ExpectedCommit,
|
|
})
|
|
}
|
|
|
|
// DependencyPreparationRequest selects the repository module whose dependencies
|
|
// should be prepared.
|
|
type DependencyPreparationRequest struct {
|
|
RepositoryDir string
|
|
// ModuleDir selects a repository-relative module directory; empty selects
|
|
// the repository root.
|
|
ModuleDir string
|
|
}
|
|
|
|
// PrepareBuildDependencies runs `go mod download` in the selected module with
|
|
// workspace discovery disabled and the locally available compatible Go
|
|
// toolchain selected. It may access module networks and updates the Go module
|
|
// cache using the caller's Go proxy, private-module, credential, and cache
|
|
// settings. If required checksums are missing, the Go command may update
|
|
// go.sum. Cancellation and Go command failures are returned to the caller.
|
|
func PrepareBuildDependencies(ctx context.Context, request DependencyPreparationRequest) error {
|
|
if strings.TrimSpace(request.RepositoryDir) == "" {
|
|
return errors.New("repository directory is required")
|
|
}
|
|
selection, err := releaseidentity.ResolveSelection(request.RepositoryDir, request.ModuleDir)
|
|
if err != nil {
|
|
return fmt.Errorf("resolve dependency preparation module: %w", err)
|
|
}
|
|
return internalpreparation.PrepareBuildDependencies(ctx, selection.ModuleDir)
|
|
}
|