diff --git a/.github/workflows/build-publish.yaml b/.github/workflows/build-publish.yaml index 24f7bb1..12f8f03 100644 --- a/.github/workflows/build-publish.yaml +++ b/.github/workflows/build-publish.yaml @@ -3,11 +3,38 @@ name: Build and Publish Docker Image on: push: branches: - - main # Trigger on pushes to main + - '**' + pull_request: + types: [opened, synchronize, reopened] + create: + refs/tags/v* jobs: - build-and-push: - runs-on: ubuntu-latest # Ensure your Gitea runner has this label + build-only: + runs-on: ubuntu-latest + # All branches, all PRs, and anything that's not a push to main or a version tag + if: github.event_name != 'push' || (github.event_name == 'push' && !startsWith(gitea.ref, 'refs/tags/v') && gitea.ref != 'refs/heads/main') + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build (no push) + uses: docker/build-push-action@v5 + with: + context: . + file: Dockerfile + push: false + tags: | + ${{ secrets.DOCKER_REGISTRY }}/${{ secrets.DOCKER_USERNAME }}/email-classifier:build-test + cache-from: type=gha + cache-to: type=gha,mode=max + + build-and-push-main: + runs-on: ubuntu-latest + if: github.event_name == 'push' && gitea.ref == 'refs/heads/main' steps: - name: Checkout code uses: actions/checkout@v4 @@ -15,27 +42,58 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - # Login to your registry (Docker Hub, Gitea Package Registry, or Harbor) - name: Login to Docker Registry uses: docker/login-action@v3 with: - registry: ${{ secrets.DOCKER_REGISTRY }} # Remove if using Docker Hub + registry: ${{ secrets.DOCKER_REGISTRY }} username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - - name: Build and push + - name: Build and push (main branch) uses: docker/build-push-action@v5 with: context: . file: Dockerfile push: true - # Tags the image as 'latest' and also uses the git SHA for versioning tags: | - ${{ secrets.DOCKER_REGISTRY }}/${{ secrets.DOCKER_USERNAME }}/email-classifier:${{ gitea.sha }} + ${{ secrets.DOCKER_REGISTRY }}/${{ secrets.DOCKER_USERNAME }}/email-classifier:main ${{ secrets.DOCKER_REGISTRY }}/${{ secrets.DOCKER_USERNAME }}/email-classifier:latest - # Caching speeds up builds by reusing layers (crucial for 'uv' installs) + ${{ secrets.DOCKER_REGISTRY }}/${{ secrets.DOCKER_USERNAME }}/email-classifier:${{ gitea.sha }} labels: | org.opencontainers.image.source=${{ gitea.server_url }}/${{ gitea.repository }} org.opencontainers.image.description=Email Classifier Service cache-from: type=gha - cache-to: type=gha,mode=max \ No newline at end of file + cache-to: type=gha,mode=max + + build-and-push-tag: + runs-on: ubuntu-latest + if: github.event_name == 'push' && startsWith(gitea.ref, 'refs/tags/v') + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Registry + uses: docker/login-action@v3 + with: + registry: ${{ secrets.DOCKER_REGISTRY }} + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and push (tagged release) + uses: docker/build-push-action@v5 + with: + context: . + file: Dockerfile + push: true + tags: | + ${{ secrets.DOCKER_REGISTRY }}/${{ secrets.DOCKER_USERNAME }}/email-classifier:${{ gitea.ref_name }} + ${{ secrets.DOCKER_REGISTRY }}/${{ secrets.DOCKER_USERNAME }}/email-classifier:latest + ${{ secrets.DOCKER_REGISTRY }}/${{ secrets.DOCKER_USERNAME }}/email-classifier:${{ gitea.sha }} + labels: | + org.opencontainers.image.source=${{ gitea.server_url }}/${{ gitea.repository }} + org.opencontainers.image.description=Email Classifier Service + cache-from: type=gha + cache-to: type=gha,mode=max