diff --git a/Dockerfile b/Dockerfile index e42bb4e7ce..11fa202ac7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,9 @@ RUN set -x \ gcc \ bsd-compat-headers \ py-pip \ - pigz + pigz \ + tar \ + yq # Dapper/Drone/CI environment FROM build AS dapper @@ -92,6 +94,7 @@ VOLUME /var/lib/rancher/k3s FROM build AS charts ARG CHART_REPO="https://rke2-charts.rancher.io" +ARG KUBERNETES_VERSION="" ARG CACHEBUST="cachebust" COPY charts/ /charts/ RUN echo ${CACHEBUST}>/dev/null diff --git a/charts/build-chart.sh b/charts/build-chart.sh index aeb5f0a35c..0af43dd105 100755 --- a/charts/build-chart.sh +++ b/charts/build-chart.sh @@ -2,11 +2,34 @@ set -eux -o pipefail +: "${KUBERNETES_VERSION:=v0.0.0-0}" : "${CHART_FILE?required}" : "${CHART_NAME:="$(basename "${CHART_FILE%%.yaml}")"}" : "${CHART_PACKAGE:="${CHART_NAME%%-crd}"}" +: "${TAR_OPTS:=--owner=0 --group=0 --mode=gou-s+r --numeric-owner --no-acls --no-selinux --no-xattrs}" : "${CHART_URL:="${CHART_REPO:="https://rke2-charts.rancher.io"}/assets/${CHART_PACKAGE}/${CHART_NAME}-${CHART_VERSION:="v0.0.0"}.tgz"}" -curl -fsSL "${CHART_URL}" -o "${CHART_TMP:=$(mktemp)}" +: "${CHART_TMP:=$(mktemp --suffix .tar.gz)}" +: "${YAML_TMP:=$(mktemp --suffix .yaml)}" + +cleanup() { + exit_code=$? + trap - EXIT INT + rm -rf ${CHART_TMP} ${CHART_TMP/tar.gz/tar} ${YAML_TMP} + exit ${exit_code} +} +trap cleanup EXIT INT + +curl -fsSL "${CHART_URL}" -o "${CHART_TMP}" +gunzip ${CHART_TMP} + +# Extract out Chart.yaml, inject a version requirement and bundle-id annotation, and delete/replace the one in the original tarball +tar -xOf ${CHART_TMP/.gz/} ${CHART_NAME}/Chart.yaml > ${YAML_TMP} +yq -i e ".kubeVersion = \">= ${KUBERNETES_VERSION}\" | .annotations.\"fleet.cattle.io/bundle-id\" = \"rke2\"" ${YAML_TMP} +tar --delete -b 8192 -f ${CHART_TMP/.gz/} ${CHART_NAME}/Chart.yaml +tar --transform="s|.*|${CHART_NAME}/Chart.yaml|" ${TAR_OPTS} -vrf ${CHART_TMP/.gz/} ${YAML_TMP} + +pigz -11 ${CHART_TMP/.gz/} + cat <<-EOF > "${CHART_FILE}" apiVersion: helm.cattle.io/v1 kind: HelmChart