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"
0 commit comments