55 workflow_dispatch :
66 inputs :
77 release_version :
8- description : " Release Version"
8+ description : " Release Version (example: '2025.2.1') "
99 required : true
1010 release_type :
1111 description : " Release Options"
@@ -247,38 +247,16 @@ jobs:
247247 echo "_RELEASE_TAG=${{ matrix.release_tag }}" >> $GITHUB_ENV
248248 fi
249249
250- # ######### DockerHub ##########
251- - name : Setup DCT
252- id : setup-dct
253- uses : bitwarden/gh-actions/setup-docker-trust@main
254- with :
255- azure-creds : ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
256- azure-keyvault-name : " bitwarden-ci"
257-
258- - name : Pull versioned image
259- run : docker pull $_AZ_REGISTRY/$_PROJECT_NAME:$_RELEASE_TAG
260-
261- - name : Tag release version and latest image
262- run : |
263- docker tag $_AZ_REGISTRY/$_PROJECT_NAME:$_RELEASE_TAG bitwarden/$_PROJECT_NAME:$_RELEASE_TAG
264- docker tag $_AZ_REGISTRY/$_PROJECT_NAME:$_RELEASE_TAG bitwarden/$_PROJECT_NAME:latest
265-
266- - name : Push release version and latest image to DockerHub
267- if : ${{ inputs.release_type != 'Dry Run' }}
268- env :
269- DOCKER_CONTENT_TRUST : 1
270- DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE : ${{ steps.setup-dct.outputs.dct-delegate-repo-passphrase }}
271- run : |
272- docker push bitwarden/$_PROJECT_NAME:$_RELEASE_TAG
273- docker push bitwarden/$_PROJECT_NAME:latest
274-
275250 # ## ghcr.io section
276251 - name : Login to GitHub Container Registry
277252 uses : docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
278253 with :
279254 registry : ghcr.io
280255 username : ${{ github.actor }}
281256 password : ${{ secrets.GITHUB_TOKEN }}
257+
258+ - name : Pull versioned image
259+ run : docker pull $_AZ_REGISTRY/$_PROJECT_NAME:$_RELEASE_TAG
282260
283261 - name : Tag release version and latest image
284262 run : |
@@ -310,7 +288,6 @@ jobs:
310288
311289 - name : Log out of Docker
312290 run : |
313- docker logout
314291 docker logout ghcr.io
315292 docker logout $_AZ_REGISTRY
316293
@@ -327,38 +304,48 @@ jobs:
327304 id-token : write
328305 packages : write
329306 steps :
330- # ######### DockerHub ##########
331- - name : Setup DCT
332- id : setup-dct
333- uses : bitwarden/gh-actions/setup-docker-trust@main
334- with :
335- azure-creds : ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }}
336- azure-keyvault-name : " bitwarden-ci"
337-
338- - name : Install Cosign
339- uses : sigstore/cosign-installer@d7d6bc7722e3daa8354c50bcb52f4837da5e9b6a # v3.8.1
340-
341307 - name : Login to Azure - PROD Subscription
342308 uses : Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0
343309 with :
344310 creds : ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
345311
312+ - name : Login to GitHub Container Registry
313+ uses : docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
314+ with :
315+ registry : ghcr.io
316+ username : ${{ github.actor }}
317+ password : ${{ secrets.GITHUB_TOKEN }}
318+
346319 - name : Push version and latest image
347320 if : ${{ inputs.release_type != 'Dry Run' }}
348- env :
349- DOCKER_CONTENT_TRUST : 1
350- DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE : ${{ steps.setup-dct.outputs.dct-delegate-repo-passphrase }}
351321 run : |
352322 skopeo --version
353323 skopeo login $_AZ_REGISTRY -u 00000000-0000-0000-0000-000000000000 -p $(az acr login --expose-token --name ${_AZ_REGISTRY%.azurecr.io} | jq -r .accessToken)
354- skopeo copy --all docker://$_AZ_REGISTRY/self-host:beta docker://docker.io/bitwarden/self-host:$_RELEASE_VERSION
355- skopeo copy --all docker://$_AZ_REGISTRY/self-host:beta docker://docker.io/bitwarden/self-host:beta # TODO: Delete after GA
356- # skopeo copy --all docker://$_AZ_REGISTRY/self-host:beta docker://docker.io/bitwarden/self-host:latest # TODO: uncomment after GA
324+ skopeo copy --all docker://$_AZ_REGISTRY/self-host:beta docker://ghcr.io/bitwarden/self-host:$_RELEASE_VERSION
325+ skopeo copy --all docker://$_AZ_REGISTRY/self-host:beta docker://ghcr.io/bitwarden/self-host:beta # TODO: Delete after GA
326+ # skopeo copy --all docker://$_AZ_REGISTRY/self-host:beta docker://ghcr.io/bitwarden/self-host:latest # TODO: uncomment after GA
327+
328+ - name : Sign image with Cosign
329+ run : |
330+ cosign sign --yes ghcr.io/bitwarden/self-host:$_RELEASE_TAG
331+ cosign sign --yes ghcr.io/bitwarden/self-host:latest
332+
333+ - name : Verify the signed image with Cosign
334+ run : |
335+ cosign verify \
336+ --certificate-identity "${{ github.server_url }}/${{ github.workflow_ref }}" \
337+ --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
338+ ghcr.io/bitwarden/self-host:$_RELEASE_TAG
339+
340+ cosign verify \
341+ --certificate-identity "${{ github.server_url }}/${{ github.workflow_ref }}" \
342+ --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
343+ ghcr.io/bitwarden/self-host:latest
357344
358- - name : Log out of Docker, skopeo and disable Docker Notary
345+ - name : Log out of skopeo and ghcr.io
359346 run : |
360- docker logout
361347 skopeo logout --all
348+ docker logout ghcr.io
362349
363350 # ######### ACR PROD ##########
364351 - name : Login to Azure ACR
@@ -390,45 +377,6 @@ jobs:
390377 - name : Log out of Docker
391378 run : docker logout $_AZ_REGISTRY
392379
393- # ######### ghcr.io ##########
394- - name : Login to GitHub Container Registry
395- uses : docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
396- with :
397- registry : ghcr.io
398- username : ${{ github.actor }}
399- password : ${{ secrets.GITHUB_TOKEN }}
400-
401- - name : Tag release version and latest image
402- run : |
403- docker tag $_AZ_REGISTRY/self-host:$_RELEASE_VERSION ghcr.io/bitwarden/self-host:$_RELEASE_VERSION
404- docker tag $_AZ_REGISTRY/self-host:$_RELEASE_VERSION ghcr.io/bitwarden/self-host:latest
405-
406- - name : Push release version and latest image
407- if : ${{ inputs.release_type != 'Dry Run' }}
408- run : |
409- docker push ghcr.io/bitwarden/self-host:$_RELEASE_VERSION
410- docker push ghcr.io/bitwarden/self-host:latest
411-
412- - name : Sign image with Cosign
413- run : |
414- cosign sign --yes ghcr.io/bitwarden/self-host:$_RELEASE_VERSION
415- cosign sign --yes ghcr.io/bitwarden/self-host:latest
416-
417- - name : Verify the signed image with Cosign
418- run : |
419- cosign verify \
420- --certificate-identity "${{ github.server_url }}/${{ github.workflow_ref }}" \
421- --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
422- ghcr.io/bitwarden/self-host:$_RELEASE_VERSION
423-
424- cosign verify \
425- --certificate-identity "${{ github.server_url }}/${{ github.workflow_ref }}" \
426- --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
427- ghcr.io/bitwarden/self-host:latest
428-
429- - name : Log out of Docker
430- run : docker logout ghcr.io
431-
432380
433381 trigger-workflows :
434382 name : Trigger workflows
0 commit comments