blob: c882dd7ccde0cf2d6cc80f8625c866752ce30601 [file] [log] [blame]
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}" >> $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