refactor helm chart publishing workflow: replace script with inline logic for packaging and pushing charts, add error handling and validation
All checks were successful
Publish Helm Charts / helm-publish (push) Successful in 8s

This commit is contained in:
mangomqy
2025-11-19 09:45:08 +00:00
parent 9b58f9ad31
commit 30dd26120a
3 changed files with 75 additions and 135 deletions

View File

@ -20,12 +20,80 @@ jobs:
with:
version: v3.14.0
- name: Publish charts
- name: Package and push charts
env:
HELM_OCI_NAMESPACE: ${{ secrets.HELM_OCI_NAMESPACE }}
HELM_USERNAME: ${{ secrets.HELM_USERNAME }}
HELM_PASSWORD: ${{ secrets.HELM_PASSWORD }}
CHART_DIRS: vllm-serve
run: |
chmod +x scripts/helm_publish.sh
scripts/helm_publish.sh
set -euo pipefail
CHART_LIST_FILE="charts.list"
if [[ ! -f "$CHART_LIST_FILE" ]]; then
echo "[helm_publish] Missing chart list file ${CHART_LIST_FILE}" >&2
exit 1
fi
mapfile -t CHART_DIRS < <(grep -v '^\s*#' "$CHART_LIST_FILE" | sed '/^\s*$/d')
if [[ ${#CHART_DIRS[@]} -eq 0 ]]; then
echo "[helm_publish] No chart directories listed in ${CHART_LIST_FILE}"
exit 0
fi
if [[ -z "${HELM_OCI_NAMESPACE:-}" ]]; then
echo "[helm_publish] HELM_OCI_NAMESPACE is required" >&2
exit 1
fi
HELM_REGISTRY_HOST="${HELM_OCI_NAMESPACE%%/*}"
HELM_REGISTRY_PROJECT="${HELM_OCI_NAMESPACE#*/}"
if [[ -z "$HELM_REGISTRY_PROJECT" || "$HELM_REGISTRY_PROJECT" == "$HELM_OCI_NAMESPACE" ]]; then
echo "[helm_publish] HELM_OCI_NAMESPACE must be host/project (got ${HELM_OCI_NAMESPACE})" >&2
exit 1
fi
if [[ -n "${HELM_USERNAME:-}" && -n "${HELM_PASSWORD:-}" ]]; then
echo "[helm_publish] Logging into ${HELM_REGISTRY_HOST} as ${HELM_USERNAME}"
helm registry login "$HELM_REGISTRY_HOST" -u "$HELM_USERNAME" -p "$HELM_PASSWORD"
else
echo "[helm_publish] HELM_USERNAME/HELM_PASSWORD not set; assuming credentials already configured"
fi
status=0
for chart_dir in "${CHART_DIRS[@]}"; do
if [[ ! -f "$chart_dir/Chart.yaml" ]]; then
echo "[helm_publish] Skip ${chart_dir} (no Chart.yaml)"
continue
fi
echo "[helm_publish] Processing chart: ${chart_dir}"
helm dependency build "$chart_dir" || true
if ! helm lint "$chart_dir"; then
echo "[helm_publish] Warning: helm lint failed for ${chart_dir}"
fi
pkg_out_dir="$chart_dir/.packages"
mkdir -p "$pkg_out_dir"
pkg_path=$(helm package "$chart_dir" --destination "$pkg_out_dir" | awk '{print $NF}')
if [[ ! -f "$pkg_path" ]]; then
echo "[helm_publish] Failed to package ${chart_dir}" >&2
status=1
continue
fi
echo "[helm_publish] Packaged: ${pkg_path}"
if [[ "${DRY_RUN:-}" == "1" ]]; then
echo "[helm_publish] DRY_RUN enabled; skip push for ${pkg_path}"
continue
fi
echo "[helm_publish] Pushing ${pkg_path} to oci://${HELM_OCI_NAMESPACE}"
if ! helm push "$pkg_path" "oci://${HELM_OCI_NAMESPACE}"; then
echo "[helm_publish] Push failed for ${pkg_path}" >&2
status=1
fi
done
exit $status