| name: Docker Image Build |
| description: Builds Cobalt build docker images. |
| inputs: |
| service: |
| description: "Service name from docker compose." |
| required: true |
| runs: |
| using: "composite" |
| steps: |
| - name: Rename Limit |
| run: git config diff.renameLimit 999999 |
| shell: bash |
| - name: Get docker file changes |
| id: changed-files |
| uses: tj-actions/changed-files@2d756ea4c53f7f6b397767d8723b3a10a9f35bf2 # v44 |
| with: |
| files_ignore: third_party/** |
| files: | |
| docker-compose-windows.yml |
| docker/windows/** |
| .github/actions/docker_win/** |
| - name: Retrieve Docker metadata |
| id: meta |
| uses: docker/metadata-action@507c2f2dc502c992ad446e3d7a5dfbe311567a96 # v4.3.0 |
| with: |
| images: ${{env.REGISTRY}}/${{github.repository}}/cobalt-${{inputs.service}} |
| tags: | |
| type=ref,event=branch |
| type=ref,event=tag |
| type=ref,event=pr |
| - name: Set Docker Tag |
| run: | |
| set -x |
| docker_tag="${{ steps.meta.outputs.tags }}" |
| docker_tag="${docker_tag%.1[+,-]}" |
| echo "DOCKER_TAG=${docker_tag}" | head -n 1 >> $GITHUB_ENV |
| shell: bash |
| # We need to set docker tag properly for pull requests. In those scenarios where no docker related files |
| # were changed we need to use an existing image (e.g. main). In cases where docker image is rebuilt we have |
| # to use tag generated by the image build. |
| - name: Set Docker Tag |
| if: ${{ (steps.changed-files.outputs.any_changed == 'false') && (github.event_name == 'pull_request') }} |
| env: |
| REPO: ${{ github.repository }} |
| run: echo "DOCKER_TAG=ghcr.io/${REPO}/cobalt-${{inputs.service}}:${GITHUB_BASE_REF%.1+}" >> $GITHUB_ENV |
| shell: bash |
| - name: Process Docker metadata |
| id: process-docker |
| run: | |
| set -x |
| set +e |
| docker manifest inspect $DOCKER_TAG > /dev/null |
| if [[ $? -ne 0 || ${{ steps.changed-files.outputs.any_changed }} == 'true' ]]; then |
| echo "need_to_build=true" >> $GITHUB_ENV |
| else |
| echo "need_to_build=false" >> $GITHUB_ENV |
| fi |
| shell: bash |
| - name: Build containers with Docker Compose |
| if: env.need_to_build == 'true' |
| env: |
| DOCKER_CPUS: 2 |
| SERVICE: ${{inputs.service}} |
| shell: bash |
| run: | |
| set -xue |
| docker compose -f docker-compose-windows.yml up --no-start "${SERVICE}" |
| - name: Tag images |
| if: ${{ (env.need_to_build == 'true') && ((github.event_name != 'pull_request') || (!github.event.pull_request.head.repo.fork)) }} |
| run: | |
| docker tag cobalt-${{inputs.service}} $DOCKER_TAG |
| shell: bash |
| - name: Push images |
| if: ${{ (env.need_to_build == 'true') && ((github.event_name != 'pull_request') || (!github.event.pull_request.head.repo.fork)) }} |
| run: docker push ${DOCKER_TAG} |
| shell: bash |