in cmd/sync-tags/gomod.go [36:119]
func updateGomodWithTaggedDependencies(tag string, depsRepo []string, semverTag bool) (bool, error) {
found := map[string]bool{}
changed := false
depPackages, err := depsImportPaths(depsRepo)
if err != nil {
return changed, err
}
for _, dep := range depsRepo {
depPath := filepath.Join("..", dep)
dr, err := gogit.PlainOpen(depPath)
if err != nil {
return changed, fmt.Errorf("failed to open dependency repo at %q: %v", depPath, err)
}
depPkg, err := fullPackageName(depPath)
if err != nil {
return changed, fmt.Errorf("failed to get package at %s: %v", depPath, err)
}
commit, commitTime, err := localOrPublishedTaggedCommitHashAndTime(dr, tag)
if err != nil {
return changed, fmt.Errorf("failed to get tag %s for %q: %v", tag, depPkg, err)
}
rev := commit.String()
pseudoVersionOrTag := fmt.Sprintf("v0.0.0-%s-%s", commitTime.UTC().Format("20060102150405"), rev[:12])
if semverTag {
pseudoVersionOrTag = tag
}
// check if we have the pseudoVersion/tag published already. if we don't, package it up
// and save to local mod download cache.
if err := packageDepToGoModCache(depPath, depPkg, rev, pseudoVersionOrTag, commitTime); err != nil {
return changed, fmt.Errorf("failed to package %s dependency: %v", depPkg, err)
}
requireCommand := exec.Command("go", "mod", "edit", "-fmt", "-require", fmt.Sprintf("%s@%s", depPkg, pseudoVersionOrTag))
requireCommand.Env = append(os.Environ(), "GO111MODULE=on")
requireCommand.Stdout = os.Stdout
requireCommand.Stderr = os.Stderr
if err := requireCommand.Run(); err != nil {
return changed, fmt.Errorf("unable to pin %s in the require section of go.mod to %s: %v", depPkg, pseudoVersionOrTag, err)
}
replaceCommand := exec.Command("go", "mod", "edit", "-fmt", "-replace", fmt.Sprintf("%s=%s@%s", depPkg, depPkg, pseudoVersionOrTag))
replaceCommand.Env = append(os.Environ(), "GO111MODULE=on")
replaceCommand.Stdout = os.Stdout
replaceCommand.Stderr = os.Stderr
if err := replaceCommand.Run(); err != nil {
return changed, fmt.Errorf("unable to pin %s in the replace section of go.mod to %s: %v", depPkg, pseudoVersionOrTag, err)
}
found[dep] = true
fmt.Printf("Bumping %s in go.mod to %s.\n", depPkg, rev)
changed = true
}
for _, dep := range depsRepo {
if !found[dep] {
fmt.Printf("Warning: dependency %s not found in go.mod.\n", dep)
}
}
downloadCommand2 := exec.Command("go", "mod", "download")
downloadCommand2.Env = append(os.Environ(), "GO111MODULE=on", fmt.Sprintf("GOPRIVATE=%s", depPackages), "GOPROXY=https://proxy.golang.org")
downloadCommand2.Stdout = os.Stdout
downloadCommand2.Stderr = os.Stderr
if err := downloadCommand2.Run(); err != nil {
return changed, fmt.Errorf("error running go mod download: %v", err)
}
tidyCommand := exec.Command("go", "mod", "tidy")
tidyCommand.Env = append(os.Environ(), "GO111MODULE=on", fmt.Sprintf("GOPROXY=file://%s/pkg/mod/cache/download", os.Getenv("GOPATH")), fmt.Sprintf("GOPRIVATE=%s", depPackages))
tidyCommand.Stdout = os.Stdout
tidyCommand.Stderr = os.Stderr
if err := tidyCommand.Run(); err != nil {
return changed, fmt.Errorf("unable to run go mod tidy: %v", err)
}
fmt.Printf("Completed running go mod tidy for %s.\n", tag)
return changed, nil
}