Skip to content

Commit c12fcb4

Browse files
committed
chore(chart): Refactor chart release logic to support releasing from master
Signed-off-by: Steve Hipwell <[email protected]>
1 parent a504ef3 commit c12fcb4

File tree

3 files changed

+59
-65
lines changed

3 files changed

+59
-65
lines changed

.github/workflows/lint-test-chart.yaml

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ name: Lint and Test Chart
22

33
on:
44
pull_request:
5+
branches:
6+
- master
7+
- release-v*
58
paths:
6-
- .github/workflows/lint-test-chart.yaml
7-
- "charts/metrics-server/**"
9+
- charts/metrics-server/**
810

911
permissions:
1012
contents: read
@@ -23,6 +25,23 @@ jobs:
2325
with:
2426
fetch-depth: 0
2527

28+
- name: Setup
29+
id: setup
30+
run: |
31+
set -euo pipefail
32+
33+
chart_version="$(yq eval '.version' ./charts/metrics-server/Chart.yaml)"
34+
changed=false
35+
36+
if [[ -n "$(ct list-changed --target-branch=master)" ]]; then
37+
changed=true
38+
fi
39+
40+
{
41+
echo "chart_version=${chart_version}"
42+
echo "changed=${changed}"
43+
} >> "${GITHUB_OUTPUT}"
44+
2645
- name: Set-up Python
2746
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
2847
with:
@@ -36,33 +55,15 @@ jobs:
3655
- name: Set-up chart-testing
3756
uses: helm/chart-testing-action@0d28d3144d3a25ea2cc349d6e59901c4ff469b3b # v2.7.0
3857

39-
- name: Check for changes
40-
id: changes
41-
run: |
42-
changed="$(ct list-changed --target-branch=master)"
43-
if [[ -n "${changed}" ]]
44-
then
45-
echo "changed=true" >> "${GITHUB_OUTPUT}"
46-
else
47-
echo "changed=false" >> "${GITHUB_OUTPUT}"
48-
fi
49-
50-
- name: Get chart version
51-
id: chart_version
52-
if: steps.changes.outputs.changed == 'true'
53-
uses: mikefarah/yq@f03c9dc599c37bfcaf533427211d05e51e6fee64 # v4.47.1
54-
with:
55-
cmd: yq eval '.version' './charts/metrics-server/Chart.yaml'
56-
5758
- name: Get changelog entry
58-
if: steps.changes.outputs.changed == 'true'
59+
if: steps.setup.outputs.changed == 'true'
5960
uses: mindsers/changelog-reader-action@32aa5b4c155d76c94e4ec883a223c947b2f02656 # v2.2.3
6061
with:
6162
path: charts/metrics-server/CHANGELOG.md
62-
version: ${{ steps.chart_version.outputs.result }}
63+
version: ${{ steps.setup.outputs.chart_version }}
6364

6465
- name: Set-up Artifact Hub CLI
65-
if: steps.changes.outputs.changed == 'true'
66+
if: steps.setup.outputs.changed == 'true'
6667
uses: action-stars/install-tool-from-github-release@f2e83e089fa618aa7e9fd3452fbcf4fe1598ede2 # v0.2.5
6768
with:
6869
github_token: ${{ github.token }}
@@ -73,21 +74,21 @@ jobs:
7374
version: latest
7475

7576
- name: Run Artifact Hub lint
76-
if: steps.changes.outputs.changed == 'true'
77+
if: steps.setup.outputs.changed == 'true'
7778
run: ah lint --kind helm || exit 1
7879

7980
- name: Run chart-testing lint
80-
if: steps.changes.outputs.changed == 'true'
81+
if: steps.setup.outputs.changed == 'true'
8182
run: ct lint --target-branch=master --check-version-increment=false
8283

8384
- name: Create Kind cluster
84-
if: steps.changes.outputs.changed == 'true'
85+
if: steps.setup.outputs.changed == 'true'
8586
uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 # v1.12.0
8687
with:
8788
wait: 120s
8889

8990
- name: Install cert-manager dependency
90-
if: steps.changes.outputs.changed == 'true'
91+
if: steps.setup.outputs.changed == 'true'
9192
run: |
9293
helm repo add jetstack https://charts.jetstack.io
9394
helm install cert-manager jetstack/cert-manager \
@@ -98,7 +99,7 @@ jobs:
9899
--set extraArgs='{--enable-certificate-owner-ref}'
99100
100101
- name: Prepare existing secret test scenario
101-
if: steps.changes.outputs.changed == 'true'
102+
if: steps.setup.outputs.changed == 'true'
102103
run: |
103104
openssl req -x509 -newkey rsa:2048 -sha256 -days 365 \
104105
-nodes -keyout ${{ runner.temp }}/tls.key -out ${{ runner.temp }}/tls.crt \
@@ -119,5 +120,5 @@ jobs:
119120
rm ${{ runner.temp }}/tls.key ${{ runner.temp }}/tls.crt
120121
121122
- name: Run chart-testing install
122-
if: steps.changes.outputs.changed == 'true'
123+
if: steps.setup.outputs.changed == 'true'
123124
run: ct install --target-branch=master --namespace kube-system

.github/workflows/release-chart.yaml

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ name: Release Chart
33
on:
44
push:
55
branches:
6+
- master
67
- release-*
78
paths:
89
- charts/metrics-server/Chart.yaml
@@ -26,67 +27,59 @@ jobs:
2627
with:
2728
fetch-depth: 0
2829

29-
- name: Configure Git
30-
run: |
31-
git config user.name "$GITHUB_ACTOR"
32-
git config user.email "[email protected]"
33-
34-
- name: Get chart version
35-
id: chart_version
36-
uses: mikefarah/yq@f03c9dc599c37bfcaf533427211d05e51e6fee64 # v4.47.1
37-
with:
38-
cmd: yq eval '.version' './charts/metrics-server/Chart.yaml'
39-
40-
- name: Get chart app version
41-
id: chart_app_version
42-
uses: mikefarah/yq@f03c9dc599c37bfcaf533427211d05e51e6fee64 # v4.47.1
43-
with:
44-
cmd: yq eval '.appVersion' './charts/metrics-server/Chart.yaml'
45-
46-
- name: Check can release
47-
id: check_can_release
30+
- name: Setup
31+
id: setup
4832
run: |
4933
set -euo pipefail
5034
51-
branch_name="${GITHUB_REF##*/}"
52-
app_version_prefix="${branch_name##*-}"
35+
chart_file="./charts/metrics-server/Chart.yaml"
5336
54-
app_version_regex="^${app_version_prefix//./\.}"
37+
chart_version="$(yq eval '.version' "${chart_file}")"
38+
app_version="$(yq eval '.appVersion' "${chart_file}")"
39+
release=false
5540
56-
chart_version_match="$(echo "${{ steps.chart_version.outputs.result }}" | grep -Po "^\d+\.\d+\.\d+$" || true)"
57-
app_version_match="$(echo "${{ steps.chart_app_version.outputs.result }}" | grep -Po "^${app_version_prefix//./\.}" || true)"
58-
59-
if [[ -z "${chart_version_match}" ]] || [[ -z "${app_version_match}" ]]
60-
then
61-
echo "continue=false" >> $GITHUB_OUTPUT
62-
else
63-
echo "continue=true" >> $GITHUB_OUTPUT
41+
if [[ -z "$(gh release view --repo kubernetes-sigs/metrics-server "metrics-server-helm-chart-${chart_version}" --json id || true)" ]]; then
42+
branch_name='${{ github.ref_name }}'
43+
if [[ "${branch_name}" == "master" ]]; then
44+
release=true
45+
else
46+
branch_version_prefix="$(grep -Eo '[0-9]+\.[0-9]+$' <<<"${branch_name}")"
47+
if [[ -n "$(grep -o "${branch_version_prefix}" <<<"${app_version}" || true)" ]]; then
48+
release=true
49+
fi
50+
fi
6451
fi
6552
53+
{
54+
echo "chart_version=${chart_version}"
55+
echo "app_version=${app_version}"
56+
echo "release=${release}"
57+
} >> "${GITHUB_OUTPUT}"
58+
6659
- name: Set-up Helm
67-
if: steps.check_can_release.outputs.continue == 'true'
60+
if: steps.setup.outputs.release == 'true'
6861
uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 # v4.3.0
6962
with:
7063
version: latest
7164

7265
- name: Get CHANGELOG entry
7366
id: changelog_reader
74-
if: steps.check_can_release.outputs.continue == 'true'
67+
if: steps.setup.outputs.release == 'true'
7568
uses: mindsers/changelog-reader-action@32aa5b4c155d76c94e4ec883a223c947b2f02656 # v2.2.3
7669
with:
7770
path: charts/metrics-server/CHANGELOG.md
78-
version: ${{ steps.chart_version.outputs.result }}
71+
version: ${{ steps.setup.outputs.chart_version }}
7972

8073
- name: Create release notes
81-
if: steps.check_can_release.outputs.continue == 'true'
74+
if: steps.setup.outputs.release == 'true'
8275
run: |
8376
set -euo pipefail
8477
cat <<"EOF" > charts/metrics-server/RELEASE.md
8578
${{ steps.changelog_reader.outputs.changes }}
8679
EOF
8780
8881
- name: Run chart-releaser
89-
if: steps.check_can_release.outputs.continue == 'true'
82+
if: steps.setup.outputs.release == 'true'
9083
uses: helm/chart-releaser-action@cae68fefc6b5f367a0275617c9f83181ba54714f # v1.7.0
9184
env:
9285
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

charts/metrics-server/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
## [UNRELEASED]
1616

17-
## [3.13.0] - TBC
17+
## [3.13.0] - 2025-07-22
1818

1919
### Added
2020

0 commit comments

Comments
 (0)