Add CI to publish helm chart
Signed-off-by: Michel Hollands <michel.hollands@gmail.com>
This commit is contained in:
parent
c282bf352d
commit
b1975505e5
161
.github/workflows/helm-release.yml
vendored
Normal file
161
.github/workflows/helm-release.yml
vendored
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
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"
|
||||||
|
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:
|
||||||
|
- 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: "${{ secrets.GH_BOT_ACCESS_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
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- 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: ${{ secrets.GH_BOT_ACCESS_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 <package>-<version>, while the
|
||||||
|
# tag name for grafana/meta-monitoring-chart is <version>.
|
||||||
|
- 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: ${{ secrets.GH_BOT_ACCESS_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 "${{ secrets.GH_BOT_ACCESS_TOKEN }}" --index-path "${CR_INDEX_PATH}" --package-path "${CR_PACKAGE_PATH}" --push
|
Loading…
x
Reference in New Issue
Block a user