Skip to content

Commit 2723c53

Browse files
committed
Automate release process
Signed-off-by: Andrew Block <[email protected]>
1 parent 8d76426 commit 2723c53

File tree

4 files changed

+132
-6
lines changed

4 files changed

+132
-6
lines changed
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
name: Helm Chart Release
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
chart_version:
7+
description: 'Chart version to release (e.g., 0.1.0)'
8+
required: true
9+
type: string
10+
app_version:
11+
description: 'App version (defaults to latest if not specified)'
12+
required: false
13+
type: string
14+
default: 'latest'
15+
16+
env:
17+
REGISTRY: ghcr.io
18+
CHART_NAME: kubernetes-mcp-server
19+
20+
concurrency:
21+
group: helm-release-${{ github.ref }}
22+
cancel-in-progress: false
23+
24+
jobs:
25+
validate-and-package:
26+
runs-on: ubuntu-latest
27+
permissions:
28+
contents: read
29+
packages: write
30+
31+
steps:
32+
- name: Checkout
33+
uses: actions/checkout@v4
34+
35+
- name: Install Helm
36+
uses: azure/setup-helm@v4
37+
with:
38+
version: '3.19.2'
39+
40+
- name: Validate chart version format
41+
run: |
42+
if [[ ! "${{ inputs.chart_version }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
43+
echo "Error: Chart version must be in format X.Y.Z (e.g., 0.1.0)"
44+
exit 1
45+
fi
46+
47+
- name: Update Chart.yaml versions
48+
run: |
49+
sed -i "s/version: .*/version: ${{ inputs.chart_version }}/" charts/kubernetes-mcp-server/Chart.yaml
50+
sed -i "s/appVersion: .*/appVersion: \"${{ inputs.app_version }}\"/" charts/kubernetes-mcp-server/Chart.yaml
51+
52+
echo "Updated Chart.yaml:"
53+
cat charts/kubernetes-mcp-server/Chart.yaml
54+
- name: Lint Helm chart
55+
run: |
56+
helm lint charts/kubernetes-mcp-server
57+
58+
- name: Template Helm chart (dry run)
59+
run: |
60+
helm template test-release charts/kubernetes-mcp-server --set ingress.host=localhost --debug
61+
- name: Run Helm unit tests (if kubeconform is available)
62+
run: |
63+
# Install kubeconform for validation
64+
curl -L https://github.com/yannh/kubeconform/releases/latest/download/kubeconform-linux-amd64.tar.gz | tar xz
65+
sudo mv kubeconform /usr/local/bin
66+
67+
# Validate generated manifests
68+
helm template test-release charts/kubernetes-mcp-server --set ingress.host=localhost | kubeconform -strict -summary -ignore-missing-schemas
69+
70+
- name: Package Helm chart
71+
run: |
72+
helm package charts/kubernetes-mcp-server --destination ./chart-packages
73+
echo "Generated packages:"
74+
ls -la ./chart-packages/
75+
76+
- name: Login to Container Registry
77+
run: |
78+
echo ${{ secrets.GITHUB_TOKEN }} | helm registry login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin
79+
80+
- name: Push chart to OCI registry
81+
run: |
82+
chart_package=$(ls ./chart-packages/kubernetes-mcp-server-*.tgz)
83+
echo "Pushing chart package: $chart_package"
84+
helm push "$chart_package" oci://${{ env.REGISTRY }}/${{ github.repository_owner }}/charts
85+
86+
- name: Verify chart installation
87+
run: |
88+
# Verify the chart we just pushed works (client-only, no cluster needed)
89+
echo "Testing chart template rendering from OCI registry..."
90+
helm template test-install oci://${{ env.REGISTRY }}/${{ github.repository_owner }}/charts/kubernetes-mcp-server --set ingress.host=localhost --version ${{ inputs.chart_version }} --debug
91+
92+
- name: Generate release summary
93+
run: |
94+
echo "## Helm Chart Release Summary" >> $GITHUB_STEP_SUMMARY
95+
echo "" >> $GITHUB_STEP_SUMMARY
96+
echo "- **Chart Name:** ${{ env.CHART_NAME }}" >> $GITHUB_STEP_SUMMARY
97+
echo "- **Chart Version:** ${{ inputs.chart_version }}" >> $GITHUB_STEP_SUMMARY
98+
echo "- **App Version:** ${{ inputs.app_version }}" >> $GITHUB_STEP_SUMMARY
99+
echo "- **Registry:** ${{ env.REGISTRY }}/${{ github.repository_owner }}/charts" >> $GITHUB_STEP_SUMMARY
100+
echo "" >> $GITHUB_STEP_SUMMARY
101+
echo "### Installation Command" >> $GITHUB_STEP_SUMMARY
102+
echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY
103+
echo "helm install kubernetes-mcp-server oci://${{ env.REGISTRY }}/${{ github.repository_owner }}/charts/kubernetes-mcp-server --set ingress.host=<hostname> --version ${{ inputs.chart_version }} --create-namespace --namespace mcp-system" >> $GITHUB_STEP_SUMMARY
104+
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
105+
106+
create-git-tag:
107+
needs: validate-and-package
108+
runs-on: ubuntu-latest
109+
permissions:
110+
contents: write
111+
112+
steps:
113+
- name: Checkout
114+
uses: actions/checkout@v4
115+
116+
- name: Create and push git tag
117+
run: |
118+
git config user.name "github-actions[bot]"
119+
git config user.email "github-actions[bot]@users.noreply.github.com"
120+
121+
tag_name="chart-v${{ inputs.chart_version }}"
122+
git tag -a "$tag_name" -m "Helm chart release v${{ inputs.chart_version }}"
123+
git push origin "$tag_name"
124+
125+
echo "Created git tag: $tag_name"

charts/kubernetes-mcp-server/Chart.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ maintainers:
1111
- name: Marc Nuri
1212
1313
version: 0.1.0
14+
appVersion: "latest"

charts/kubernetes-mcp-server/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# kubernetes-mcp-server
22

3-
![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square)
3+
![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![AppVersion: latest](https://img.shields.io/badge/AppVersion-latest-informational?style=flat-square)
44

55
Helm Chart for the Kubernetes MCP Server
66

@@ -20,12 +20,12 @@ The Chart can be installed quickly and easily to a Kubernetes cluster. Since an
2020
Install the Chart using the following command from the root of this directory:
2121

2222
```shell
23-
helm upgrade -i -n kubernetes-mcp-server --create-namespace kubernetes-mcp-server . --set openshift=true --set ingress.host=<hostname>
23+
helm upgrade -i -n kubernetes-mcp-server --create-namespace kubernetes-mcp-server oci://ghcr.io/containers/charts/kubernetes-mcp-server --set ingress.host=<hostname>
2424
```
2525

2626
### Optimized OpenShift Deployment
2727

28-
Functionality has bee added to the Chart to simplify the deployment to OpenShift Cluster.
28+
Functionality has been added to the Chart to simplify the deployment to OpenShift Cluster.
2929

3030
## Values
3131

@@ -72,5 +72,5 @@ The contents of the README.md file is generated using [helm-docs](https://github
7272
Execute the following command to regenerate the documentation from within the Helm Chart directory.
7373

7474
```shell
75-
helm-docs -t README.md.gotpl
75+
helm-docs -t README.md.gotmpl
7676
```

charts/kubernetes-mcp-server/README.md.gotmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ The Chart can be installed quickly and easily to a Kubernetes cluster. Since an
2020
Install the Chart using the following command from the root of this directory:
2121

2222
```shell
23-
helm upgrade -i -n kubernetes-mcp-server --create-namespace kubernetes-mcp-server . --set openshift=true --set ingress.host=<hostname>
23+
helm upgrade -i -n kubernetes-mcp-server --create-namespace kubernetes-mcp-server oci://ghcr.io/containers/charts/kubernetes-mcp-server --set ingress.host=<hostname>
2424
```
2525

2626
### Optimized OpenShift Deployment
@@ -36,5 +36,5 @@ The contents of the README.md file is generated using [helm-docs](https://github
3636
Execute the following command to regenerate the documentation from within the Helm Chart directory.
3737

3838
```shell
39-
helm-docs -t README.md.gotpl
39+
helm-docs -t README.md.gotmpl
4040
```

0 commit comments

Comments
 (0)