From 272bb22f46c313338e5e770811d086e48ecdf789 Mon Sep 17 00:00:00 2001 From: Patryk Ciechanski Date: Thu, 12 Jun 2025 09:48:13 +0200 Subject: [PATCH] feat: Add Docker build combinations for non-versioning prefixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add support for prefix+docker combinations (docs+docker:, chore+docker:, etc.) - Enable Docker build for non-versioning changes when requested - Add repository_dispatch trigger for Docker workflow - Update Docker tagging for PR-based builds (pr-X, main-sha) - Update PR template with new prefix options This allows contributors to force Docker builds for documentation, maintenance, and other non-versioning changes when needed. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .github/pull_request_template.md | 21 +++++++--- .github/workflows/auto-version.yml | 38 +++++++++++++++++++ .../workflows/build_and_publish_docker.yml | 4 ++ 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index db4aaac..8a6b403 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,16 +2,27 @@ **Please ensure your PR title follows one of these formats:** +### Version Bumping Prefixes (trigger Docker build + version bump): - `feat: ` - New features (triggers MINOR version bump) - `fix: ` - Bug fixes (triggers PATCH version bump) - `breaking: ` or `BREAKING CHANGE: ` - Breaking changes (triggers MAJOR version bump) - `perf: ` - Performance improvements (triggers PATCH version bump) - `refactor: ` - Code refactoring (triggers PATCH version bump) -- `docs: ` - Documentation only (no version bump) -- `chore: ` - Maintenance tasks (no version bump) -- `test: ` - Test additions/changes (no version bump) -- `ci: ` - CI/CD changes (no version bump) -- `style: ` - Code style changes (no version bump) + +### Non-Version Prefixes (no version bump): +- `docs: ` - Documentation only +- `chore: ` - Maintenance tasks +- `test: ` - Test additions/changes +- `ci: ` - CI/CD changes +- `style: ` - Code style changes + +### Docker Build Options: +- `docker: ` - Force Docker build without version bump +- `docs+docker: ` - Documentation + Docker build +- `chore+docker: ` - Maintenance + Docker build +- `test+docker: ` - Tests + Docker build +- `ci+docker: ` - CI changes + Docker build +- `style+docker: ` - Style changes + Docker build ## Description diff --git a/.github/workflows/auto-version.yml b/.github/workflows/auto-version.yml index 15c6462..7b393b4 100644 --- a/.github/workflows/auto-version.yml +++ b/.github/workflows/auto-version.yml @@ -45,22 +45,37 @@ jobs: echo "Detected BREAKING CHANGE - major version bump" echo "bump_type=major" >> $GITHUB_OUTPUT echo "should_bump=true" >> $GITHUB_OUTPUT + echo "should_build_docker=true" >> $GITHUB_OUTPUT elif [[ "$PR_TITLE_LOWER" =~ ^feat: ]]; then echo "Detected new feature - minor version bump" echo "bump_type=minor" >> $GITHUB_OUTPUT echo "should_bump=true" >> $GITHUB_OUTPUT + echo "should_build_docker=true" >> $GITHUB_OUTPUT elif [[ "$PR_TITLE_LOWER" =~ ^(fix|perf|refactor): ]]; then echo "Detected fix/perf/refactor - patch version bump" echo "bump_type=patch" >> $GITHUB_OUTPUT echo "should_bump=true" >> $GITHUB_OUTPUT + echo "should_build_docker=true" >> $GITHUB_OUTPUT + elif [[ "$PR_TITLE_LOWER" =~ ^docker: ]]; then + echo "Detected docker build request - no version bump but build Docker" + echo "bump_type=none" >> $GITHUB_OUTPUT + echo "should_bump=false" >> $GITHUB_OUTPUT + echo "should_build_docker=true" >> $GITHUB_OUTPUT + elif [[ "$PR_TITLE_LOWER" =~ ^(docs|chore|test|ci|style)\+docker: ]]; then + echo "Detected non-versioned change with Docker build request" + echo "bump_type=none" >> $GITHUB_OUTPUT + echo "should_bump=false" >> $GITHUB_OUTPUT + echo "should_build_docker=true" >> $GITHUB_OUTPUT elif [[ "$PR_TITLE_LOWER" =~ ^(docs|chore|test|ci|style): ]]; then echo "Detected non-versioned change - no version bump" echo "bump_type=none" >> $GITHUB_OUTPUT echo "should_bump=false" >> $GITHUB_OUTPUT + echo "should_build_docker=false" >> $GITHUB_OUTPUT else echo "No recognized prefix - no version bump" echo "bump_type=none" >> $GITHUB_OUTPUT echo "should_bump=false" >> $GITHUB_OUTPUT + echo "should_build_docker=false" >> $GITHUB_OUTPUT fi - name: Get current version @@ -149,6 +164,21 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Trigger Docker build + if: steps.bump_type.outputs.should_build_docker == 'true' + run: | + echo "🐳 Triggering Docker build and publish workflow" + # The Docker workflow will be triggered by the tag creation (if version bumped) + # or by repository_dispatch (if docker: prefix without version bump) + if [ "${{ steps.bump_type.outputs.should_bump }}" == "false" ]; then + # For docker: prefix without version bump, trigger via repository_dispatch + curl -X POST \ + -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + -H "Accept: application/vnd.github.v3+json" \ + "https://api.github.com/repos/${{ github.repository }}/dispatches" \ + -d '{"event_type":"docker-build","client_payload":{"pr_number":"${{ github.event.pull_request.number }}","pr_title":"${{ github.event.pull_request.title }}","commit_sha":"${{ github.sha }}"}}' + fi + - name: Summary run: | if [ "${{ steps.bump_type.outputs.should_bump }}" == "true" ]; then @@ -159,6 +189,14 @@ jobs: echo "- **Bump type**: ${{ steps.bump_type.outputs.bump_type }}" >> $GITHUB_STEP_SUMMARY echo "- **Tag**: v${{ steps.new_version.outputs.version }}" >> $GITHUB_STEP_SUMMARY echo "- **PR**: #${{ github.event.pull_request.number }}" >> $GITHUB_STEP_SUMMARY + echo "- **Docker**: Will build and publish with new tag" >> $GITHUB_STEP_SUMMARY + elif [ "${{ steps.bump_type.outputs.should_build_docker }}" == "true" ]; then + echo "### 🐳 Docker Build Requested" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "No version bump but Docker image will be built and published." >> $GITHUB_STEP_SUMMARY + echo "- **PR**: #${{ github.event.pull_request.number }}" >> $GITHUB_STEP_SUMMARY + echo "- **Title**: ${{ github.event.pull_request.title }}" >> $GITHUB_STEP_SUMMARY + echo "- **Docker tag**: Based on commit SHA" >> $GITHUB_STEP_SUMMARY else echo "### ℹ️ No Version Bump Required" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/build_and_publish_docker.yml b/.github/workflows/build_and_publish_docker.yml index e8ad5d1..804a141 100644 --- a/.github/workflows/build_and_publish_docker.yml +++ b/.github/workflows/build_and_publish_docker.yml @@ -3,6 +3,8 @@ name: Build and Publish Docker Image to GHCR on: push: tags: [ 'v*' ] + repository_dispatch: + types: [docker-build] env: REGISTRY: ghcr.io @@ -38,6 +40,8 @@ jobs: tags: | type=ref,event=tag type=raw,value=latest,enable={{is_default_branch}} + type=sha,prefix=main-,enable=${{ github.event_name == 'repository_dispatch' }} + type=raw,value=pr-${{ github.event.client_payload.pr_number }},enable=${{ github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != '' }} - name: Build and push Docker image uses: docker/build-push-action@v5