package build import ( "context" "fmt" "io" "os" "path/filepath" "gitea.maximumdirect.net/eric/ReleaseKit/internal/candidate" "gitea.maximumdirect.net/eric/ReleaseKit/internal/gotool" "gitea.maximumdirect.net/eric/ReleaseKit/internal/releaseidentity" "gitea.maximumdirect.net/eric/ReleaseKit/internal/tempdir" ) func CandidateCallback(spec *Spec, output io.Writer) func(context.Context, candidate.Candidate, *gotool.Owner) 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, owner *gotool.Owner) error { moduleSubdir, err := filepath.Rel(captured.RepositoryDir, captured.ModuleDir) if err != nil { return fmt.Errorf("resolve captured module path: %w", err) } identity := releaseidentity.Identity{ Selection: releaseidentity.Selection{ RepositoryDir: captured.RepositoryDir, ModuleDir: captured.ModuleDir, ModuleSubdir: filepath.ToSlash(moduleSubdir), }, ModulePath: captured.ModulePath, Version: captured.Version, Tag: captured.Tag, NotePath: filepath.ToSlash(filepath.Join(moduleSubdir, "docs", "releases", captured.Version+".md")), } 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 = BuildResolved(ctx, Request{ Identity: identity, Spec: selected, OutputDir: temporaryDir, Output: output, ToolOwner: owner, }) if err != nil { return fmt.Errorf("build candidate: %w", err) } return nil } }