Skip to content

Commit b253f2f

Browse files
authored
Merge pull request #13 from xmudrii/non-v0-tags-fix-5
Fix Go code to properly handle non-v0/v1 tags
2 parents 2de25a8 + 6627e85 commit b253f2f

File tree

3 files changed

+48
-4
lines changed

3 files changed

+48
-4
lines changed

cmd/gomod-zip/zip.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ import (
2424
"io"
2525
"os"
2626
"path/filepath"
27+
"strings"
2728

29+
"github.com/blang/semver/v4"
2830
"github.com/golang/glog"
2931
"golang.org/x/mod/modfile"
3032
modzip "golang.org/x/mod/zip"
@@ -62,8 +64,16 @@ func main() {
6264
glog.Fatalf("pseudo-version cannot be empty")
6365
}
6466

67+
pseudoSemver, err := semver.Parse(strings.TrimPrefix(*pseudoVersion, "v"))
68+
if err != nil {
69+
glog.Fatalf("error parsing pseudo-version: %v", err)
70+
}
71+
6572
packagePath := fmt.Sprintf("%s/src/%s", os.Getenv("GOPATH"), *packageName)
6673
cacheDir := fmt.Sprintf("%s/pkg/mod/cache/download/%s/@v", os.Getenv("GOPATH"), *packageName)
74+
if pseudoSemver.Major >= 2 {
75+
cacheDir = fmt.Sprintf("%s/v%d", cacheDir, pseudoSemver.Major)
76+
}
6777

6878
moduleFile, err := getModuleFile(packagePath, *pseudoVersion)
6979
if err != nil {

cmd/sync-tags/gomod.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"strings"
2828
"time"
2929

30+
"github.com/blang/semver/v4"
3031
gogit "github.com/go-git/go-git/v5"
3132
"github.com/go-git/go-git/v5/plumbing"
3233
)
@@ -61,6 +62,8 @@ func updateGomodWithTaggedDependencies(tag string, depsRepo []string, semverTag
6162
rev := commit.String()
6263
pseudoVersionOrTag := fmt.Sprintf("v0.0.0-%s-%s", commitTime.UTC().Format("20060102150405"), rev[:12])
6364

65+
// TODO(xmudrii): We are configured to always hit this case because we have --publish-semver-tags set to true,
66+
// so pseudo-version is not important. At some point, it would be nice to fix this.
6467
if semverTag {
6568
pseudoVersionOrTag = tag
6669
}
@@ -153,7 +156,16 @@ type ModuleInfo struct {
153156
}
154157

155158
func packageDepToGoModCache(depPath, depPkg, commit, pseudoVersionOrTag string, commitTime time.Time) error {
159+
pseudoSemver, err := semver.Parse(strings.TrimPrefix(pseudoVersionOrTag, "v"))
160+
if err != nil {
161+
return fmt.Errorf("error parsing pseudo-version: %w", err)
162+
}
163+
156164
cacheDir := fmt.Sprintf("%s/pkg/mod/cache/download/%s/@v", os.Getenv("GOPATH"), depPkg)
165+
if pseudoSemver.Major >= 2 {
166+
cacheDir = fmt.Sprintf("%s/v%d", cacheDir, pseudoSemver.Major)
167+
}
168+
157169
goModFile := fmt.Sprintf("%s/%s.mod", cacheDir, pseudoVersionOrTag)
158170

159171
if _, err := os.Stat(goModFile); err == nil {

cmd/sync-tags/main.go

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,20 @@ func main() {
256256
glog.Fatalf("Failed to get tag %s: %v", bName, err)
257257
}
258258
rev := commit.String()
259+
260+
pseudoSemver, err := semver.Parse(strings.TrimPrefix(name, "v"))
261+
if err != nil {
262+
glog.Fatalf("error parsing pseudo-version: %v", err)
263+
}
264+
259265
pseudoVersion := fmt.Sprintf("v0.0.0-%s-%s", commitTime.UTC().Format("20060102150405"), rev[:12])
266+
if pseudoSemver.Major >= 2 {
267+
if len(pseudoSemver.Pre) == 0 {
268+
pseudoVersion = fmt.Sprintf("v%d.%d.%d-0.%s-%s", pseudoSemver.Major, pseudoSemver.Minor, pseudoSemver.Patch+1, commitTime.UTC().Format("20060102150405"), rev[:12])
269+
} else {
270+
pseudoVersion = fmt.Sprintf("v%s.0.%s-%s", strings.TrimPrefix(name, "v"), commitTime.UTC().Format("20060102150405"), rev[:12])
271+
}
272+
}
260273

261274
fmt.Printf("Clearing cache for local tag %s.\n", pseudoVersion)
262275
if err := cleanCacheForTag(pseudoVersion); err != nil {
@@ -353,9 +366,9 @@ func main() {
353366
if publishSemverTag {
354367
fmt.Printf("Tagging %v as %q.\n", bh, semverTag)
355368
err = createAnnotatedTag(bh, semverTag, tag.Tagger.When, dedent.Dedent(fmt.Sprintf(`
356-
Kubernetes release %s
369+
kcp release %s
357370
358-
Based on https://github.com/kubernetes/kubernetes/releases/tag/%s
371+
Based on https://github.com/kcp-dev/kcp/releases/tag/%s
359372
`, name, name)))
360373
if err != nil {
361374
glog.Fatalf("Failed to create tag %q: %v", semverTag, err)
@@ -366,9 +379,9 @@ func main() {
366379
// create non-semver prefixed annotated tag
367380
fmt.Printf("Tagging %v as %q.\n", bh, bName)
368381
err = createAnnotatedTag(bh, bName, tag.Tagger.When, dedent.Dedent(fmt.Sprintf(`
369-
Kubernetes release %s
382+
kcp release %s
370383
371-
Based on https://github.com/kubernetes/kubernetes/releases/tag/%s
384+
Based on https://github.com/kcp-dev/kcp/releases/tag/%s
372385
`, name, name)))
373386
if err != nil {
374387
glog.Fatalf("Failed to create tag %q: %v", bName, err)
@@ -567,7 +580,16 @@ func cleanCacheForTag(tag string) error {
567580
if err != nil {
568581
return fmt.Errorf("failed to get package at %s: %w", dir, err)
569582
}
583+
584+
pseudoSemver, err := semver.Parse(strings.TrimPrefix(tag, "v"))
585+
if err != nil {
586+
return fmt.Errorf("error parsing pseudo-version: %w", err)
587+
}
588+
570589
cacheDir := fmt.Sprintf("%s/pkg/mod/cache/download/%s/@v", os.Getenv("GOPATH"), pkg)
590+
if pseudoSemver.Major >= 2 {
591+
cacheDir = fmt.Sprintf("%s/v%d", cacheDir, pseudoSemver.Major)
592+
}
571593

572594
goModFile := fmt.Sprintf("%s/%s.mod", cacheDir, tag)
573595
if _, err := os.Stat(goModFile); err == nil {

0 commit comments

Comments
 (0)