#!/usr/bin/env bash set -euo pipefail USAGE="Usage: $0 [version] [--oci-register ]" function usage() { echo "$USAGE" exit 1 } function next_patch_version() { local chart="$1" local ver ver=$(yq '.version' "$chart/Chart.yaml") if [[ -z "$ver" || "$ver" == "null" ]]; then echo "Error: Could not find version in $chart/Chart.yaml" >&2 exit 1 fi IFS='.' read -r major minor patch <<< "$ver" echo "$major.$minor.$((patch + 1))" } function build_and_push() { local chart_name="$1" local version="$2" local oci_registry="${3:-oci://git.roboces.dev/catalin/fukuops}" local chart_path="k8s/charts/$chart_name" if [[ ! -d "$chart_path" ]]; then echo "Error: Chart '$chart_name' not found at $chart_path" >&2 exit 1 fi if [[ ! -f "$chart_path/Chart.yaml" ]]; then echo "Error: Chart.yaml not found in $chart_path" >&2 exit 1 fi echo "Building and pushing $chart_name version $version to $oci_registry" local current_version current_version=$(yq -r '.version' "$chart_path/Chart.yaml") yq -y -i ".version = \"$version\"" "$chart_path/Chart.yaml" mkdir -p /tmp/helm-pkg/ helm package "$chart_path" -d /tmp/helm-pkg/ helm push "/tmp/helm-pkg/${chart_name}-${version}.tgz" "$oci_registry" yq -y -i ".version = \"$current_version\"" "$chart_path/Chart.yaml" echo "Successfully pushed $chart_name-$version to $oci_registry" } function main() { if [[ $# -lt 1 ]]; then usage fi local chart_name="" local version="" local oci_registry="oci://git.roboces.dev/catalin/fukuops" while [[ $# -gt 0 ]]; do case "$1" in --oci-register) if [[ -z "${2:-}" ]] || [[ "$2" == -* ]]; then echo "Error: --oci-register requires a registry argument" >&2 exit 1 fi oci_registry="$2" shift 2 ;; -h|--help) echo "$USAGE" echo "" echo "Options:" echo " --oci-register Override default OCI registry (default: oci://git.roboces.dev/catalin/fukuops)" exit 0 ;; -*) echo "Error: Unknown option: $1" >&2 usage ;; *) if [[ -z "$chart_name" ]]; then chart_name="$1" elif [[ -z "$version" ]]; then version="$1" else echo "Error: Too many arguments" >&2 usage fi shift ;; esac done if [[ -z "$chart_name" ]]; then echo "Error: Chart name is required" >&2 usage fi if [[ -z "$version" ]]; then version=$(next_patch_version "k8s/charts/$chart_name") echo "No version provided, calculated next patch version: $version" fi build_and_push "$chart_name" "$version" "$oci_registry" } main "$@"