-
Notifications
You must be signed in to change notification settings - Fork 200
103 lines (83 loc) · 4.23 KB
/
helm.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
name: Helm chart
on:
push:
branches:
- master
tags:
- "chart/**/[0-9]+.[0-9]+.[0-9]+"
- "chart/**/[0-9]+.[0-9]+.[0-9]+-dev.[0-9]+"
- "chart/**/[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+"
pull_request:
env:
HELM_CHART_NAME: kafka-operator
HELM_CHART_PATH: "${{ github.workspace }}/charts/kafka-operator"
HELM_PLUGIN_CHARTMUSEUM_PUSH_VERSION: 0.9.0
HELM_PUSH_REPOSITORY_NAME: banzaicloud-stable
HELM_VERSION: 3.6.0
jobs:
helm:
name: Helm
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- uses: azure/setup-helm@v1
with:
version: ${{ env.HELM_VERSION }}
- name: Add Helm repositories
run: |
helm repo add banzaicloud-stable "https://kubernetes-charts.banzaicloud.com"
helm repo add incubator "https://charts.helm.sh/incubator"
helm repo add stable "https://charts.helm.sh/stable"
- name: Update Helm repositories
run: helm repo update
- name: Lint Helm chart
run: helm lint "${{ env.HELM_CHART_PATH }}"
- name: Update Helm chart dependencies
run: helm dependency update "${{ env.HELM_CHART_PATH }}"
- name: Package Helm chart
id: package-chart
run: |
HELM_PACKAGE_OUTPUT=$(helm package "${{ env.HELM_CHART_PATH }}") || exit 1
HELM_PACKAGE_PATH="${HELM_PACKAGE_OUTPUT##"Successfully packaged chart and saved it to: "}"
echo "HELM_PACKAGE_PATH=${HELM_PACKAGE_PATH}"
echo "helm_package_path=${HELM_PACKAGE_PATH}" >> $GITHUB_OUTPUT
- name: Set Git refname
id: set-git-refname
run: |
GIT_REFNAME="$(echo "${{ github.ref }}" | sed -r 's@refs/(heads|pull|tags)/@@g')"
echo "GIT_REFNAME=${GIT_REFNAME}"
echo "git_refname=${GIT_REFNAME}" >> $GITHUB_OUTPUT
- name: Set Helm push enabled
id: set-helm-push-enabled
run: |
HELM_PUSH_ENABLED=""
if [ "${{ github.event_name }}" == "push" ] && echo "${{ steps.set-git-refname.outputs.git_refname }}" | grep -E -q "^chart/${{ env.HELM_CHART_NAME }}/[0-9]+.[0-9]+.[0-9]+**"; then
HELM_PUSH_ENABLED=1
else
printf >&2 "Unstable chart (%s) from %s event, chart will not be pushed" "${{ steps.set-git-refname.outputs.git_refname }}" "${{ github.event_name }}"
fi
echo "HELM_PUSH_ENABLED=${HELM_PUSH_ENABLED}"
echo "helm_push_enabled=${HELM_PUSH_ENABLED}" >> $GITHUB_OUTPUT
- if: ${{ steps.set-helm-push-enabled.outputs.helm_push_enabled == 1 }}
name: Check Helm chart version in repository
run: |
EXPECTED_CHART_VERSION="$(echo "${{ steps.set-git-refname.outputs.git_refname }}" | awk -F '/' '{print $NF}')" || exit 1
ACTUAL_CHART_VERSION="$(awk '/version: [0-9]+\.[0-9]+\.[0-9]+/ {print $2}' "${{ env.HELM_CHART_PATH }}/Chart.yaml")" || exit 1
if [ "${EXPECTED_CHART_VERSION}" != "${ACTUAL_CHART_VERSION}" ]; then
printf >&2 "chart version mismatches, name: %s, expected version (from tag): %s, actual version (from chart): %s" "${{ env.HELM_CHART_NAME }}" "${EXPECTED_CHART_VERSION}" "${ACTUAL_CHART_VERSION}"
exit 1
fi
if helm search repo "${{ env.HELM_PUSH_REPOSITORY_NAME }}/${{ env.HELM_CHART_NAME }}" --version "${ACTUAL_CHART_VERSION}" --output json | jq --exit-status 'length > 0'; then
printf >&2 "chart version already exists in the repository, repository: %s, name: %s, version: %s" "${{ env.HELM_PUSH_REPOSITORY_NAME }}" "${{ env.HELM_CHART_NAME }}" "${ACTUAL_CHART_VERSION}"
exit 1
fi
- if: ${{ steps.set-helm-push-enabled.outputs.helm_push_enabled == 1 }}
name: Install Helm ChartMuseum push plugin
run: helm plugin install "https://github.com/chartmuseum/helm-push.git" --version "${{ env.HELM_PLUGIN_CHARTMUSEUM_PUSH_VERSION }}"
- if: ${{ steps.set-helm-push-enabled.outputs.helm_push_enabled == 1 }}
name: Push Helm chart
env:
HELM_REPO_PASSWORD: ${{ secrets.HELM_REPO_PASSWORD }}
HELM_REPO_USERNAME: ${{ secrets.HELM_REPO_USERNAME }}
run: helm push "${{ steps.package-chart.outputs.helm_package_path }}" "${{ env.HELM_PUSH_REPOSITORY_NAME }}"