ceph-csi/deploy.sh
Ondrej Vasko 78d13b5304 helm: explicitly configure helm chart base url
Currently helm index configures URLs to charts with relative path
(see https://ceph.github.io/csi-charts/index.yaml).

Artifactory contains support for virtual repositories. Virtual
repositories are able to cache remote repositories and provide
offline access to those repositories.

In order for this to work correctly, charts must specify absolute base URL to
artifacts.

This commit adds this base URL using argument for helm index command.

URL with previous approach:
```yaml
    urls:
    - cephfs/ceph-csi-cephfs-3.13.0.tgz
```

URL with current approach (my personal "lirt" repo was used to test this, the
MR specifies correct "ceph" path)
```yaml
    urls:
    - https://lirt.github.io/csi-charts/cephfs/ceph-csi-cephfs-3.13.0.tgz
```

Signed-off-by: Ondrej Vasko <ondrej.vaskoo@gmail.com>
2025-02-13 10:13:55 +00:00

122 lines
4.1 KiB
Bash
Executable File

#!/bin/bash
set -e
# shellcheck source=scripts/build_step.inc.sh
source "$(dirname "${0}")/scripts/build_step.inc.sh"
# shellcheck source=build.env
source "$(dirname "${0}")/build.env"
BRANCH_NAME=${BRANCH_NAME:-""}
GITHUB_TOKEN=${GITHUB_TOKEN:-""}
GITHUB_USER=${GITHUB_USER:-"autobuild-bot"}
GITHUB_EMAIL=${GITHUB_EMAIL:-"ceph-csi-bot@users.noreply.github.com"}
# Build and push images. Steps as below:
# 1. get base image from ./build.env (BASE_IMAGE=ceph/ceph:v14.2)
# 2. parse manifest to get image digest per arch (sha256:XYZ, sha256:ZYX)
# 3. patch Dockerfile with amd64 base image (FROM ceph/ceph:v14.2@sha256:XYZ)
# 4. build and push amd64 image
# 5. patch Dockerfile with arm64 base image (FROM ceph/ceph:v14.2@sha256:ZYX)
# 6. build and push arm64 image
build_push_images() {
# "docker manifest" requires experimental feature enabled
export DOCKER_CLI_EXPERIMENTAL=enabled
build_env="build.env"
baseimg=$(awk -F = '/^BASE_IMAGE=/ {print $NF}' "${build_env}")
# get image digest per architecture
# {
# "arch": "amd64",
# "digest": "sha256:XYZ"
# }
# {
# "arch": "arm64",
# "digest": "sha256:ZYX"
# }
manifests=$(docker manifest inspect "${baseimg}" | jq '.manifests[] | {arch: .platform.architecture, digest: .digest}')
# qemu-user-static is to enable an execution of different multi-architecture containers by QEMU
# more info at https://github.com/multiarch/qemu-user-static
build_step "docker run multiarch/qemu-user-static container"
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
# build and push per arch images
for ARCH in amd64 arm64; do
ifs=$IFS
IFS=
digest=$(awk -v ARCH=${ARCH} '{if (archfound) {print $NF; exit 0}}; {archfound=($0 ~ "arch.*"ARCH)}' <<<"${manifests}")
IFS=$ifs
base_image=${baseimg}@${digest}
build_step "make push-image-cephcsi for ${ARCH}"
GOARCH=${ARCH} BASE_IMAGE=${base_image} make push-image-cephcsi
build_step_log "done: make push-image-cephcsi for ${ARCH} (ret=${?})"
GOARCH=${ARCH} make create-manifest
done
make push-manifest
}
push_helm_charts() {
PACKAGE=$1
CHARTDIR=$2
VERSION=${CSI_IMAGE_VERSION//v/} # Set version (without v prefix)
# update information in Chart.yaml if the branch is not devel
if [ "${BRANCH_NAME}" != "devel" ]; then
# Replace appVersion: canary and version: *-canary with the actual version
sed -i "s/\(\s.*canary\)/ ${VERSION}/" "charts/ceph-csi-${PACKAGE}/Chart.yaml"
if [[ "${VERSION}" == *"canary"* ]]; then
# Replace devel with the version branch
sed -i "s/devel/${BRANCH_NAME}/" "charts/ceph-csi-${PACKAGE}/Chart.yaml"
else
# This is not a canary release, replace devel with the tagged branch
sed -i "s/devel/v${VERSION}/" "charts/ceph-csi-${PACKAGE}/templates/NOTES.txt"
sed -i "s/devel/v${VERSION}/" "charts/ceph-csi-${PACKAGE}/Chart.yaml"
fi
fi
mkdir -p "${CHARTDIR}/csi-charts/docs/${PACKAGE}"
# Use rsync to remove files from destination when source file is deleted.
rsync -avh "./charts/ceph-csi-${PACKAGE}" "${CHARTDIR}/csi-charts/docs/${PACKAGE}" --delete
pushd "${CHARTDIR}/csi-charts/docs/${PACKAGE}" >/dev/null
helm package "ceph-csi-${PACKAGE}"
popd >/dev/null
pushd "${CHARTDIR}/csi-charts/docs" >/dev/null
helm repo index . --url "https://ceph.github.io/csi-charts/"
git config user.name "${GITHUB_USER}"
git config user.email "${GITHUB_EMAIL}"
git add --all :/ && git commit -m "Update for helm charts ${PACKAGE}-${VERSION}"
git push https://"${GITHUB_TOKEN}"@github.com/ceph/csi-charts
popd >/dev/null
}
if [[ -z "${GITHUB_TOKEN}" ]]; then
echo "GITHUB_TOKEN is unset or set to the empty string"
exit 1
fi
build_push_images
CSI_CHARTS_DIR=$(mktemp -d)
pushd "${CSI_CHARTS_DIR}" >/dev/null
curl -L "${HELM_SCRIPT}" | bash -s -- --version "${HELM_VERSION}"
build_step "cloning ceph/csi-charts repository"
git clone https://github.com/ceph/csi-charts
mkdir -p csi-charts/docs
popd >/dev/null
build_step "pushing RBD helm charts"
push_helm_charts rbd "${CSI_CHARTS_DIR}"
build_step "pushing CephFS helm charts"
push_helm_charts cephfs "${CSI_CHARTS_DIR}"
build_step_log "finished deployment!"
[ -n "${CSI_CHARTS_DIR}" ] && rm -rf "${CSI_CHARTS_DIR}"