From 5163b7084214d9960165b58246cd7e40e2e78810 Mon Sep 17 00:00:00 2001 From: Mangirdas Judeikis Date: Tue, 26 Nov 2024 13:30:41 +0200 Subject: [PATCH] image builds --- .github/workflows/images.yaml | 79 ++++++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 16 deletions(-) diff --git a/.github/workflows/images.yaml b/.github/workflows/images.yaml index 417a2d0c..b4f0f820 100644 --- a/.github/workflows/images.yaml +++ b/.github/workflows/images.yaml @@ -5,7 +5,7 @@ on: branches: - master # Trigger the workflow on push to the master branch tags: - - 'v*' # Trigger the workflow on tags like v1.0.0, v2.0.0, etc. + - 'v*' # Trigger the workflow on version tags like v1.0.0, v2.0.0, etc. pull_request: branches: - master # Trigger workflow when a PR targets the master branch @@ -21,17 +21,41 @@ env: IMAGE_NAME: ${{ github.repository }} jobs: - build-and-push-image: + build-tagged-image: runs-on: ubuntu-latest - permissions: - contents: read - packages: write + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build and push versioned Docker image + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} # Version tag from the metadata action + labels: ${{ steps.meta.outputs.labels }} + + build-latest-image: + runs-on: ubuntu-latest + if: github.event_name == 'push' && github.ref == 'refs/heads/master' steps: - name: Checkout repository uses: actions/checkout@v4 - # Logs in to the Container registry using GitHub token - name: Log in to the Container registry uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 with: @@ -39,25 +63,48 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - # Extract metadata (tags, labels) for Docker - name: Extract metadata (tags, labels) for Docker id: meta uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - # Build and push Docker image - - name: Build and push Docker image + - name: Build and push latest Docker image uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 with: context: . push: true - # Tag the image as 'latest' only for master branch, versioned tags for versioned pushes, and PR-specific tags tags: | - # Version tags for releases ${{ steps.meta.outputs.tags }} - - # Commit SHA for PR builds for precise versioning - ${{ github.event_name == 'pull_request' && env.REGISTRY && env.IMAGE_NAME && format('{0}/{1}:{2}', env.REGISTRY, env.IMAGE_NAME, github.sha) }} - - labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest + labels: ${{ steps.meta.outputs.labels }} + + build-pr-image: + runs-on: ubuntu-latest + if: github.event_name == 'pull_request' + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build and push PR-specific Docker image + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: . + push: true + tags: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:pr-${{ github.event.pull_request.number }} + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha.substring(0, 7) }} # Short commit hash + labels: ${{ steps.meta.outputs.labels }}