@@ -432,14 +432,40 @@ func (helm *execer) Fetch(chart string, flags ...string) error {
432
432
433
433
func (helm * execer ) ChartPull (chart string , flags ... string ) error {
434
434
helm .logger .Infof ("Pulling %v" , chart )
435
- out , err := helm .exec (append ([]string {"chart" , "pull" , chart }, flags ... ), map [string ]string {"HELM_EXPERIMENTAL_OCI" : "1" })
435
+ helm .logger .Infof ("Exporting %v" , chart )
436
+ helmVersionConstraint , _ := semver .NewConstraint (">= 3.7.0" )
437
+ var helmArgs []string
438
+ if helmVersionConstraint .Check (& helm .version ) {
439
+ ociChartURLSplit := strings .Split (chart , ":" )
440
+ ociChartURL := fmt .Sprintf ("oci://%s" , ociChartURLSplit [0 ])
441
+ ociChartTag := ociChartURLSplit [1 ]
442
+ tempDir , err := ioutil .TempDir ("" , "chart*" )
443
+ if err != nil {
444
+ return err
445
+ }
446
+ defer os .RemoveAll (tempDir )
447
+ helmArgs = []string {"fetch" , ociChartURL , "--version" , ociChartTag , "--destination" , tempDir }
448
+ } else {
449
+ helmArgs = []string {"chart" , "pull" , chart }
450
+ }
451
+ out , err := helm .exec (append (helmArgs , flags ... ), map [string ]string {"HELM_EXPERIMENTAL_OCI" : "1" })
436
452
helm .info (out )
437
453
return err
438
454
}
439
455
440
456
func (helm * execer ) ChartExport (chart string , path string , flags ... string ) error {
441
457
helm .logger .Infof ("Exporting %v" , chart )
442
- out , err := helm .exec (append ([]string {"chart" , "export" , chart , "--destination" , path }, flags ... ), map [string ]string {"HELM_EXPERIMENTAL_OCI" : "1" })
458
+ helmVersionConstraint , _ := semver .NewConstraint (">= 3.7.0" )
459
+ var helmArgs []string
460
+ if helmVersionConstraint .Check (& helm .version ) {
461
+ ociChartURLSplit := strings .Split (chart , ":" )
462
+ ociChartURL := fmt .Sprintf ("oci://%s" , ociChartURLSplit [0 ])
463
+ ociChartTag := ociChartURLSplit [1 ]
464
+ helmArgs = []string {"pull" , ociChartURL , "--version" , ociChartTag , "--untar" }
465
+ } else {
466
+ helmArgs = []string {"chart" , "export" , chart }
467
+ }
468
+ out , err := helm .exec (append (append (helmArgs , "--destination" , path ), flags ... ), map [string ]string {"HELM_EXPERIMENTAL_OCI" : "1" })
443
469
helm .info (out )
444
470
return err
445
471
}
0 commit comments