diff --git a/.github/workflows/release_chart.yaml b/.github/workflows/release_chart.yaml new file mode 100644 index 00000000..862972cd --- /dev/null +++ b/.github/workflows/release_chart.yaml @@ -0,0 +1,80 @@ +name: Release Charts + +on: + push: + tags: + - "v*.*.*" + +jobs: + release-charts: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Checkout helm-charts + uses: actions/checkout@v3 + with: + repository: "${{ github.repository_owner }}/helm-charts" + # use token for helm-charts repo + token: "${{ secrets.HELM_CHARTER_TOKEN }}" + path: "helm-charts" + fetch-depth: 0 + + - name: Get chart version + run: | + echo "chart_version=$(echo ${GITHUB_REF##*/v})" >> $GITHUB_ENV + + - name: Make charts + shell: bash + run: | + TAG=${{ env.chart_version }} make generate-charts + + - name: Install chart-releaser + uses: helm/chart-releaser-action@v1.5.0 + with: + install_only: true + + # upload charts to helm-charts repos's release + - name: Upload charts + shell: bash + run: | + cr upload -o ${{ github.repository_owner }} + env: + # GitHub repository + CR_GIT_REPO: "helm-charts" + # Path to directory with chart packages (default ".cr-release-packages") + CR_PACKAGE_PATH: "_output/release/chart/" + # use token for helm-charts repo + CR_TOKEN: "${{ secrets.HELM_CHARTER_TOKEN }}" + + # copy artifacts to helm-charts repo, we need those for update index + - name: Copy artifacts + run: | + cp -r _output/ helm-charts/ + + - name: Configure Git + working-directory: helm-charts + run: | + git config user.name "$GITHUB_ACTOR" + git config user.email "$GITHUB_ACTOR@users.noreply.github.com" + + # this step will directly push to the main branch, so make sure you have the right permissions + - name: Update index + working-directory: helm-charts + run: | + rm -rf index.yaml + rm -rf .cr-index + mkdir -p .cr-index + cr index -o ${{ github.repository_owner }} --push + env: + # GitHub repository + CR_GIT_REPO: "helm-charts" + # The GitHub pages branch (default "gh-pages") + CR_PAGES_BRANCH: "main" + # Path to directory with chart packages (default ".cr-release-packages") + CR_PACKAGE_PATH: "_output/release/chart/" + # use token for helm-charts repo + CR_TOKEN: "${{ secrets.HELM_CHARTER_TOKEN }}" diff --git a/Makefile b/Makefile index 4e188bad..206600d2 100644 --- a/Makefile +++ b/Makefile @@ -61,6 +61,10 @@ gen-client: ## Generate client-go code for CRDs .PHONY: gen-all gen-all: generate gen-client ## Generate all code (CRDs, DeepCopy methods, and client-go) +.PHONY: generate-charts +generate-charts: ## Generate Helm charts + bash ./hack/generate-charts.sh + .PHONY: gen-check gen-check: gen-all ## Check if generated code is up to date git diff --exit-code diff --git a/hack/generate-charts.sh b/hack/generate-charts.sh new file mode 100755 index 00000000..bf15a27a --- /dev/null +++ b/hack/generate-charts.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +# +# Copyright 2026 The Volcano Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +set -o errexit +set -o nounset +set -o pipefail + +AC_ROOT=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/.. +BIN_DIR=${BIN_DIR:-bin} +RELEASE_DIR=${RELEASE_DIR:-_output/release} +export HELM_BIN_DIR=${AC_ROOT}/${BIN_DIR} +export RELEASE_FOLDER=${AC_ROOT}/${RELEASE_DIR} + +export HELM_VER=${HELM_VER:-v3.6.3} +export AGENTCUBE_CHART_VERSION=${TAG:-"latest"} +export AGENTCUBE_IMAGE_TAG=${AGENTCUBE_CHART_VERSION} +# Add a v prefix to AGENTCUBE_IMAGE_TAG if it doesn't have one +if [[ ! ${AGENTCUBE_IMAGE_TAG} =~ ^v ]]; then + AGENTCUBE_IMAGE_TAG="v${AGENTCUBE_IMAGE_TAG}" +fi + +LOCAL_OS=${OSTYPE} +case $LOCAL_OS in + "linux"*) + LOCAL_OS='linux' + alias sed_i='sed -i' + ;; + "darwin"*) + LOCAL_OS='darwin' + alias sed_i='sed -i ""' + ;; + *) + echo "This system's OS ${LOCAL_OS} isn't recognized/supported" + exit 1 + ;; +esac + +# Enable the alias function in the Shell +shopt -s expand_aliases +ARCH=$(go env GOARCH) + +# Step1. install helm binary +if [[ ! -f "${HELM_BIN_DIR}/version.helm.${HELM_VER}" ]] || [[ ! -f "${HELM_BIN_DIR}/helm" ]] ; then + mkdir -p "${HELM_BIN_DIR}" + TD=$(mktemp -d) + ( + cd "${TD}" + curl -Lo "helm.tgz" "https://get.helm.sh/helm-${HELM_VER}-${LOCAL_OS}-${ARCH}.tar.gz" + tar xfz helm.tgz + mv "${LOCAL_OS}-${ARCH}/helm" "${HELM_BIN_DIR}/helm-${HELM_VER}" + ) + cp "${HELM_BIN_DIR}/helm-${HELM_VER}" "${HELM_BIN_DIR}/helm" + chmod +x "${HELM_BIN_DIR}/helm" + rm -rf "${TD}" + + if [[ ! -f "${HELM_BIN_DIR}/version.helm.${HELM_VER}" ]] ; then + touch "${HELM_BIN_DIR}/version.helm.${HELM_VER}" + fi +fi + +echo "generate chart" +CHART_ORIGIN_PATH=${AC_ROOT}/manifests/charts/base +CHART_OUT_PATH=${RELEASE_FOLDER}/chart +rm -rf ${RELEASE_FOLDER}/chart +mkdir -p ${CHART_OUT_PATH} +cp -r "${CHART_ORIGIN_PATH}" "${CHART_OUT_PATH}/agentcube" + +# Update image tags in values.yaml +sed_i "s|tag: \"latest\"|tag: \"${AGENTCUBE_IMAGE_TAG}\"|g" "${CHART_OUT_PATH}/agentcube/values.yaml" + +${HELM_BIN_DIR}/helm package --version ${AGENTCUBE_CHART_VERSION} --app-version ${AGENTCUBE_CHART_VERSION} "${CHART_OUT_PATH}/agentcube" -d "${CHART_OUT_PATH}" +echo "helm package end, charts is in ${CHART_OUT_PATH}"