@@ -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+ }
0 commit comments