38 lines
1007 B
Go
38 lines
1007 B
Go
package build
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
|
|
"gitea.maximumdirect.net/eric/ReleaseKit/internal/candidate"
|
|
"gitea.maximumdirect.net/eric/ReleaseKit/internal/tempdir"
|
|
)
|
|
|
|
func CandidateCallback(spec *Spec, output io.Writer) func(context.Context, candidate.Candidate) error {
|
|
if spec == nil || len(spec.Targets) == 0 {
|
|
return nil
|
|
}
|
|
selected := *spec
|
|
selected.Targets = append([]Target(nil), spec.Targets...)
|
|
return func(ctx context.Context, captured candidate.Candidate) error {
|
|
temporaryDir, err := tempdir.Outside(captured.RepositoryDir, "releasekit-candidate-build-")
|
|
if err != nil {
|
|
return fmt.Errorf("create temporary candidate build output: %w", err)
|
|
}
|
|
defer os.RemoveAll(temporaryDir)
|
|
_, err = Build(ctx, Request{
|
|
RepositoryDir: captured.RepositoryDir,
|
|
Version: captured.Version,
|
|
Spec: selected,
|
|
OutputDir: temporaryDir,
|
|
Output: output,
|
|
})
|
|
if err != nil {
|
|
return fmt.Errorf("build candidate: %w", err)
|
|
}
|
|
return nil
|
|
}
|
|
}
|