Skip to content

Commit 03ae5c9

Browse files
authored
Merge pull request #5846 from dmvolod/issue-5845-fix-version
fix: Get version from the BuildInfo.Main.Version if not found in deps and build flag
2 parents 0fe722e + 9c68bd2 commit 03ae5c9

File tree

4 files changed

+82
-11
lines changed

4 files changed

+82
-11
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,4 @@ site/.hugo_build.lock
3131

3232
# goreleaser artifacts
3333
**/dist/
34+
/output/

api/provenance/provenance.go

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,21 @@ var (
1919
// During a release, this will be set to the release tag, e.g. "kustomize/v4.5.7"
2020
version = developmentVersion
2121
// build date in ISO8601 format, output of $(date -u +'%Y-%m-%dT%H:%M:%SZ')
22-
buildDate = "unknown"
22+
buildDate = unknown
2323
)
2424

25-
// This default value, (devel), matches
26-
// the value debug.BuildInfo uses for an unset main module version.
27-
const developmentVersion = "(devel)"
25+
const (
26+
// This default value, (devel), matches
27+
// the value debug.BuildInfo uses for an unset main module version.
28+
developmentVersion = "(devel)"
29+
30+
// ModulePath is kustomize module path, defined in kustomize/go.mod
31+
ModulePath = "sigs.k8s.io/kustomize/kustomize/v5"
32+
33+
// This is default value, unknown, substituted when
34+
// the value can't be determined from debug.BuildInfo.
35+
unknown = "unknown"
36+
)
2837

2938
// Provenance holds information about the build of an executable.
3039
type Provenance struct {
@@ -47,7 +56,7 @@ func GetProvenance() Provenance {
4756
p := Provenance{
4857
BuildDate: buildDate,
4958
Version: version,
50-
GitCommit: "unknown",
59+
GitCommit: unknown,
5160
GoOs: runtime.GOOS,
5261
GoArch: runtime.GOARCH,
5362
GoVersion: runtime.Version(),
@@ -62,24 +71,37 @@ func GetProvenance() Provenance {
6271
// We could consider adding other info such as the commit date in the future.
6372
if setting.Key == "vcs.revision" {
6473
p.GitCommit = setting.Value
74+
break
6575
}
6676
}
77+
p.Version = FindVersion(info, p.Version)
78+
79+
return p
80+
}
6781

82+
// FindVersion searches for a version in the depth of dependencies including replacements,
83+
// otherwise, it tries to get version from debug.BuildInfo Main.
84+
func FindVersion(info *debug.BuildInfo, version string) string {
6885
for _, dep := range info.Deps {
69-
if dep != nil && dep.Path == "sigs.k8s.io/kustomize/kustomize/v5" {
70-
if dep.Version != "devel" {
86+
if dep != nil && dep.Path == ModulePath {
87+
if dep.Version == developmentVersion {
7188
continue
7289
}
7390
v, err := GetMostRecentTag(*dep)
7491
if err != nil {
7592
fmt.Printf("failed to get most recent tag for %s: %v\n", dep.Path, err)
7693
continue
7794
}
78-
p.Version = v
95+
96+
return v
7997
}
8098
}
8199

82-
return p
100+
if version == developmentVersion && info.Main.Version != "" {
101+
return info.Main.Version
102+
}
103+
104+
return version
83105
}
84106

85107
func GetMostRecentTag(m debug.Module) (string, error) {

api/provenance/provenance_test.go

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,60 @@ func TestProvenance_Semver(t *testing.T) {
4949

5050
func mockModule(version string) debug.Module {
5151
return debug.Module{
52-
Path: "sigs.k8s.io/kustomize/kustomize/v5",
52+
Path: provenance.ModulePath,
5353
Version: version,
5454
Replace: nil,
5555
}
5656
}
5757

58+
func mockBuildInfo(mainVersion, depsVersion string) *debug.BuildInfo {
59+
module := mockModule(depsVersion)
60+
61+
return &debug.BuildInfo{
62+
Main: debug.Module{
63+
Version: mainVersion,
64+
},
65+
Deps: []*debug.Module{
66+
&module,
67+
},
68+
}
69+
}
70+
71+
func TestFindVersion(t *testing.T) {
72+
tests := []struct {
73+
name string
74+
version string
75+
buildInfo *debug.BuildInfo
76+
expectedVersion string
77+
}{
78+
{
79+
name: "The version from LD_FLAGS is not overridden by main and dependencies versions",
80+
version: "v2.3.4",
81+
buildInfo: mockBuildInfo("v1.2.3", "(devel)"),
82+
expectedVersion: "v2.3.4",
83+
},
84+
{
85+
name: "The version from LD_FLAGS is overridden by the main version",
86+
version: "(devel)",
87+
buildInfo: mockBuildInfo("v1.2.3", "(devel)"),
88+
expectedVersion: "v1.2.3",
89+
},
90+
{
91+
name: "The version from LD_FLAGS is overridden by the version from dependencies",
92+
version: "(devel)",
93+
buildInfo: mockBuildInfo("v1.2.3", "v1.2.3-0.20210101010101-abcdefabcdef"),
94+
expectedVersion: "v1.2.2",
95+
},
96+
}
97+
98+
for _, tt := range tests {
99+
t.Run(tt.name, func(t *testing.T) {
100+
version := provenance.FindVersion(tt.buildInfo, tt.version)
101+
assert.Equal(t, tt.expectedVersion, version)
102+
})
103+
}
104+
}
105+
58106
func TestGetMostRecentTag(t *testing.T) {
59107
tests := []struct {
60108
name string

releasing/create-release.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ function build_kustomize_binary {
4141
release_dir=$2
4242
echo "build release artifacts to $release_dir"
4343

44-
mkdir -p "output"
44+
mkdir -p output
4545
# build date in ISO8601 format
4646
build_date=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
4747
for os in linux darwin windows; do

0 commit comments

Comments
 (0)