Build from the selected module
This commit is contained in:
51
build.go
51
build.go
@@ -4,7 +4,9 @@ import (
|
||||
"context"
|
||||
"io"
|
||||
|
||||
"gitea.maximumdirect.net/eric/ReleaseKit/internal/artifact"
|
||||
internalbuild "gitea.maximumdirect.net/eric/ReleaseKit/internal/build"
|
||||
"gitea.maximumdirect.net/eric/ReleaseKit/internal/releaseidentity"
|
||||
)
|
||||
|
||||
// Target identifies one explicit Go operating-system and architecture pair.
|
||||
@@ -28,7 +30,7 @@ type BuildRequest struct {
|
||||
ModuleDir string
|
||||
Version string // stable vMAJOR.MINOR.PATCH value injected at link time.
|
||||
Spec BuildSpec // application package, artifact name, and targets.
|
||||
OutputDir string // output location; empty selects <repository>/dist.
|
||||
OutputDir string // output location; relative paths use ModuleDir and empty selects <module>/dist.
|
||||
Output io.Writer // optional build progress destination.
|
||||
}
|
||||
|
||||
@@ -59,22 +61,27 @@ type BuildResult struct {
|
||||
Compiler string // output of the selected local Go toolchain's version command.
|
||||
}
|
||||
|
||||
// Build compiles the selected targets with Version injected through buildinfo.
|
||||
// It uses the available compatible local Go toolchain, applies ReleaseKit's
|
||||
// readonly offline build settings, preserves effective cache and tool settings,
|
||||
// and verifies the version command on the Go host before succeeding. An empty
|
||||
// target set records source identity without running the Go toolchain. Errors
|
||||
// return partial build facts in the result.
|
||||
// Build resolves the selected module's working-tree identity, then compiles the
|
||||
// selected targets with Version injected through buildinfo. It uses the
|
||||
// available compatible local Go toolchain, applies ReleaseKit's readonly
|
||||
// offline build settings, preserves effective cache and tool settings, and
|
||||
// verifies the version command on the Go host before succeeding. Relative
|
||||
// output paths use ModuleDir; an empty path selects its dist directory. An
|
||||
// empty target set records source identity without running the Go toolchain.
|
||||
// Errors return partial build facts in the result.
|
||||
func Build(ctx context.Context, request BuildRequest) (BuildResult, error) {
|
||||
result, err := internalbuild.Build(ctx, internalbuild.Request{
|
||||
RepositoryDir: request.RepositoryDir,
|
||||
ModuleDir: request.ModuleDir,
|
||||
Version: request.Version,
|
||||
Spec: *internalBuildSpec(&request.Spec),
|
||||
OutputDir: request.OutputDir,
|
||||
Output: request.Output,
|
||||
public := BuildResult{Version: request.Version}
|
||||
identity, err := releaseidentity.FromWorkingTree(ctx, request.RepositoryDir, request.ModuleDir, request.Version)
|
||||
if err != nil {
|
||||
return public, err
|
||||
}
|
||||
result, err := internalbuild.BuildResolved(ctx, internalbuild.Request{
|
||||
Identity: identity,
|
||||
Spec: *internalBuildSpec(&request.Spec),
|
||||
OutputDir: request.OutputDir,
|
||||
Output: request.Output,
|
||||
})
|
||||
public := BuildResult{
|
||||
public = BuildResult{
|
||||
RepositoryDir: result.RepositoryDir,
|
||||
ModuleDir: result.ModuleDir,
|
||||
ModulePath: result.ModulePath,
|
||||
@@ -82,14 +89,14 @@ func Build(ctx context.Context, request BuildRequest) (BuildResult, error) {
|
||||
CandidateCommit: result.CandidateCommit,
|
||||
SourceVerified: result.SourceVerified,
|
||||
Version: result.Version,
|
||||
MainPackage: result.MainPackage,
|
||||
BinaryName: result.BinaryName,
|
||||
MainPackage: result.Settings.MainPackage,
|
||||
BinaryName: result.Settings.BinaryName,
|
||||
OutputDir: result.OutputDir,
|
||||
Compiler: result.Compiler,
|
||||
Targets: make([]Target, 0, len(result.Targets)),
|
||||
Targets: make([]Target, 0, len(result.Settings.Targets)),
|
||||
Artifacts: make([]BuildArtifact, 0, len(result.Artifacts)),
|
||||
}
|
||||
for _, target := range result.Targets {
|
||||
for _, target := range result.Settings.Targets {
|
||||
public.Targets = append(public.Targets, Target{OS: target.OS, Arch: target.Arch})
|
||||
}
|
||||
for _, artifact := range result.Artifacts {
|
||||
@@ -115,8 +122,10 @@ func internalBuildSpec(spec *BuildSpec) *internalbuild.Spec {
|
||||
}
|
||||
|
||||
func internalBuildResult(result BuildResult) *internalbuild.Result {
|
||||
converted := &internalbuild.Result{RepositoryDir: result.RepositoryDir, ModuleDir: result.ModuleDir, ModulePath: result.ModulePath, Tag: result.Tag, CandidateCommit: result.CandidateCommit, SourceVerified: result.SourceVerified, Version: result.Version, MainPackage: result.MainPackage, BinaryName: result.BinaryName, OutputDir: result.OutputDir, Compiler: result.Compiler}
|
||||
for _, target := range result.Targets {
|
||||
input := internalBuildSpec(&BuildSpec{MainPackage: result.MainPackage, BinaryName: result.BinaryName, Targets: result.Targets})
|
||||
settings := artifact.NormalizeSettings(input.MainPackage, input.BinaryName, input.Targets)
|
||||
converted := &internalbuild.Result{RepositoryDir: result.RepositoryDir, ModuleDir: result.ModuleDir, ModulePath: result.ModulePath, Tag: result.Tag, CandidateCommit: result.CandidateCommit, SourceVerified: result.SourceVerified, Settings: settings, Version: result.Version, MainPackage: settings.MainPackage, BinaryName: settings.BinaryName, OutputDir: result.OutputDir, Compiler: result.Compiler}
|
||||
for _, target := range settings.Targets {
|
||||
converted.Targets = append(converted.Targets, internalbuild.Target{OS: target.OS, Arch: target.Arch})
|
||||
}
|
||||
for _, artifact := range result.Artifacts {
|
||||
|
||||
Reference in New Issue
Block a user