Skip to content

Commit 9a0ce53

Browse files
authored
Support Helm 3.7.0's reworked OCI support (roboll#1970)
Signed-off-by: Aditya Menon <[email protected]>
1 parent 787e6c8 commit 9a0ce53

File tree

8 files changed

+41
-12
lines changed

8 files changed

+41
-12
lines changed

.circleci/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
HELM_VERSION ?= v3.5.3
1+
HELM_VERSION ?= v3.7.0
22
KUSTOMIZE_VERSION ?= v3.8.8
33
K8S_VERSION ?= v1.13.12
44
MINIKUBE_VERSION ?= v0.30.0

.circleci/config.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ workflows:
145145
- build
146146
matrix:
147147
parameters:
148-
helm-version: ["v3.4.2", "v3.5.4", "v3.6.3"]
148+
helm-version: ["v3.4.2", "v3.5.4", "v3.6.3", "v3.7.0"]
149149
- release:
150150
filters:
151151
branches:

Dockerfile

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ FROM alpine:3.11
1111

1212
RUN apk add --no-cache ca-certificates git bash curl jq
1313

14-
ARG HELM_VERSION="v3.6.3"
15-
ARG HELM_SHA256="07c100849925623dc1913209cd1a30f0a9b80a5b4d6ff2153c609d11b043e262"
14+
ARG HELM_VERSION="v3.7.0"
15+
ARG HELM_SHA256="096e30f54c3ccdabe30a8093f8e128dba76bb67af697b85db6ed0453a2701bf9"
1616
ARG HELM_LOCATION="https://get.helm.sh"
1717
ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz"
1818

Dockerfile.debian

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ RUN apt-get update \
2525
wget \
2626
&& rm -rf /var/lib/apt/lists/*
2727

28-
ARG HELM_VERSION="v3.6.3"
29-
ARG HELM_SHA256="07c100849925623dc1913209cd1a30f0a9b80a5b4d6ff2153c609d11b043e262"
28+
ARG HELM_VERSION="v3.7.0"
29+
ARG HELM_SHA256="096e30f54c3ccdabe30a8093f8e128dba76bb67af697b85db6ed0453a2701bf9"
3030
ARG HELM_LOCATION="https://get.helm.sh"
3131
ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz"
3232

Dockerfile.helm3

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ FROM alpine:3.11
1111

1212
RUN apk add --no-cache ca-certificates git bash curl jq
1313

14-
ARG HELM_VERSION="v3.5.3"
14+
ARG HELM_VERSION="v3.7.0"
1515
ARG HELM_LOCATION="https://get.helm.sh"
1616
ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz"
17-
ARG HELM_SHA256="2170a1a644a9e0b863f00c17b761ce33d4323da64fc74562a3a6df2abbf6cd70"
17+
ARG HELM_SHA256="096e30f54c3ccdabe30a8093f8e128dba76bb67af697b85db6ed0453a2701bf9"
1818
RUN set -x && \
1919
wget ${HELM_LOCATION}/${HELM_FILENAME} && \
2020
echo Verifying ${HELM_FILENAME}... && \

Dockerfile.helm3.ubuntu

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ RUN apt update -qq && \
1717
git bash curl jq pip wget && \
1818
rm -rf /var/lib/apt/lists/*
1919

20-
ARG HELM_VERSION="v3.5.3"
20+
ARG HELM_VERSION="v3.7.0"
2121
ARG HELM_LOCATION="https://get.helm.sh"
2222
ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz"
23-
ARG HELM_SHA256="2170a1a644a9e0b863f00c17b761ce33d4323da64fc74562a3a6df2abbf6cd70"
23+
ARG HELM_SHA256="096e30f54c3ccdabe30a8093f8e128dba76bb67af697b85db6ed0453a2701bf9"
2424
RUN set -x && \
2525
wget ${HELM_LOCATION}/${HELM_FILENAME} && \
2626
echo Verifying ${HELM_FILENAME}... && \

pkg/helmexec/exec.go

+28-2
Original file line numberDiff line numberDiff line change
@@ -432,14 +432,40 @@ func (helm *execer) Fetch(chart string, flags ...string) error {
432432

433433
func (helm *execer) ChartPull(chart string, flags ...string) error {
434434
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"})
436452
helm.info(out)
437453
return err
438454
}
439455

440456
func (helm *execer) ChartExport(chart string, path string, flags ...string) error {
441457
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"})
443469
helm.info(out)
444470
return err
445471
}

pkg/state/state.go

+3
Original file line numberDiff line numberDiff line change
@@ -3224,6 +3224,9 @@ func (st *HelmState) getOCIChart(pullChan chan PullCommand, release *ReleaseSpec
32243224

32253225
chartPath := path.Join(pathElems...)
32263226
err = helm.ChartExport(qualifiedChartName, chartPath)
3227+
if err != nil {
3228+
return nil, err
3229+
}
32273230

32283231
fullChartPath, err := findChartDirectory(chartPath)
32293232
if err != nil {

0 commit comments

Comments
 (0)