Skip to content

Commit f5c5082

Browse files
(feat): Allow inform release go module version for external apis
1 parent dd84707 commit f5c5082

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

pkg/plugins/golang/repository.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
// module and goMod arg just enough of the output of `go mod edit -json` for our purposes
3030
type goMod struct {
3131
Module module
32+
Go string
3233
}
3334
type module struct {
3435
Path string
@@ -91,3 +92,32 @@ func FindCurrentRepo() (string, error) {
9192
defer os.Remove("go.mod") // clean up after ourselves
9293
return findGoModulePath()
9394
}
95+
96+
// GetGoVersion returns the Go version from go.mod.
97+
func GetGoVersion() (string, error) {
98+
cmd := exec.Command("go", "mod", "edit", "-json")
99+
cmd.Env = append(cmd.Env, os.Environ()...)
100+
out, err := cmd.Output()
101+
if err != nil {
102+
var exitErr *exec.ExitError
103+
if errors.As(err, &exitErr) {
104+
err = fmt.Errorf("%s", string(exitErr.Stderr))
105+
}
106+
return "", err
107+
}
108+
mod := goMod{}
109+
if err = json.Unmarshal(out, &mod); err != nil {
110+
return "", fmt.Errorf("failed to unmarshal go.mod: %w", err)
111+
}
112+
return mod.Go, nil
113+
}
114+
115+
// SetGoVersion sets the Go version in go.mod.
116+
func SetGoVersion(version string) error {
117+
cmd := exec.Command("go", "mod", "edit", "-go="+version)
118+
cmd.Env = append(cmd.Env, os.Environ()...)
119+
if out, err := cmd.CombinedOutput(); err != nil {
120+
return fmt.Errorf("failed to set go version: %s: %w", string(out), err)
121+
}
122+
return nil
123+
}

0 commit comments

Comments
 (0)