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
All checks were successful
Publish Helm Charts / helm-publish (push) Successful in 8s
This commit is contained in:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user