1- name : Build and Push Docker Image
1+ name : Build and Publish Docker Image
22
33on :
44 release :
1515env :
1616 REGISTRY : ghcr.io
1717 IMAGE_NAME : ${{ github.repository }}
18+ IMAGE_NAME_LOWER : ${{ github.repository_owner }}/${{ github.event.repository.name }}
1819
1920jobs :
2021 build-and-push :
2122 name : Build and Push Docker Image
2223 runs-on : ubuntu-latest
23-
2424 permissions :
25- contents : read
25+ contents : write
2626 packages : write
2727
2828 steps :
@@ -32,46 +32,52 @@ jobs:
3232 - name : Set up Docker Buildx
3333 uses : docker/setup-buildx-action@v3
3434
35- - name : Log in to GitHub Container Registry
35+ - name : Log in to GHCR
3636 uses : docker/login-action@v3
3737 with :
3838 registry : ${{ env.REGISTRY }}
3939 username : ${{ github.actor }}
4040 password : ${{ secrets.GITHUB_TOKEN }}
4141
42- - name : Extract tag name
43- id : vars
42+ - name : Extract tag
43+ id : extract_tag
4444 run : |
45- TAG_NAME=${GITHUB_REF#refs/tags/}
46- IMAGE_NAME_LOWER=$(echo "${GITHUB_REPOSITORY}" | tr '[:upper:]' '[:lower:]')
47- echo "tag=${TAG_NAME}" >> $GITHUB_OUTPUT
48- echo "image_name=${IMAGE_NAME_LOWER}" >> $GITHUB_OUTPUT
49-
50- if [[ "$TAG_NAME" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
51- echo "latest=true" >> $GITHUB_OUTPUT
52- else
53- echo "latest=false" >> $GITHUB_OUTPUT
54- fi
45+ VERSION_TAG=${GITHUB_REF##*/}
46+ echo "version=$VERSION_TAG" >> "$GITHUB_OUTPUT"
47+ echo "image=ghcr.io/${{ env.IMAGE_NAME_LOWER }}" >> "$GITHUB_OUTPUT"
5548
56- - name : Build and push Docker image
49+ - name : Build and Push Docker image
5750 uses : docker/build-push-action@v5
5851 with :
5952 context : .
60- file : ./ src/docker/Dockerfile
53+ file : src/docker/Dockerfile
6154 push : true
6255 tags : |
63- ghcr.io/ ${{ steps.vars .outputs.image_name }}:${{ steps.vars .outputs.tag }}
64- ${{ steps.vars .outputs.latest == 'true' && format('ghcr.io/{0} :latest', steps.vars.outputs.image_name) || '' }}
56+ ${{ steps.extract_tag .outputs.image }}:${{ steps.extract_tag .outputs.version }}
57+ ${{ steps.extract_tag .outputs.image }} :latest
6558 labels : |
6659 org.opencontainers.image.source=${{ github.repositoryUrl }}
67- org.opencontainers.image.version=${{ steps.vars.outputs.tag }}
68- org.opencontainers.image.created=${{ github.event.head_commit.timestamp || github.event.release.published_at || github.event.repository.updated_at }}
60+ org.opencontainers.image.version=${{ steps.extract_tag.outputs.version }}
6961 org.opencontainers.image.revision=${{ github.sha }}
70- org.opencontainers.image.title=${{ github.repository }}
7162
72- - name : Confirm tags pushed
73- run : |
74- echo "Published ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.vars.outputs.tag }}"
75- if [ "${{ steps.vars.outputs.latest }}" = "true" ]; then
76- echo "Also tagged as :latest"
77- fi
63+ - name : Generate Release Notes
64+ uses : softprops/action-gh-release@v2
65+ with :
66+ tag_name : ${{ steps.extract_tag.outputs.version }}
67+ generate_release_notes : true
68+ env :
69+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
70+
71+ - name : Generate CHANGELOG.md
72+ uses : heinrichreimer/action-github-changelog-generator@v2.3
73+ with :
74+ token : ${{ secrets.GITHUB_TOKEN }}
75+ output : CHANGELOG.md
76+ tag : ${{ steps.extract_tag.outputs.version }}
77+
78+ - name : Commit updated CHANGELOG.md
79+ uses : stefanzweifel/git-auto-commit-action@v5
80+ with :
81+ commit_message : " chore: update CHANGELOG.md for ${{ steps.extract_tag.outputs.version }}"
82+ branch : main
83+ file_pattern : CHANGELOG.md
0 commit comments