Skip to content

Commit 7496484

Browse files
Anuragjschoone
authored andcommitted
✨ Overwrite helm chart version. No need for templating.
this commit adds a feature in csctl where one doesn't require templating and Chart.yaml and csctl will override the version field in Chart.yaml Signed-off-by: Anurag <[email protected]>
1 parent 8c140e2 commit 7496484

File tree

4 files changed

+70
-4
lines changed

4 files changed

+70
-4
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,7 @@ csctl
2020
csctl-docker
2121
tmp/
2222
releases/
23+
.tmp
24+
.release
25+
.envrc
26+
dist/

pkg/cmd/create.go

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,12 +220,23 @@ func (c *CreateOptions) generateRelease() error {
220220
}
221221

222222
// Build all the templated output and put it in a tmp directory
223-
if err := template.GenerateOutputFromTemplate(c.ClusterStackPath, "./tmp/", &c.Metadata); err != nil {
223+
if err := template.GenerateOutputFromTemplate(c.ClusterStackPath, "./.tmp/", &c.Metadata); err != nil {
224224
return fmt.Errorf("failed to generate tmp output: %w", err)
225225
}
226226

227+
// Overwrite ClusterAddonVersion in cluster-addon/*/Chart.yaml
228+
if err := overwriteClusterAddonVersion("./.tmp", c.Metadata.Versions.Components.ClusterAddon); err != nil {
229+
return fmt.Errorf("failed to overwrite ClusterAddonVersion in tmp output: %w", err)
230+
}
231+
232+
// Overwrite ClusterClassVersion in cluster-class/Chart.yaml
233+
clusterClassChartYaml := "./.tmp/cluster-class/Chart.yaml"
234+
if err := overwriteVersionInFile(clusterClassChartYaml, c.Metadata.Versions.ClusterStack); err != nil {
235+
return fmt.Errorf("failed to overwrite ClusterClassVersion in %s output: %w", clusterClassChartYaml, err)
236+
}
237+
227238
// Package Helm from the tmp directory to the release directory
228-
if err := template.CreatePackage("./tmp/", c.ClusterStackReleaseDir); err != nil {
239+
if err := template.CreatePackage("./.tmp/", c.ClusterStackReleaseDir); err != nil {
229240
return fmt.Errorf("failed to create template package: %w", err)
230241
}
231242

@@ -264,3 +275,52 @@ func (c *CreateOptions) generateRelease() error {
264275
}
265276
return nil
266277
}
278+
279+
func overwriteClusterAddonVersion(tmpDir, clusterAddonVersion string) error {
280+
g := filepath.Join(tmpDir, "cluster-addon", "Chart.yaml")
281+
files, err := filepath.Glob(g)
282+
if err != nil {
283+
return fmt.Errorf("glob for %s failed: %w", g, err)
284+
}
285+
286+
for _, chartYaml := range files {
287+
err := overwriteVersionInFile(chartYaml, clusterAddonVersion)
288+
if err != nil {
289+
return fmt.Errorf("failed to replace version in %s: %w", chartYaml, err)
290+
}
291+
}
292+
return nil
293+
}
294+
295+
// overwriteVersionInFile replaces "version: v123" with newVersion.
296+
func overwriteVersionInFile(chartYaml, newVersion string) error {
297+
chartYaml = filepath.Clean(chartYaml)
298+
data, err := os.ReadFile(chartYaml)
299+
if err != nil {
300+
return fmt.Errorf("reading file failed: %w", err)
301+
}
302+
303+
m := make(map[string]interface{})
304+
err = yaml.Unmarshal(data, m)
305+
if err != nil {
306+
return fmt.Errorf("failed parsing: %w", err)
307+
}
308+
309+
v := m["version"]
310+
oldVersion, ok := v.(string)
311+
if !ok {
312+
return fmt.Errorf("failed to read version in yaml")
313+
}
314+
315+
m["version"] = newVersion
316+
fmt.Printf("%s updating version from %s to %s\n", chartYaml, oldVersion, newVersion)
317+
out, err := yaml.Marshal(m)
318+
if err != nil {
319+
return fmt.Errorf("failed creating yaml: %w", err)
320+
}
321+
err = os.WriteFile(chartYaml, out, 0o600)
322+
if err != nil {
323+
return fmt.Errorf("failed write yaml to file: %w", err)
324+
}
325+
return nil
326+
}

tests/cluster-stacks/docker/ferrol/cluster-addon/Chart.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ maintainers:
1111
url: https://github.com/syself
1212
name: docker-ferrol-1-27-cluster-addon
1313
type: application
14-
version: << .ClusterAddonVersion >>
14+
# version will be overwritten by csctl
15+
version: v0

tests/cluster-stacks/docker/ferrol/cluster-class/Chart.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ maintainers:
66
url: https://github.com/syself
77
name: docker-ferrol-1-27-cluster-class
88
type: application
9-
version: << .ClusterClassVersion >>
9+
# version will be overwritten by csctl
10+
version: v0

0 commit comments

Comments
 (0)