Observe original Git objects consistently
This commit is contained in:
@@ -15,6 +15,7 @@ import (
|
||||
|
||||
"go.maximumdirect.net/releasekit/internal/artifact"
|
||||
"go.maximumdirect.net/releasekit/internal/candidate"
|
||||
"go.maximumdirect.net/releasekit/internal/git"
|
||||
"go.maximumdirect.net/releasekit/internal/gotool"
|
||||
"go.maximumdirect.net/releasekit/internal/releaseidentity"
|
||||
"go.maximumdirect.net/releasekit/internal/tempdir"
|
||||
@@ -102,14 +103,14 @@ func BuildResolved(ctx context.Context, request Request) (Result, error) {
|
||||
return result, fmt.Errorf("resolve module directory: %w", err)
|
||||
}
|
||||
result.ModuleDir = moduleDir
|
||||
commit, err := gitCommit(ctx, repositoryDir)
|
||||
commit, err := git.CaptureHead(ctx, repositoryDir)
|
||||
if err != nil {
|
||||
return result, err
|
||||
return result, fmt.Errorf("read source commit: %w", err)
|
||||
}
|
||||
result.CandidateCommit = commit
|
||||
cleanBefore, err := cleanSource(ctx, repositoryDir)
|
||||
statusBefore, err := git.WorktreeStatus(ctx, repositoryDir)
|
||||
if err != nil {
|
||||
return result, err
|
||||
return result, fmt.Errorf("inspect build source: %w", err)
|
||||
}
|
||||
|
||||
if len(result.Targets) == 0 {
|
||||
@@ -192,30 +193,18 @@ func BuildResolved(ctx context.Context, request Request) (Result, error) {
|
||||
if err := checkVersion(ctx, smokePath, settings.BinaryName, identity.Version); err != nil {
|
||||
return result, err
|
||||
}
|
||||
commitAfter, err := gitCommit(ctx, repositoryDir)
|
||||
commitAfter, err := git.CaptureHead(ctx, repositoryDir)
|
||||
if err != nil {
|
||||
return result, err
|
||||
return result, fmt.Errorf("read source commit: %w", err)
|
||||
}
|
||||
cleanAfter, err := cleanSource(ctx, repositoryDir)
|
||||
statusAfter, err := git.WorktreeStatus(ctx, repositoryDir)
|
||||
if err != nil {
|
||||
return result, err
|
||||
return result, fmt.Errorf("inspect build source: %w", err)
|
||||
}
|
||||
result.SourceVerified = cleanBefore && cleanAfter && commitAfter == commit
|
||||
result.SourceVerified = statusBefore == "" && statusAfter == "" && commitAfter == commit
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func gitCommit(ctx context.Context, repositoryDir string) (string, error) {
|
||||
command := exec.CommandContext(ctx, "git", "-C", repositoryDir, "rev-parse", "--verify", "HEAD^{commit}")
|
||||
output, err := command.Output()
|
||||
if err != nil {
|
||||
if ctx.Err() != nil {
|
||||
return "", fmt.Errorf("read source commit: %w", ctx.Err())
|
||||
}
|
||||
return "", fmt.Errorf("read source commit: %w", err)
|
||||
}
|
||||
return strings.TrimSpace(string(output)), nil
|
||||
}
|
||||
|
||||
func buildTarget(ctx context.Context, goTool *gotool.Tool, moduleDir, mainPackage, outputPath, version string, target Target) error {
|
||||
ldflags := "-s -w -X " + versioncontract.InjectedVersionLinkerSymbol + "=" + version
|
||||
err := goTool.Run(ctx, moduleDir, gotool.Static, gotool.Target{OS: target.OS, Arch: target.Arch}, nil,
|
||||
@@ -252,15 +241,3 @@ func checkVersion(ctx context.Context, binaryPath, binaryName, version string) e
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func cleanSource(ctx context.Context, repositoryDir string) (bool, error) {
|
||||
command := exec.CommandContext(ctx, "git", "-C", repositoryDir, "status", "--porcelain", "--untracked-files=all")
|
||||
output, err := command.Output()
|
||||
if err != nil {
|
||||
if ctx.Err() != nil {
|
||||
return false, fmt.Errorf("inspect build source: %w", ctx.Err())
|
||||
}
|
||||
return false, fmt.Errorf("inspect build source: %w", err)
|
||||
}
|
||||
return len(output) == 0, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user