11name : Build and Publish Docker Image
22
33on :
4- release :
5- types : [created]
4+ workflow_call :
5+ inputs :
6+ version :
7+ required : true
8+ type : string
69
710env :
811 REGISTRY : ghcr.io
1316 name : Build and Push Docker Image
1417 runs-on : ubuntu-latest
1518 permissions :
16- contents : read
19+ contents : write
1720 packages : write
1821 steps :
1922 - name : Checkout repository
@@ -29,24 +32,44 @@ jobs:
2932 username : ${{ github.actor }}
3033 password : ${{ secrets.GITHUB_TOKEN }}
3134
32- - name : Extract metadata
33- id : meta
34- uses : docker/metadata-action@v5
35- with :
36- images : ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
37- tags : |
38- type=semver,pattern={{version}}
39- type=semver,pattern={{major}}.{{minor}}
40- type=semver,pattern={{major}}
41- type=raw,value=latest
42-
4335 - name : Build and push Docker image
36+ id : docker_build
4437 uses : docker/build-push-action@v5
4538 with :
4639 context : .
4740 push : true
48- tags : ${{ steps.meta.outputs.tags }}
49- labels : ${{ steps.meta.outputs.labels }}
41+ tags : |
42+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ inputs.version }}
43+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
44+ labels : |
45+ org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
46+ org.opencontainers.image.revision=${{ github.sha }}
5047 cache-from : type=gha
5148 cache-to : type=gha,mode=max
5249 platforms : linux/amd64,linux/arm64
50+
51+ - name : Add Docker image info to release
52+ uses : actions/github-script@v7
53+ with :
54+ script : |
55+ const tag = 'v${{ inputs.version }}';
56+ const { data: release } = await github.rest.repos.getReleaseByTag({
57+ owner: context.repo.owner,
58+ repo: context.repo.repo,
59+ tag: tag
60+ });
61+
62+ const imageUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/pkgs/container/${context.repo.repo}`;
63+ const body = `## Docker Image\n\n` +
64+ `**Published:** ✅\n` +
65+ `**Image:** \`ghcr.io/${context.repo.owner}/${context.repo.repo}:${{ inputs.version }}\`\n` +
66+ `**Latest:** \`ghcr.io/${context.repo.owner}/${context.repo.repo}:latest\`\n\n` +
67+ `Pull: \`docker pull ghcr.io/${context.repo.owner}/${context.repo.repo}:${{ inputs.version }}\`\n\n` +
68+ `[View on GitHub Container Registry](${imageUrl})`;
69+
70+ await github.rest.repos.createReleaseComment({
71+ owner: context.repo.owner,
72+ repo: context.repo.repo,
73+ release_id: release.id,
74+ body: body
75+ });
0 commit comments