name: Build Docker Image - Latest on: workflow_dispatch: env: REGISTRY: docker.lechner-systems.at IMAGE_NAME: lechnersystems/ttm jobs: docker: runs-on: ubuntu-latest permissions: contents: write steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Use Node.js v24.14.0 uses: actions/setup-node@v4 with: node-version: '24.14.0' - name: Set build version run: npm run version:set - name: Read version from package.json id: version run: | version=$(node -p 'require("./package.json").version') docker_tag=${version//+/-} echo "value=$version" >> "$GITHUB_OUTPUT" echo "docker_tag=$docker_tag" >> "$GITHUB_OUTPUT" - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.DOCKER_REGISTRY_USERNAME }} password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }} - name: Build and push latest image uses: docker/build-push-action@v6 with: context: . push: true provenance: false build-args: | APP_VERSION=${{ steps.version.outputs.value }} tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.docker_tag }} labels: | org.opencontainers.image.version=${{ steps.version.outputs.value }} org.opencontainers.image.revision=${{ github.sha }} org.opencontainers.image.source=https://github.com/${{ github.repository }} - name: Create GitHub release env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} RELEASE_TAG: v${{ steps.version.outputs.docker_tag }} run: | previous_tag="$(gh api repos/${{ github.repository }}/releases --paginate --jq '.[] | select(.draft == false) | .tag_name' | grep -Fxv "$RELEASE_TAG" | head -n 1 || true)" if [ -n "$previous_tag" ]; then commit_messages="$(git log --reverse --format='- %s' "${previous_tag}..${GITHUB_SHA}")" full_changelog="https://github.com/${{ github.repository }}/compare/${previous_tag}...${RELEASE_TAG}" else commit_messages="$(git log --reverse --format='- %s' "${GITHUB_SHA}")" full_changelog="" fi if [ -z "$commit_messages" ]; then commit_messages='- No commits since the previous release' fi { echo '## Changes' echo printf '%s\n' "$commit_messages" echo if [ -n "$full_changelog" ]; then echo "**Full Changelog**: ${full_changelog}" fi } > release-notes.md if gh release view "$RELEASE_TAG" >/dev/null 2>&1; then gh release edit "$RELEASE_TAG" --title "$RELEASE_TAG" --notes-file release-notes.md else gh release create "$RELEASE_TAG" --target "${GITHUB_SHA}" --title "$RELEASE_TAG" --notes-file release-notes.md fi