Skip to content

Commit 814ce91

Browse files
authored
feat(api): VersionLabel template function (#3062)
* feat(api): VersionLabel template function * f
1 parent 79d9013 commit 814ce91

File tree

4 files changed

+148
-0
lines changed

4 files changed

+148
-0
lines changed

api/pkg/template/execute.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,10 @@ func (e *Engine) getFuncMap() template.FuncMap {
143143
"ConfigOptionFilename": e.configOptionFilename,
144144
"ConfigOptionNotEquals": e.configOptionNotEquals,
145145

146+
// License and release data template functions
146147
"LicenseFieldValue": e.licenseFieldValue,
147148
"LicenseDockerCfg": e.licenseDockerCfg,
149+
"VersionLabel": e.versionLabel,
148150

149151
"HTTPProxy": e.httpProxy,
150152
"HTTPSProxy": e.httpsProxy,

api/pkg/template/release.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package template
2+
3+
import "fmt"
4+
5+
func (e *Engine) versionLabel() (string, error) {
6+
if e.releaseData == nil {
7+
return "", fmt.Errorf("release data is nil")
8+
}
9+
if e.releaseData.ChannelRelease == nil {
10+
return "", fmt.Errorf("channel release is nil")
11+
}
12+
return e.releaseData.ChannelRelease.VersionLabel, nil
13+
}

api/pkg/template/release_test.go

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package template
2+
3+
import (
4+
"testing"
5+
6+
ecv1beta1 "github.com/replicatedhq/embedded-cluster/kinds/apis/v1beta1"
7+
"github.com/replicatedhq/embedded-cluster/pkg/release"
8+
kotsv1beta1 "github.com/replicatedhq/kotskinds/apis/kots/v1beta1"
9+
"github.com/stretchr/testify/assert"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
func TestEngine_VersionLabel(t *testing.T) {
14+
config := &kotsv1beta1.Config{
15+
Spec: kotsv1beta1.ConfigSpec{
16+
Groups: []kotsv1beta1.ConfigGroup{},
17+
},
18+
}
19+
20+
releaseData := &release.ReleaseData{
21+
EmbeddedClusterConfig: &ecv1beta1.Config{
22+
Spec: ecv1beta1.ConfigSpec{},
23+
},
24+
ChannelRelease: &release.ChannelRelease{
25+
VersionLabel: "v1.2.3",
26+
},
27+
}
28+
29+
engine := NewEngine(config, WithReleaseData(releaseData))
30+
31+
err := engine.Parse("{{repl VersionLabel }}")
32+
require.NoError(t, err)
33+
result, err := engine.Execute(nil, WithProxySpec(&ecv1beta1.ProxySpec{}))
34+
require.NoError(t, err)
35+
assert.Equal(t, "v1.2.3", result)
36+
}
37+
38+
func TestEngine_VersionLabelEmpty(t *testing.T) {
39+
config := &kotsv1beta1.Config{
40+
Spec: kotsv1beta1.ConfigSpec{
41+
Groups: []kotsv1beta1.ConfigGroup{},
42+
},
43+
}
44+
45+
releaseData := &release.ReleaseData{
46+
EmbeddedClusterConfig: &ecv1beta1.Config{
47+
Spec: ecv1beta1.ConfigSpec{},
48+
},
49+
ChannelRelease: &release.ChannelRelease{
50+
VersionLabel: "",
51+
},
52+
}
53+
54+
engine := NewEngine(config, WithReleaseData(releaseData))
55+
56+
err := engine.Parse("{{repl VersionLabel }}")
57+
require.NoError(t, err)
58+
result, err := engine.Execute(nil, WithProxySpec(&ecv1beta1.ProxySpec{}))
59+
require.NoError(t, err)
60+
assert.Equal(t, "", result)
61+
}
62+
63+
func TestEngine_VersionLabelWithoutReleaseData(t *testing.T) {
64+
config := &kotsv1beta1.Config{
65+
Spec: kotsv1beta1.ConfigSpec{
66+
Groups: []kotsv1beta1.ConfigGroup{},
67+
},
68+
}
69+
70+
engine := NewEngine(config)
71+
72+
err := engine.Parse("{{repl VersionLabel }}")
73+
require.NoError(t, err)
74+
_, err = engine.Execute(nil, WithProxySpec(&ecv1beta1.ProxySpec{}))
75+
require.Error(t, err)
76+
assert.Contains(t, err.Error(), "release data is nil")
77+
}
78+
79+
func TestEngine_VersionLabelWithoutChannelRelease(t *testing.T) {
80+
config := &kotsv1beta1.Config{
81+
Spec: kotsv1beta1.ConfigSpec{
82+
Groups: []kotsv1beta1.ConfigGroup{},
83+
},
84+
}
85+
86+
releaseData := &release.ReleaseData{
87+
EmbeddedClusterConfig: &ecv1beta1.Config{
88+
Spec: ecv1beta1.ConfigSpec{},
89+
},
90+
ChannelRelease: nil,
91+
}
92+
93+
engine := NewEngine(config, WithReleaseData(releaseData))
94+
95+
err := engine.Parse("{{repl VersionLabel }}")
96+
require.NoError(t, err)
97+
_, err = engine.Execute(nil, WithProxySpec(&ecv1beta1.ProxySpec{}))
98+
require.Error(t, err)
99+
assert.Contains(t, err.Error(), "channel release is nil")
100+
}
101+
102+
func TestEngine_VersionLabelInTemplate(t *testing.T) {
103+
config := &kotsv1beta1.Config{
104+
Spec: kotsv1beta1.ConfigSpec{
105+
Groups: []kotsv1beta1.ConfigGroup{},
106+
},
107+
}
108+
109+
releaseData := &release.ReleaseData{
110+
EmbeddedClusterConfig: &ecv1beta1.Config{
111+
Spec: ecv1beta1.ConfigSpec{},
112+
},
113+
ChannelRelease: &release.ChannelRelease{
114+
VersionLabel: "2024.1.0",
115+
},
116+
}
117+
118+
engine := NewEngine(config, WithReleaseData(releaseData))
119+
120+
err := engine.Parse("version: {{repl VersionLabel }}")
121+
require.NoError(t, err)
122+
result, err := engine.Execute(nil, WithProxySpec(&ecv1beta1.ProxySpec{}))
123+
require.NoError(t, err)
124+
assert.Equal(t, "version: 2024.1.0", result)
125+
}

e2e/kots-release-install-v3/config.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -641,3 +641,11 @@ spec:
641641
---
642642
643643
{{repl Distribution }}
644+
645+
- name: template_function_version_label
646+
type: label
647+
title: |
648+
## Version Label
649+
---
650+
651+
{{repl VersionLabel }}

0 commit comments

Comments
 (0)