|
5 | 5 | branches: |
6 | 6 | - main |
7 | 7 | paths: |
8 | | - - 'deploy/helm/**' |
| 8 | + - "deploy/helm/**" |
9 | 9 | push: |
10 | 10 | branches: |
11 | 11 | - main |
12 | 12 | paths: |
13 | | - - 'deploy/helm/**' |
| 13 | + - "deploy/helm/**" |
14 | 14 | workflow_dispatch: |
15 | 15 |
|
16 | 16 | env: |
|
20 | 20 | CHART_NAME: semantic-router |
21 | 21 |
|
22 | 22 | jobs: |
23 | | - publish-chart: |
24 | | - name: Publish Helm Chart to GHCR |
| 23 | + validate-and-package: |
| 24 | + name: Validate and Package |
25 | 25 | runs-on: ubuntu-latest |
26 | 26 | permissions: |
27 | 27 | contents: read |
28 | | - packages: write |
| 28 | + outputs: |
| 29 | + chart-name: ${{ steps.package.outputs.name }} |
29 | 30 | steps: |
30 | | - - name: Checkout code |
31 | | - uses: actions/checkout@v4 |
32 | | - |
33 | | - - name: Set up Helm |
34 | | - uses: azure/setup-helm@v4 |
| 31 | + - uses: actions/checkout@v4 |
| 32 | + - uses: azure/setup-helm@v4 |
35 | 33 | with: |
36 | 34 | version: ${{ env.HELM_VERSION }} |
37 | 35 |
|
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::" |
| 36 | + - name: Lint chart |
| 37 | + run: helm lint ${{ env.CHART_PATH }} |
68 | 38 |
|
69 | | - - name: Push chart to GHCR |
| 39 | + - name: Package chart |
| 40 | + id: package |
70 | 41 | run: | |
71 | | - echo "::group::Push to GHCR" |
72 | | - CHART_PACKAGE="./dist/${{ env.CHART_NAME }}-v0.0.0-latest.tgz" |
| 42 | + helm package ${{ env.CHART_PATH }} --version v0.0.0-latest --destination . |
| 43 | + echo "name=$(ls *.tgz)" >> $GITHUB_OUTPUT |
73 | 44 |
|
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 |
| 45 | + - name: Upload packaged chart |
| 46 | + if: github.event_name != 'pull_request' |
| 47 | + uses: actions/upload-artifact@v4 |
| 48 | + with: |
| 49 | + name: helm-chart |
| 50 | + path: "*.tgz" |
| 51 | + retention-days: 1 |
76 | 52 |
|
77 | | - echo "::endgroup::" |
| 53 | + publish-chart: |
| 54 | + name: Publish to GHCR |
| 55 | + runs-on: ubuntu-latest |
| 56 | + if: github.event_name != 'pull_request' |
| 57 | + needs: validate-and-package |
| 58 | + permissions: |
| 59 | + packages: write |
| 60 | + steps: |
| 61 | + - uses: actions/download-artifact@v4 |
| 62 | + with: |
| 63 | + name: helm-chart |
78 | 64 |
|
79 | | - echo "✓ Chart published successfully!" |
80 | | - echo "Chart: ${{ env.REGISTRY }}/${{ env.REPOSITORY_OWNER_LOWER }}/charts/${{ env.CHART_NAME }}:v0.0.0-latest" |
| 65 | + - uses: azure/setup-helm@v4 |
| 66 | + with: |
| 67 | + version: ${{ env.HELM_VERSION }} |
81 | 68 |
|
82 | | - - name: Restore original Chart.yaml |
83 | | - if: always() |
| 69 | + - name: Publish chart |
| 70 | + env: |
| 71 | + CHART: ${{ needs.validate-and-package.outputs.chart-name }} |
| 72 | + REPO: ${{ env.REGISTRY }}/$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')/charts |
84 | 73 | 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 |
| 74 | + echo "${{ secrets.GITHUB_TOKEN }}" | helm registry login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin |
| 75 | + helm push "$CHART" "oci://$REPO" |
| 76 | + helm registry logout ${{ env.REGISTRY }} |
90 | 77 |
|
91 | 78 | - name: Create release summary |
92 | 79 | run: | |
@@ -118,9 +105,3 @@ jobs: |
118 | 105 | --namespace vllm-semantic-router-system |
119 | 106 | \`\`\` |
120 | 107 | EOF |
121 | | -
|
122 | | - - name: Logout from registry |
123 | | - if: always() |
124 | | - run: | |
125 | | - helm registry logout ${{ env.REGISTRY }} || true |
126 | | -
|
0 commit comments