name: Release Helm chart on: workflow_dispatch: env: CR_CONFIGFILE: "${{ github.workspace }}/source/.github/configs/cr.yaml" CT_CONFIGFILE: "${{ github.workspace }}/source/.github/configs/ct.yaml" CR_INDEX_PATH: "${{ github.workspace }}/.cr-index" CR_PACKAGE_PATH: "${{ github.workspace }}/.cr-release-packages" CR_TOOL_PATH: "${{ github.workspace }}/.cr-tool" CR_VERSION: "1.5.0" permissions: contents: read id-token: write jobs: setup: runs-on: ubuntu-latest outputs: changed: ${{ steps.list-changed.outputs.changed }} chartpath: ${{ steps.list-changed.outputs.chartpath }} steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 path: source - name: Install chart-testing uses: helm/chart-testing-action@v2 - name: List changed charts id: list-changed run: | cd source latest_tag=$( if ! git describe --tags --abbrev=0 --match='helm-chart/*' 2> /dev/null ; then git rev-list --max-parents=0 --first-parent HEAD; fi ) echo "Running: ct list-changed --config ${CT_CONFIGFILE} --since ${latest_tag} --target-branch ${{ github.ref_name }}" changed=$(ct list-changed --config "${CT_CONFIGFILE}" --since "${latest_tag}" --target-branch "${{ github.ref_name }}") echo "${changed}" num_changed=$(wc -l <<< ${changed}) if [[ "${num_changed}" -gt "1" ]] ; then echo "More than one chart changed, exiting" exit 1 fi if [[ -n "${changed}" ]]; then name=$(yq ".name" < ${changed}/Chart.yaml) version=$(yq ".version" < ${changed}/Chart.yaml) tagname="v${version}" if [ $(git tag -l "${tagname}") ]; then echo "Tag ${tagname} already exists, skipping release" echo "changed=false" >> $GITHUB_OUTPUT else echo "Releasing ${changed}" echo "changed=true" >> $GITHUB_OUTPUT echo "chartpath=${changed}" >> $GITHUB_OUTPUT fi else echo "No charts have changed, skipping release" echo "changed=false" >> $GITHUB_OUTPUT fi release: needs: [setup] runs-on: ubuntu-latest if: needs.setup.outputs.changed == 'true' steps: - uses: actions/create-github-app-token@v1 id: app-token with: app-id: ${{ secrets.APP_ID }} private-key: ${{ secrets.PRIVATE_KEY }} - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 path: source - name: Configure Git run: | cd source git config user.name "$GITHUB_ACTOR" git config user.email "$GITHUB_ACTOR@users.noreply.github.com" - name: Checkout helm-charts uses: actions/checkout@v4 with: fetch-depth: 0 repository: grafana/helm-charts path: helm-charts token: "${{ steps.app-token.outputs.token }}" - name: Configure Git for helm-charts run: | cd helm-charts git config user.name "$GITHUB_ACTOR" git config user.email "$GITHUB_ACTOR@users.noreply.github.com" - name: Set up Helm uses: azure/setup-helm@v4 - name: Parse Chart.yaml id: parse-chart run: | cd source changed="${{ needs.setup.outputs.chartpath }}" description=$(yq ".description" < ${changed}/Chart.yaml) name=$(yq ".name" < ${changed}/Chart.yaml) version=$(yq ".version" < ${changed}/Chart.yaml) echo "chartpath=${changed}" >> $GITHUB_OUTPUT echo "desc=${description}" >> $GITHUB_OUTPUT echo "tagname=v${version}" >> $GITHUB_OUTPUT echo "packagename=${name}-${version}" >> $GITHUB_OUTPUT - name: Install CR tool run: | mkdir "${CR_TOOL_PATH}" mkdir "${CR_PACKAGE_PATH}" mkdir "${CR_INDEX_PATH}" curl -sSLo cr.tar.gz "https://github.com/helm/chart-releaser/releases/download/v${CR_VERSION}/chart-releaser_${CR_VERSION}_linux_amd64.tar.gz" tar -xzf cr.tar.gz -C "${CR_TOOL_PATH}" rm -f cr.tar.gz - name: Create Helm package run: | cd source helm repo add grafana https://grafana.github.io/helm-charts helm repo add minio https://charts.min.io "${CR_TOOL_PATH}/cr" package "${{ steps.parse-chart.outputs.chartpath }}" --config "${CR_CONFIGFILE}" --package-path "${CR_PACKAGE_PATH}" - name: Make a release on this repo uses: softprops/action-gh-release@v2 with: name: ${{ steps.parse-chart.outputs.tagname }} repository: grafana/meta-monitoring-chart tag_name: ${{ steps.parse-chart.outputs.tagname }} token: ${{ steps.app-token.outputs.token }} generate_release_notes: true files: | ${{ env.CR_PACKAGE_PATH }}/${{ steps.parse-chart.outputs.packagename }}.tgz # Note that this creates a release in grafana/helm-charts with a new tag. # The tag name in grafana/helm-charts is -, while the # tag name for grafana/meta-monitoring-chart is . - name: Make release on Helm Charts uses: softprops/action-gh-release@v2 with: name: ${{ steps.parse-chart.outputs.packagename }} repository: grafana/helm-charts tag_name: ${{ steps.parse-chart.outputs.packagename }} token: ${{ steps.app-token.outputs.token }} body: | ${{ steps.parse-chart.outputs.desc }} Source commit: https://github.com/${{ github.repository }}/commit/${{ github.sha }} Tag on source: https://github.com/${{ github.repository }}/releases/tag/${{ steps.parse-chart.outputs.tagname }} files: | ${{ env.CR_PACKAGE_PATH }}/${{ steps.parse-chart.outputs.packagename }}.tgz - name: Update helm-charts index.yaml run: | cd helm-charts "${CR_TOOL_PATH}/cr" index --config "${CR_CONFIGFILE}" --token "${{ steps.app-token.outputs.token }}" --index-path "${CR_INDEX_PATH}" --package-path "${CR_PACKAGE_PATH}" --push