From 4a58d43795e2c15d989ff73f854c3c1f2489b533 Mon Sep 17 00:00:00 2001 From: VKTB <45173816+VKTB@users.noreply.github.com> Date: Mon, 3 Feb 2025 15:46:14 +0000 Subject: [PATCH] Define Actions job for building and pushing Docker prod image to Harbor #5 --- .github/workflows/.ci.yml | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/.github/workflows/.ci.yml b/.github/workflows/.ci.yml index ce1abe2..8ef4a4a 100644 --- a/.github/workflows/.ci.yml +++ b/.github/workflows/.ci.yml @@ -1,6 +1,11 @@ name: CI on: workflow_dispatch: + inputs: + push-docker-image-to-harbor: + description: 'Push Docker Image to Harbor' + type: boolean + default: false pull_request: push: branches: @@ -106,3 +111,37 @@ jobs: - name: Output docker logs (minio) if: failure() run: docker logs object-storage-api-minio-1 + + docker: + # This job builds the production Docker image and if the workflow is manually triggered + # while the `push-docker-image-to-harbor` input is set to `true`, it pushes it to Harbor. + needs: [linting, unit-tests, e2e-tests] + name: Docker + runs-on: ubuntu-latest + env: + PUSH_DOCKER_IMAGE_TO_HARBOR: ${{ inputs.push-docker-image-to-harbor != null && inputs.push-docker-image-to-harbor || 'false' }} + steps: + - name: Check out repo + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + + - name: Login to Harbor + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 + with: + registry: ${{ secrets.HARBOR_URL }} + username: ${{ secrets.HARBOR_USERNAME }} + password: ${{ secrets.HARBOR_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5.5.1 + with: + images: ${{ secrets.HARBOR_URL }}/object-storage-api + + - name: ${{ fromJSON(env.PUSH_DOCKER_IMAGE_TO_HARBOR) && 'Build and push Docker image to Harbor' || 'Build Docker image' }} + uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0 + with: + context: . + push: ${{ fromJSON(env.PUSH_DOCKER_IMAGE_TO_HARBOR) }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + target: prod