# Generate the containers that we use for builds. name: Build Containers on: workflow_call: env: docker-registry: ghcr.io docker-config-path: source/ci/docker jobs: # Build the docker container images that we will use for our Linux # builds. This will identify the last commit to the repository that # updated the docker images, and try to download the image tagged with # that sha. If it does not exist, we'll do a docker build and push # the image up to GitHub Packages for the actual CI/CD runs. We tag # with both the sha and "latest" so that the subsequent runs need not # know the sha. Only do this on CI builds (when the event is a "push") # because PR builds from forks lack permission to write packages. containers: strategy: matrix: container: - name: xenial - name: bionic - name: focal - name: docurium - name: bionic-x86 dockerfile: bionic base: multiarch/ubuntu-core:x86-bionic qemu: true - name: bionic-arm32 dockerfile: bionic base: multiarch/ubuntu-core:armhf-bionic qemu: true - name: bionic-arm64 dockerfile: bionic base: multiarch/ubuntu-core:arm64-bionic qemu: true - name: centos7 - name: centos8 runs-on: ubuntu-latest name: "Create container: ${{ matrix.container.name }}" steps: - name: Check out repository uses: actions/checkout@v3 with: path: source fetch-depth: 0 if: github.event_name != 'pull_request' - name: Setup QEMU run: docker run --rm --privileged multiarch/qemu-user-static:register --reset if: matrix.container.qemu == true - name: Download existing container run: | "${{ github.workspace }}/source/ci/getcontainer.sh" "${{ matrix.container.name }}" "${{ matrix.container.dockerfile }}" env: DOCKER_REGISTRY: ${{ env.docker-registry }} GITHUB_TOKEN: ${{ secrets.github_token }} working-directory: ${{ env.docker-config-path }} if: github.event_name != 'pull_request' - name: Build and publish image run: | if [ "${{ matrix.container.base }}" != "" ]; then BASE_ARG="--build-arg BASE=${{ matrix.container.base }}" fi docker build -t ${{ env.docker-registry-container-sha }} --build-arg UID=$(id -u) --build-arg GID=$(id -g) ${BASE_ARG} -f ${{ env.dockerfile }} . docker tag ${{ env.docker-registry-container-sha }} ${{ env.docker-registry-container-latest }} docker push ${{ env.docker-registry-container-sha }} docker push ${{ env.docker-registry-container-latest }} working-directory: ${{ env.docker-config-path }} if: github.event_name != 'pull_request' && env.docker-container-exists != 'true'