Skip to content

Commit 603648a

Browse files
committed
Automates Helm chart version bumps and example rendering using
1 parent 9ef9caa commit 603648a

9 files changed

Lines changed: 1368 additions & 2 deletions

.github/mergify.yml

Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
queue_rules:
2+
# Per-chart × semver queues
3+
- name: opentelemetry-collector-patch
4+
conditions:
5+
- base=main
6+
- label=chart:opentelemetry-collector
7+
- label=semvertype:patch
8+
- status-success=PR SemVer label check
9+
- status-success=PR generation check
10+
- name: opentelemetry-collector-minor
11+
conditions:
12+
- base=main
13+
- label=chart:opentelemetry-collector
14+
- label=semvertype:minor
15+
- status-success=PR SemVer label check
16+
- status-success=PR generation check
17+
- name: opentelemetry-collector-major
18+
conditions:
19+
- base=main
20+
- label=chart:opentelemetry-collector
21+
- label=semvertype:major
22+
- status-success=PR SemVer label check
23+
- status-success=PR generation check
24+
25+
- name: opentelemetry-operator-patch
26+
conditions:
27+
- base=main
28+
- label=chart:opentelemetry-operator
29+
- label=semvertype:patch
30+
- status-success=PR SemVer label check
31+
- status-success=PR generation check
32+
- name: opentelemetry-operator-minor
33+
conditions:
34+
- base=main
35+
- label=chart:opentelemetry-operator
36+
- label=semvertype:minor
37+
- status-success=PR SemVer label check
38+
- status-success=PR generation check
39+
- name: opentelemetry-operator-major
40+
conditions:
41+
- base=main
42+
- label=chart:opentelemetry-operator
43+
- label=semvertype:major
44+
- status-success=PR SemVer label check
45+
- status-success=PR generation check
46+
47+
- name: opentelemetry-demo-patch
48+
conditions:
49+
- base=main
50+
- label=chart:opentelemetry-demo
51+
- label=semvertype:patch
52+
- status-success=PR SemVer label check
53+
- status-success=PR generation check
54+
- name: opentelemetry-demo-minor
55+
conditions:
56+
- base=main
57+
- label=chart:opentelemetry-demo
58+
- label=semvertype:minor
59+
- status-success=PR SemVer label check
60+
- status-success=PR generation check
61+
- name: opentelemetry-demo-major
62+
conditions:
63+
- base=main
64+
- label=chart:opentelemetry-demo
65+
- label=semvertype:major
66+
- status-success=PR SemVer label check
67+
- status-success=PR generation check
68+
69+
- name: opentelemetry-ebpf-patch
70+
conditions:
71+
- base=main
72+
- label=chart:opentelemetry-ebpf
73+
- label=semvertype:patch
74+
- status-success=PR SemVer label check
75+
- status-success=PR generation check
76+
- name: opentelemetry-ebpf-minor
77+
conditions:
78+
- base=main
79+
- label=chart:opentelemetry-ebpf
80+
- label=semvertype:minor
81+
- status-success=PR SemVer label check
82+
- status-success=PR generation check
83+
- name: opentelemetry-ebpf-major
84+
conditions:
85+
- base=main
86+
- label=chart:opentelemetry-ebpf
87+
- label=semvertype:major
88+
- status-success=PR SemVer label check
89+
- status-success=PR generation check
90+
91+
- name: opentelemetry-kube-stack-patch
92+
conditions:
93+
- base=main
94+
- label=chart:opentelemetry-kube-stack
95+
- label=semvertype:patch
96+
- status-success=PR SemVer label check
97+
- status-success=PR generation check
98+
- name: opentelemetry-kube-stack-minor
99+
conditions:
100+
- base=main
101+
- label=chart:opentelemetry-kube-stack
102+
- label=semvertype:minor
103+
- status-success=PR SemVer label check
104+
- status-success=PR generation check
105+
- name: opentelemetry-kube-stack-major
106+
conditions:
107+
- base=main
108+
- label=chart:opentelemetry-kube-stack
109+
- label=semvertype:major
110+
- status-success=PR SemVer label check
111+
- status-success=PR generation check
112+
113+
- name: opentelemetry-target-allocator-patch
114+
conditions:
115+
- base=main
116+
- label=chart:opentelemetry-target-allocator
117+
- label=semvertype:patch
118+
- status-success=PR SemVer label check
119+
- status-success=PR generation check
120+
- name: opentelemetry-target-allocator-minor
121+
conditions:
122+
- base=main
123+
- label=chart:opentelemetry-target-allocator
124+
- label=semvertype:minor
125+
- status-success=PR SemVer label check
126+
- status-success=PR generation check
127+
- name: opentelemetry-target-allocator-major
128+
conditions:
129+
- base=main
130+
- label=chart:opentelemetry-target-allocator
131+
- label=semvertype:major
132+
- status-success=PR SemVer label check
133+
- status-success=PR generation check
134+
135+
pull_request_rules:
136+
- name: Route to opentelemetry-collector queue
137+
conditions:
138+
- base=main
139+
- label=chart:opentelemetry-collector
140+
- label~=^semvertype:(patch|minor|major)$
141+
- status-success=PR SemVer label check
142+
- status-success=PR generation check
143+
actions:
144+
queue:
145+
name: opentelemetry-collector-{{ label|replace('semvertype:', '') | lower }}
146+
method: squash
147+
update_method: merge
148+
149+
- name: Route to opentelemetry-operator queue
150+
conditions:
151+
- base=main
152+
- label=chart:opentelemetry-operator
153+
- label~=^semvertype:(patch|minor|major)$
154+
- status-success=PR SemVer label check
155+
- status-success=PR generation check
156+
actions:
157+
queue:
158+
name: opentelemetry-operator-{{ label|replace('semvertype:', '') | lower }}
159+
method: squash
160+
update_method: merge
161+
162+
- name: Route to opentelemetry-demo queue
163+
conditions:
164+
- base=main
165+
- label=chart:opentelemetry-demo
166+
- label~=^semvertype:(patch|minor|major)$
167+
- status-success=PR SemVer label check
168+
- status-success=PR generation check
169+
actions:
170+
queue:
171+
name: opentelemetry-demo-{{ label|replace('semvertype:', '') | lower }}
172+
method: squash
173+
update_method: merge
174+
175+
- name: Route to opentelemetry-ebpf queue
176+
conditions:
177+
- base=main
178+
- label=chart:opentelemetry-ebpf
179+
- label~=^semvertype:(patch|minor|major)$
180+
- status-success=PR SemVer label check
181+
- status-success=PR generation check
182+
actions:
183+
queue:
184+
name: opentelemetry-ebpf-{{ label|replace('semvertype:', '') | lower }}
185+
method: squash
186+
update_method: merge
187+
188+
- name: Route to opentelemetry-kube-stack queue
189+
conditions:
190+
- base=main
191+
- label=chart:opentelemetry-kube-stack
192+
- label~=^semvertype:(patch|minor|major)$
193+
- status-success=PR SemVer label check
194+
- status-success=PR generation check
195+
actions:
196+
queue:
197+
name: opentelemetry-kube-stack-{{ label|replace('semvertype:', '') | lower }}
198+
method: squash
199+
update_method: merge
200+
201+
- name: Route to opentelemetry-target-allocator queue
202+
conditions:
203+
- base=main
204+
- label=chart:opentelemetry-target-allocator
205+
- label~=^semvertype:(patch|minor|major)$
206+
- status-success=PR SemVer label check
207+
- status-success=PR generation check
208+
actions:
209+
queue:
210+
name: opentelemetry-target-allocator-{{ label|replace('semvertype:', '') | lower }}
211+
method: squash
212+
update_method: merge
213+
214+
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
# bump_chart_version.sh <chart_yaml_path> <bump_type> [prerelease]
5+
# - bump_type: patch|minor|major
6+
# - optional prerelease string (e.g., rc.1) or via PRERELEASE env
7+
8+
if [[ $# -lt 2 ]]; then
9+
echo "usage: $0 <charts/.../Chart.yaml> <patch|minor|major> [prerelease]" >&2
10+
exit 64
11+
fi
12+
13+
chart_yaml="$1"
14+
bump_type="$2"
15+
prerelease_part="${3:-${PRERELEASE:-}}"
16+
17+
if [[ ! -f "$chart_yaml" ]]; then
18+
echo "error: file not found: $chart_yaml" >&2
19+
exit 66
20+
fi
21+
22+
read_current_version() {
23+
if command -v yq >/dev/null 2>&1; then
24+
yq e '.version' "$chart_yaml"
25+
else
26+
awk '/^version:/ {print $2; exit}' "$chart_yaml"
27+
fi
28+
}
29+
30+
write_new_version() {
31+
local newv="$1"
32+
if command -v yq >/dev/null 2>&1; then
33+
yq e ".version = \"${newv}\"" -i "$chart_yaml"
34+
else
35+
if grep -q '^[[:space:]]*version:' "$chart_yaml"; then
36+
sed -i -E "s/^([[:space:]]*version:[[:space:]]*).*/\1${newv}/" "$chart_yaml"
37+
else
38+
echo "version: ${newv}" >> "$chart_yaml"
39+
fi
40+
fi
41+
}
42+
43+
strip_prerelease_build() {
44+
printf '%s' "$1" | sed -E 's/[-+].*$//'
45+
}
46+
47+
cur=$(read_current_version)
48+
if [[ -z "$cur" || "$cur" == "null" ]]; then
49+
echo "error: could not read current version from $chart_yaml" >&2
50+
exit 65
51+
fi
52+
53+
base=$(strip_prerelease_build "$cur")
54+
IFS='.' read -r major minor patch <<< "$base"
55+
major=${major:-0}
56+
minor=${minor:-0}
57+
patch=${patch:-0}
58+
59+
case "$bump_type" in
60+
major)
61+
major=$((major+1)); minor=0; patch=0 ;;
62+
minor)
63+
minor=$((minor+1)); patch=0 ;;
64+
patch)
65+
patch=$((patch+1)) ;;
66+
*)
67+
echo "error: invalid bump_type '$bump_type' (expected major|minor|patch)" >&2
68+
exit 64 ;;
69+
esac
70+
71+
newv="${major}.${minor}.${patch}"
72+
if [[ -n "$prerelease_part" ]]; then
73+
newv+="-${prerelease_part}"
74+
fi
75+
76+
write_new_version "$newv"
77+
echo "$newv"
78+
79+
#!/usr/bin/env bash
80+
set -euo pipefail
81+
82+
# bump_chart_version.sh <chart_yaml_path> <bump_type> [prerelease]
83+
# - bump_type: patch|minor|major
84+
# - optional prerelease string (e.g., rc.1) or via PRERELEASE env
85+
# Requires: yq (v4). Falls back to sed if yq not found (best-effort).
86+
87+
if [[ $# -lt 2 ]]; then
88+
echo "usage: $0 <charts/.../Chart.yaml> <patch|minor|major> [prerelease]" >&2
89+
exit 64
90+
fi
91+
92+
chart_yaml="$1"
93+
bump_type="$2"
94+
prerelease_part="${3:-${PRERELEASE:-}}"
95+
96+
if [[ ! -f "$chart_yaml" ]]; then
97+
echo "error: file not found: $chart_yaml" >&2
98+
exit 66
99+
fi
100+
101+
read_current_version() {
102+
if command -v yq >/dev/null 2>&1; then
103+
yq e '.version' "$chart_yaml"
104+
else
105+
# naive fallback: grep first 'version:' at column 0
106+
awk '/^version:/ {print $2; exit}' "$chart_yaml"
107+
fi
108+
}
109+
110+
write_new_version() {
111+
local newv="$1"
112+
if command -v yq >/dev/null 2>&1; then
113+
yq e ".version = \"${newv}\"" -i "$chart_yaml"
114+
else
115+
# sed inline replacement of top-level version
116+
# keep indentation as-is if any
117+
if grep -q '^[[:space:]]*version:' "$chart_yaml"; then
118+
sed -i -E "s/^([[:space:]]*version:[[:space:]]*).*/\\1${newv}/" "$chart_yaml"
119+
else
120+
echo "version: ${newv}" >> "$chart_yaml"
121+
fi
122+
fi
123+
}
124+
125+
strip_prerelease_build() {
126+
# remove -pre and +build metadata
127+
printf '%s' "$1" | sed -E 's/[-+].*$//'
128+
}
129+
130+
cur=$(read_current_version)
131+
if [[ -z "$cur" || "$cur" == "null" ]]; then
132+
echo "error: could not read current version from $chart_yaml" >&2
133+
exit 65
134+
fi
135+
136+
base=$(strip_prerelease_build "$cur")
137+
IFS='.' read -r major minor patch <<< "$base"
138+
major=${major:-0}
139+
minor=${minor:-0}
140+
patch=${patch:-0}
141+
142+
case "$bump_type" in
143+
major)
144+
major=$((major+1)); minor=0; patch=0 ;;
145+
minor)
146+
minor=$((minor+1)); patch=0 ;;
147+
patch)
148+
patch=$((patch+1)) ;;
149+
*)
150+
echo "error: invalid bump_type '$bump_type' (expected major|minor|patch)" >&2
151+
exit 64 ;;
152+
esac
153+
154+
newv="${major}.${minor}.${patch}"
155+
if [[ -n "$prerelease_part" ]]; then
156+
newv+="-${prerelease_part}"
157+
fi
158+
159+
write_new_version "$newv"
160+
echo "$newv"
161+
162+

0 commit comments

Comments
 (0)