ci: split arm64 and amd64 build steps for faster compilation #65
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build docker images | ||
concurrency: | ||
group: test-${{ github.ref }} | ||
cancel-in-progress: true | ||
on: | ||
pull_request: | ||
jobs: | ||
prepare: | ||
runs-on: ubuntu-latest | ||
outputs: | ||
otp: ${{ steps.otp.outputs.version }} | ||
elixir: ${{ steps.elixir.outputs.version }} | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- name: get otp_version | ||
id: otp | ||
run: | | ||
otp_version=$(grep -E "^\+\sOTP-.*" ./RELEASE.md | sed 's/\+\sOTP-//g' | jq -R -s -c 'split("\n")[:-1]') | ||
echo "version=$otp_version" >> $GITHUB_OUTPUT | ||
- name: get elixir_version | ||
id: elixir | ||
run: | | ||
elixir_version=$(grep -E "^\+\sElixir-.*" ./RELEASE.md | sed 's/\+\sElixir-//g' | jq -R -s -c 'split("\n")[:-1]') | ||
echo "version=$elixir_version" >> $GITHUB_OUTPUT | ||
build: | ||
runs-on: ${{ github.repository_owner == 'emqx' && matrix.platform[2] || '["ubuntu-latest"]' }} | ||
needs: | ||
- prepare | ||
strategy: | ||
matrix: | ||
fail-fast: false | ||
base_image_vsn: | ||
- "5.0" | ||
otp: ${{ fromJSON(needs.prepare.outputs.otp) }} | ||
elixir: ${{ fromJSON(needs.prepare.outputs.elixir) }} | ||
platform: | ||
- [ubuntu22.04, linux/amd64, [self-hosted, linux, x64, ephemeral]] | ||
- [ubuntu22.04, linux/arm64, [self-hosted, linux, arm64, ephemeral]] | ||
- [ubuntu20.04, linux/amd64, [self-hosted, linux, x64, ephemeral]] | ||
- [ubuntu20.04, linux/arm64, [self-hosted, linux, arm64, ephemeral]] | ||
- [ubuntu18.04, linux/amd64, [self-hosted, linux, x64, ephemeral]] | ||
- [ubuntu18.04, linux/arm64, [self-hosted, linux, arm64, ephemeral]] | ||
- [ubuntu16.04, linux/amd64, [self-hosted, linux, x64, ephemeral]] | ||
- [ubuntu16.04, linux/arm64, [self-hosted, linux, arm64, ephemeral]] | ||
- [debian12, linux/amd64, [self-hosted, linux, x64, ephemeral]] | ||
- [debian12, linux/arm64, [self-hosted, linux, arm64, ephemeral]] | ||
- [debian11, linux/amd64, [self-hosted, linux, x64, ephemeral]] | ||
- [debian11, linux/arm64, [self-hosted, linux, arm64, ephemeral]] | ||
- [debian10, linux/amd64, [self-hosted, linux, x64, ephemeral]] | ||
- [debian10, linux/arm64, [self-hosted, linux, arm64, ephemeral]] | ||
- [debian9, linux/amd64, [self-hosted, linux, x64, ephemeral]] | ||
- [debian9, linux/arm64, [self-hosted, linux, arm64, ephemeral]] | ||
- [el9, linux/amd64, [self-hosted, linux, x64, ephemeral]] | ||
- [el9, linux/arm64, [self-hosted, linux, arm64, ephemeral]] | ||
- [el8, linux/amd64, [self-hosted, linux, x64, ephemeral]] | ||
- [el8, linux/arm64, [self-hosted, linux, arm64, ephemeral]] | ||
- [el7, linux/amd64, [self-hosted, linux, x64, ephemeral]] | ||
- [el7, linux/arm64, [self-hosted, linux, arm64, ephemeral]] | ||
- [amzn2, linux/amd64, [self-hosted, linux, x64, ephemeral]] | ||
- [amzn2, linux/arm64, [self-hosted, linux, arm64, ephemeral]] | ||
- [amzn2023, linux/amd64, [self-hosted, linux, x64, ephemeral]] | ||
- [amzn2023, linux/arm64, [self-hosted, linux, arm64, ephemeral]] | ||
- [alpine3.15.1, linux/amd64, [self-hosted, linux, x64, ephemeral]] | ||
- [alpine3.15.1, linux/arm64, [self-hosted, linux, arm64, ephemeral]] | ||
services: | ||
registry: | ||
image: registry:2 | ||
ports: | ||
- 5000:5000 | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: aws-actions/configure-aws-credentials@v2 | ||
with: | ||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | ||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | ||
aws-region: ${{ secrets.AWS_DEFAULT_REGION }} | ||
- name: Get cache | ||
run: aws s3 sync s3://docker-buildx-cache/emqx-builder/${{ matrix.platform[0] }} /tmp/.docker-buildx-cache | ||
- uses: docker/setup-qemu-action@v3 | ||
- uses: docker/setup-buildx-action@v3 | ||
with: | ||
driver-opts: network=host | ||
- name: Build base image | ||
uses: docker/build-push-action@v5 | ||
with: | ||
push: true | ||
cache-from: type=local,src=/tmp/.docker-buildx-cache,mode=max | ||
platforms: ${{ matrix.platform[1] }} | ||
tags: localhost:5000/${{ github.repository }}/base-${{ matrix.base_image_vsn }}:${{ matrix.platform[0] }} | ||
file: ${{ matrix.platform[0] }}/Dockerfile | ||
context: . | ||
- uses: docker/build-push-action@v5 | ||
with: | ||
platforms: ${{ matrix.platform[1] }} | ||
cache-from: type=local,src=/tmp/.docker-buildx-cache,mode=max | ||
build-args: | | ||
BUILD_FROM=localhost:5000/${{ github.repository }}/base-${{ matrix.base_image_vsn }}:${{ matrix.platform[0] }} | ||
OTP_VERSION=${{ matrix.otp }} | ||
ELIXIR_VERSION=${{ matrix.elixir }} | ||
file: ./Dockerfile | ||
context: . |