All checks were successful
Build and Publish TechDocs (Helm Chart Resource) / build-and-publish-helm-chart (push) Successful in 1m9s
Change-Id: I26d65d84aa31f5cc4cc0835e3fb7269fedc73b45
106 lines
3.0 KiB
Bash
Executable File
106 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -o nounset
|
|
|
|
: "${CR_TOKEN:?Environment variable CR_TOKEN must be set}"
|
|
: "${GIT_REPOSITORY_URL:?Environment variable GIT_REPOSITORY_URL must be set}"
|
|
: "${GIT_USERNAME:?Environment variable GIT_USERNAME must be set}"
|
|
: "${GIT_EMAIL:?Environment variable GIT_EMAIL must be set}"
|
|
|
|
readonly OWNER=haproxytech
|
|
readonly GIT_REPO=helm-charts
|
|
readonly PACKAGE_PATH=.deploy
|
|
readonly CHARTS_URL=https://haproxytech.github.io/helm-charts
|
|
readonly REPO_ROOT="${REPO_ROOT:-$(git rev-parse --show-toplevel)}"
|
|
|
|
find_latest_tag() {
|
|
if ! git describe --tags --abbrev=0 2>/dev/null; then
|
|
git rev-list --max-parents=0 --first-parent HEAD
|
|
fi
|
|
}
|
|
|
|
package_chart() {
|
|
local chart="$1"
|
|
helm dependency build "${chart}"
|
|
helm package "${chart}" --destination "${PACKAGE_PATH}"
|
|
}
|
|
|
|
release_charts() {
|
|
echo "Upload Helm chart packages to GitHub"
|
|
cr upload -o "${OWNER}" -r "${GIT_REPO}" -p "${PACKAGE_PATH}"
|
|
|
|
echo "Upload Helm chart packages to GHCR OCI"
|
|
echo "${HELM_GH_TOKEN}" | helm registry login ghcr.io --username "${OWNER}" --password-stdin
|
|
|
|
for chart in "${PACKAGE_PATH}"/*.tgz; do
|
|
helm push "${chart}" "oci://ghcr.io/${OWNER}/${GIT_REPO}"
|
|
done
|
|
}
|
|
|
|
update_index() {
|
|
echo "Generating Helm chart index"
|
|
git config user.email "${GIT_EMAIL}"
|
|
git config user.name "${GIT_USERNAME}"
|
|
git checkout gh-pages
|
|
|
|
cr index -i index.yaml -o "${OWNER}" -r "${GIT_REPO}" -c "${CHARTS_URL}" -p "${PACKAGE_PATH}"
|
|
|
|
git add index.yaml
|
|
git commit --message="Update index.yaml" --signoff
|
|
git push "${GIT_REPOSITORY_URL}" gh-pages
|
|
}
|
|
|
|
main() {
|
|
pushd "${REPO_ROOT}" >/dev/null || exit 1
|
|
|
|
echo "Fetching tags"
|
|
git fetch --tags
|
|
|
|
local latest_tag
|
|
latest_tag=$(find_latest_tag)
|
|
|
|
local latest_tag_rev
|
|
latest_tag_rev=$(git rev-parse --verify "${latest_tag}")
|
|
echo "${latest_tag_rev} ${latest_tag} (latest tag)"
|
|
|
|
local head_rev
|
|
head_rev=$(git rev-parse --verify HEAD)
|
|
echo "${head_rev} HEAD"
|
|
|
|
if [[ "${latest_tag_rev}" == "${head_rev}" ]]; then
|
|
echo "No code changes. Nothing to release."
|
|
exit
|
|
fi
|
|
|
|
mkdir -p "${PACKAGE_PATH}"
|
|
|
|
echo "Identifying changed charts since tag ${latest_tag}"
|
|
|
|
local changed_charts=()
|
|
readarray -t changed_charts <<< "$(git diff --find-renames --name-only "${latest_tag_rev}" | grep 'Chart.yaml$' | cut -d '/' -f 1 | sort -u)"
|
|
|
|
if [[ -n "${changed_charts[*]}" ]]; then
|
|
local release_pending=no
|
|
for chart in "${changed_charts[@]}"; do
|
|
if [[ -f "${chart}/Chart.yaml" ]]; then
|
|
release_pending=yes
|
|
echo "Packaging chart ${chart}"
|
|
package_chart "${chart}"
|
|
fi
|
|
done
|
|
|
|
if [[ "${release_pending}" == "yes" ]]; then
|
|
release_charts
|
|
update_index
|
|
else
|
|
echo "Nothing to do. No chart changes detected."
|
|
fi
|
|
else
|
|
echo "Nothing to do. No chart changes detected."
|
|
fi
|
|
|
|
popd >/dev/null || exit 1
|
|
}
|
|
|
|
main
|