@@ -2,15 +2,16 @@ name: Publish Helm Chart
22
33on :
44 pull_request :
5+ types : [opened, synchronize, reopened, ready_for_review]
56 branches :
67 - main
78 paths :
8- - ' deploy/helm/**'
9+ - " deploy/helm/**"
910 push :
1011 branches :
1112 - main
1213 paths :
13- - ' deploy/helm/**'
14+ - " deploy/helm/**"
1415 workflow_dispatch :
1516
1617env :
2021 CHART_NAME : semantic-router
2122
2223jobs :
23- publish-chart :
24- name : Publish Helm Chart to GHCR
24+ validate-and-package :
25+ name : Validate and Package
26+ if : ${{ !github.event.pull_request.draft }}
2527 runs-on : ubuntu-latest
2628 permissions :
2729 contents : read
28- packages : write
30+ outputs :
31+ chart-name : ${{ steps.package.outputs.name }}
2932 steps :
30- - name : Checkout code
31- uses : actions/checkout@v4
32-
33- - name : Set up Helm
34- uses : azure/setup-helm@v4
33+ - uses : actions/checkout@v4
34+ - uses : azure/setup-helm@v4
3535 with :
3636 version : ${{ env.HELM_VERSION }}
3737
38- - name : Set lowercase repository owner
39- run : echo "REPOSITORY_OWNER_LOWER=$(echo $GITHUB_REPOSITORY_OWNER | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
40-
41- - name : Log in to GitHub Container Registry
42- run : |
43- echo "${{ secrets.GITHUB_TOKEN }}" | helm registry login ${{ env.REGISTRY }} --username ${{ github.actor }} --password-stdin
44-
45- - name : Modify chart version to latest
46- run : |
47- echo "::group::Modify Chart.yaml"
48- # Backup original Chart.yaml
49- cp ${{ env.CHART_PATH }}/Chart.yaml ${{ env.CHART_PATH }}/Chart.yaml.bak
50-
51- # Replace version with 'v0.0.0-latest' (valid semver with prerelease tag)
52- sed -i 's/^version:.*/version: v0.0.0-latest/' ${{ env.CHART_PATH }}/Chart.yaml
53-
54- echo "Modified Chart.yaml:"
55- grep '^version:' ${{ env.CHART_PATH }}/Chart.yaml
56- echo "::endgroup::"
57-
58- - name : Package Helm chart
59- run : |
60- echo "::group::Package Chart"
61- mkdir -p ./dist
62- helm package ${{ env.CHART_PATH }} --destination ./dist
63- echo "::endgroup::"
64-
65- echo "::group::Packaged Chart"
66- ls -lh ./dist/
67- echo "::endgroup::"
38+ - name : Lint chart
39+ run : helm lint ${{ env.CHART_PATH }}
6840
69- - name : Push chart to GHCR
41+ - name : Package chart
42+ id : package
7043 run : |
71- echo "::group::Push to GHCR"
72- CHART_PACKAGE="./dist/${{ env.CHART_NAME }}-v0.0.0-latest. tgz"
44+ helm package ${{ env.CHART_PATH }} --version v0.0.0-latest --destination .
45+ echo "name=$(ls *. tgz)" >> $GITHUB_OUTPUT
7346
74- # Push to GHCR using OCI format with v0.0.0-latest tag
75- helm push "${CHART_PACKAGE}" oci://${{ env.REGISTRY }}/${{ env.REPOSITORY_OWNER_LOWER }}/charts
47+ - name : Upload packaged chart
48+ if : github.event_name != 'pull_request'
49+ uses : actions/upload-artifact@v4
50+ with :
51+ name : helm-chart
52+ path : " *.tgz"
53+ retention-days : 1
7654
77- echo "::endgroup::"
55+ publish-chart :
56+ name : Publish to GHCR
57+ runs-on : ubuntu-latest
58+ if : github.event_name != 'pull_request'
59+ needs : validate-and-package
60+ permissions :
61+ packages : write
62+ steps :
63+ - uses : actions/download-artifact@v4
64+ with :
65+ name : helm-chart
7866
79- echo "✓ Chart published successfully!"
80- echo "Chart: ${{ env.REGISTRY }}/${{ env.REPOSITORY_OWNER_LOWER }}/charts/${{ env.CHART_NAME }}:v0.0.0-latest"
67+ - uses : azure/setup-helm@v4
68+ with :
69+ version : ${{ env.HELM_VERSION }}
8170
82- - name : Restore original Chart.yaml
83- if : always()
71+ - name : Publish chart
72+ env :
73+ CHART : ${{ needs.validate-and-package.outputs.chart-name }}
74+ REPO : ${{ env.REGISTRY }}/$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')/charts
8475 run : |
85- # Restore original Chart.yaml
86- if [ -f "${{ env.CHART_PATH }}/Chart.yaml.bak" ]; then
87- mv ${{ env.CHART_PATH }}/Chart.yaml.bak ${{ env.CHART_PATH }}/Chart.yaml
88- echo "Chart.yaml restored"
89- fi
76+ echo "${{ secrets.GITHUB_TOKEN }}" | helm registry login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin
77+ helm push "$CHART" "oci://$REPO"
78+ helm registry logout ${{ env.REGISTRY }}
9079
9180 - name : Create release summary
9281 run : |
@@ -118,9 +107,3 @@ jobs:
118107 --namespace vllm-semantic-router-system
119108 \`\`\`
120109 EOF
121-
122- - name : Logout from registry
123- if : always()
124- run : |
125- helm registry logout ${{ env.REGISTRY }} || true
126-
0 commit comments