@@ -2,42 +2,11 @@ name: Publish Docker Images
22
33on :
44 push :
5- branches : [main]
5+ tags :
6+ - " v*"
67 workflow_dispatch :
78
89jobs :
9- extract-version :
10- name : Extract Version
11- if : github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
12- runs-on : ubuntu-latest
13- outputs :
14- version : ${{ steps.version.outputs.version }}
15- chart_name : ${{ steps.chartName.outputs.chart_name }}
16-
17- steps :
18- - name : Checkout
19- uses : actions/checkout@v4
20-
21- - name : Extract version from .cz.yaml
22- id : version
23- run : |
24- VERSION=$(yq '.commitizen.version' .cz.yaml)
25- if [[ -z "$VERSION" ]]; then
26- echo "Error: Could not extract version from .cz.yaml"
27- exit 1
28- fi
29- echo "version=$VERSION" >> "$GITHUB_OUTPUT"
30-
31- - name : Helm Chart Name
32- id : chartName
33- run : |
34- CHART_NAME=$(yq '.name' helm/Chart.yaml)
35- if [[ -z "$CHART_NAME" ]]; then
36- echo "Error: Could not extract chart name from helm/Chart.yaml"
37- exit 1
38- fi
39- echo "chart_name=$CHART_NAME" >> $GITHUB_OUTPUT
40-
4110 build-images :
4211 name : Build Docker Images
4312 runs-on : ${{ matrix.platform == 'linux/arm64' && 'Linux-ARM64' || 'ubuntu-latest' }}
11382 create-manifests :
11483 name : Create Multi-Arch Manifests
11584 runs-on : ubuntu-latest
116- needs : [extract-version, build-images]
85+ needs : build-images
11786 strategy :
11887 matrix :
11988 variant :
12695 contents : read
12796 packages : write
12897
129- env :
130- VERSION : ${{ needs.extract-version.outputs.version }}
131-
13298 steps :
13399 - name : Download digests
134100 uses : actions/download-artifact@v4
@@ -153,30 +119,32 @@ jobs:
153119 username : ${{ secrets.DOCKERHUB_USERNAME }}
154120 password : ${{ secrets.DOCKERHUB_TOKEN }}
155121
156- - name : Set short SHA
157- run : echo "SHORT_SHA=${GITHUB_SHA::7}" >> $GITHUB_ENV
122+ - name : Extract metadata for Docker
123+ id : docker-metadata
124+ uses : docker/metadata-action@v4
125+ with :
126+ images : |
127+ ghcr.io/traceloop/hub${{ matrix.variant.suffix }}
128+ traceloop/hub${{ matrix.variant.suffix }}
129+ tags : |
130+ type=sha
131+ type=semver,pattern={{version}}
132+ type=semver,pattern={{major}}.{{minor}}
158133
159134 - name : Create and push multi-arch manifests (${{ matrix.variant.name }})
160135 working-directory : /tmp/digests
161136 run : |
162- GHCR_IMAGE="ghcr.io/traceloop/hub${{ matrix.variant.suffix }}"
163- DOCKERHUB_IMAGE="traceloop/hub ${{ matrix.variant.suffix }}"
137+ # Get tags from metadata
138+ TAGS=" ${{ steps.docker-metadata.outputs.tags }}"
164139
140+ # Create manifest list using digests
165141 docker buildx imagetools create \
166- --tag "${GHCR_IMAGE}:${{ env.VERSION }}" \
167- --tag "${GHCR_IMAGE}:sha-${{ env.SHORT_SHA }}" \
168- --tag "${GHCR_IMAGE}:latest" \
169- --tag "${DOCKERHUB_IMAGE}:${{ env.VERSION }}" \
170- --tag "${DOCKERHUB_IMAGE}:sha-${{ env.SHORT_SHA }}" \
171- --tag "${DOCKERHUB_IMAGE}:latest" \
172- $(printf "${GHCR_IMAGE}@sha256:%s " *)
142+ $(printf '%s\n' "$TAGS" | sed 's/^/--tag /' | tr '\n' ' ') \
143+ $(printf 'ghcr.io/traceloop/hub${{ matrix.variant.suffix }}@sha256:%s ' *)
173144 deploy :
174145 name : Deploy to Traceloop
175146 runs-on : ubuntu-latest
176- needs : [extract-version, create-manifests]
177- env :
178- VERSION : ${{ needs.extract-version.outputs.version }}
179- CHART_NAME : ${{ needs.extract-version.outputs.chart_name }}
147+ needs : create-manifests
180148 steps :
181149 - name : Install Octopus CLI
182150 uses : OctopusDeploy/install-octopus-cli-action@v3
@@ -188,41 +156,47 @@ jobs:
188156 OCTOPUS_API_KEY : ${{ secrets.OCTOPUS_API_KEY }}
189157 OCTOPUS_URL : ${{ secrets.OCTOPUS_URL }}
190158 OCTOPUS_SPACE : ${{ secrets.OCTOPUS_SPACE }}
191- run : |
192- octopus release create --project hub \
193- --version="${{ env.VERSION }}" \
194- --packageVersion="${{ env.VERSION }}" \
195- --package="${{ env.CHART_NAME }}:${{ env.VERSION }}" \
196- --no-prompt
159+ run : octopus release create --project hub --version=sha-${GITHUB_SHA::7} --packageVersion=sha-${GITHUB_SHA::7} --no-prompt
197160
198161 - name : Deploy Octopus release (Staging)
199162 env :
200163 OCTOPUS_API_KEY : ${{ secrets.OCTOPUS_API_KEY }}
201164 OCTOPUS_URL : ${{ secrets.OCTOPUS_URL }}
202165 OCTOPUS_SPACE : ${{ secrets.OCTOPUS_SPACE }}
203- run : octopus release deploy --project hub --version="${{ env.VERSION }}" --environment Staging --no-prompt
204-
166+ run : octopus release deploy --project hub --version=sha-${GITHUB_SHA::7} --environment Staging --no-prompt
167+
205168 - name : Deploy Octopus release (staging-new)
206169 env :
207170 OCTOPUS_API_KEY : ${{ secrets.OCTOPUS_API_KEY }}
208171 OCTOPUS_URL : ${{ secrets.OCTOPUS_URL }}
209172 OCTOPUS_SPACE : ${{ secrets.OCTOPUS_SPACE }}
210- run : octopus release deploy --project hub --version="${{ env.VERSION }}" --environment staging-new --no-prompt
173+ run : octopus release deploy --project hub --version=sha-${GITHUB_SHA::7} --environment staging-new --no-prompt
211174
212175 push-helm-chart :
213176 name : Push Helm Chart to Dockerhub
214177 runs-on : ubuntu-latest
215- needs : [extract-version, create-manifests]
178+ needs : create-manifests
216179 permissions :
217180 contents : write
218- env :
219- VERSION : ${{ needs.extract-version.outputs.version }}
220- CHART_NAME : ${{ needs.extract-version.outputs.chart_name }}
221181
222182 steps :
223183 - name : Checkout
224184 uses : actions/checkout@v4
225185
186+ - name : Get Chart Version
187+ id : chartVersion
188+ run : |
189+ CHART_VERSION=$(grep '^version:' helm/Chart.yaml | awk '{print $2}')
190+ echo "CHART_VERSION=$CHART_VERSION"
191+ echo "chart_version=$CHART_VERSION" >> $GITHUB_OUTPUT
192+
193+ - name : Get Chart Name
194+ id : chartName
195+ run : |
196+ CHART_NAME=$(grep '^name:' helm/Chart.yaml | awk '{print $2}')
197+ echo "CHART_NAME=$CHART_NAME"
198+ echo "chart_name=$CHART_NAME" >> $GITHUB_OUTPUT
199+
226200 - name : Login to Docker Hub as OCI registry
227201 run : |
228202 echo "${{ secrets.DOCKERHUB_TOKEN }}" | helm registry login registry-1.docker.io \
@@ -235,4 +209,4 @@ jobs:
235209
236210 - name : Push Helm Chart
237211 run : |
238- helm push "${{ env.CHART_NAME }}-${{ env.VERSION }}.tgz" oci://registry-1.docker.io/traceloop
212+ helm push "${{ steps.chartName.outputs.chart_name }}-${{ steps.chartVersion.outputs.chart_version }}.tgz" oci://registry-1.docker.io/traceloop
0 commit comments