Skip to content

Commit 8b182eb

Browse files
authored
add support to run go vendor commands (#28)
Signed-off-by: hectorj2f <[email protected]>
1 parent d7faf41 commit 8b182eb

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

pkg/run/gorun.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"log"
66
"os"
77
"os/exec"
8+
"path/filepath"
89
"strings"
910

1011
versionutil "k8s.io/apimachinery/pkg/util/version"
@@ -39,6 +40,52 @@ func GoModTidy(modroot, goVersion, compat string) (string, error) {
3940
return "", nil
4041
}
4142

43+
func findWorkspaceFile(dir string) (root string) {
44+
dir = filepath.Clean(dir)
45+
// Look for enclosing go.mod.
46+
for {
47+
f := filepath.Join(dir, "go.work")
48+
if fi, err := os.Stat(f); err == nil && !fi.IsDir() {
49+
return f
50+
}
51+
d := filepath.Dir(dir)
52+
if d == dir {
53+
break
54+
}
55+
dir = d
56+
}
57+
return ""
58+
}
59+
60+
func findGoWork(modroot string) string {
61+
switch gowork := os.Getenv("GOWORK"); gowork {
62+
case "off":
63+
return ""
64+
case "", "auto":
65+
return findWorkspaceFile(modroot)
66+
default:
67+
return gowork
68+
}
69+
}
70+
71+
func GoVendor(dir string) (string, error) {
72+
if findGoWork(dir) == "" {
73+
log.Print("Running go mod vendor...")
74+
cmd := exec.Command("go", "mod", "vendor")
75+
if bytes, err := cmd.CombinedOutput(); err != nil {
76+
return strings.TrimSpace(string(bytes)), err
77+
}
78+
} else {
79+
log.Print("Running go work vendor...")
80+
cmd := exec.Command("go", "work", "vendor")
81+
if bytes, err := cmd.CombinedOutput(); err != nil {
82+
return strings.TrimSpace(string(bytes)), err
83+
}
84+
}
85+
86+
return "", nil
87+
}
88+
4289
func GoGetModule(name, version, modroot string) (string, error) {
4390
cmd := exec.Command("go", "get", fmt.Sprintf("%s@%s", name, version)) //nolint:gosec
4491
cmd.Dir = modroot

pkg/update/update.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,13 @@ func DoUpdate(pkgVersions map[string]*types.Package, cfg *types.Config) (*modfil
159159
}
160160
}
161161

162+
if _, err := os.Stat(path.Join(cfg.Modroot, "vendor")); err == nil {
163+
output, err := run.GoVendor(cfg.Modroot)
164+
if err != nil {
165+
return nil, fmt.Errorf("failed to run 'go vendor': %v with output: %v", err, output)
166+
}
167+
}
168+
162169
return newModFile, nil
163170
}
164171

0 commit comments

Comments
 (0)