From d6dcf2b07b2914c1d3ed1296e224a366cc1a5765 Mon Sep 17 00:00:00 2001 From: Nicola Lunghi Date: Wed, 13 Aug 2025 16:14:03 +0200 Subject: [PATCH 1/2] docker-bake: build for arm. also build the alpine version of everything --- docker-bake.hcl | 239 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 210 insertions(+), 29 deletions(-) diff --git a/docker-bake.hcl b/docker-bake.hcl index 2d064b1..8296c49 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -2,22 +2,203 @@ group "default" { targets = [ "all", - "20", - "19", - "18", - "17", - "16", - "16-alpine", - "15", - "14", - "13", - "12", - "11", - "10", - "9", - "8", - "7", + "20", "20-alpine", + "19", "19-alpine", + "18", "18-alpine", + "17", "17-alpine", + "16", "16-alpine", + "15", "15-alpine", + "14", "14-alpine", + "13", "13-alpine", + "12", "12-alpine", + "11", "11-alpine", + "10", "10-alpine", + "9", "9-alpine", + "8", "8-alpine", + "7", "7-alpine", ] +# ---- Alpine targets ---- +target "20-alpine" { + dockerfile = "Dockerfile.alpine" + context = "." + args = { + BASE_IMAGE = "alpine:3.18" + CLANG_VERSION = "20" + } + tags = [ + "${DOCKER_REPO}:20-alpine", + "${GITHUB_REPO}:20-alpine" + ] + platforms = ["linux/amd64", "linux/arm64"] +} + +target "19-alpine" { + dockerfile = "Dockerfile.alpine" + context = "." + args = { + BASE_IMAGE = "alpine:3.18" + CLANG_VERSION = "19" + } + tags = [ + "${DOCKER_REPO}:19-alpine", + "${GITHUB_REPO}:19-alpine" + ] + platforms = ["linux/amd64", "linux/arm64"] +} + +target "18-alpine" { + dockerfile = "Dockerfile.alpine" + context = "." + args = { + BASE_IMAGE = "alpine:3.18" + CLANG_VERSION = "18" + } + tags = [ + "${DOCKER_REPO}:18-alpine", + "${GITHUB_REPO}:18-alpine" + ] + platforms = ["linux/amd64", "linux/arm64"] +} + +target "17-alpine" { + dockerfile = "Dockerfile.alpine" + context = "." + args = { + BASE_IMAGE = "alpine:3.18" + CLANG_VERSION = "17" + } + tags = [ + "${DOCKER_REPO}:17-alpine", + "${GITHUB_REPO}:17-alpine" + ] + platforms = ["linux/amd64", "linux/arm64"] +} + +target "15-alpine" { + dockerfile = "Dockerfile.alpine" + context = "." + args = { + BASE_IMAGE = "alpine:3.18" + CLANG_VERSION = "15" + } + tags = [ + "${DOCKER_REPO}:15-alpine", + "${GITHUB_REPO}:15-alpine" + ] + platforms = ["linux/amd64", "linux/arm64"] +} + +target "14-alpine" { + dockerfile = "Dockerfile.alpine" + context = "." + args = { + BASE_IMAGE = "alpine:3.18" + CLANG_VERSION = "14" + } + tags = [ + "${DOCKER_REPO}:14-alpine", + "${GITHUB_REPO}:14-alpine" + ] + platforms = ["linux/amd64", "linux/arm64"] +} + +target "13-alpine" { + dockerfile = "Dockerfile.alpine" + context = "." + args = { + BASE_IMAGE = "alpine:3.18" + CLANG_VERSION = "13" + } + tags = [ + "${DOCKER_REPO}:13-alpine", + "${GITHUB_REPO}:13-alpine" + ] + platforms = ["linux/amd64", "linux/arm64"] +} + +target "12-alpine" { + dockerfile = "Dockerfile.alpine" + context = "." + args = { + BASE_IMAGE = "alpine:3.18" + CLANG_VERSION = "12" + } + tags = [ + "${DOCKER_REPO}:12-alpine", + "${GITHUB_REPO}:12-alpine" + ] + platforms = ["linux/amd64", "linux/arm64"] +} + +target "11-alpine" { + dockerfile = "Dockerfile.alpine" + context = "." + args = { + BASE_IMAGE = "alpine:3.18" + CLANG_VERSION = "11" + } + tags = [ + "${DOCKER_REPO}:11-alpine", + "${GITHUB_REPO}:11-alpine" + ] + platforms = ["linux/amd64", "linux/arm64"] +} + +target "10-alpine" { + dockerfile = "Dockerfile.alpine" + context = "." + args = { + BASE_IMAGE = "alpine:3.18" + CLANG_VERSION = "10" + } + tags = [ + "${DOCKER_REPO}:10-alpine", + "${GITHUB_REPO}:10-alpine" + ] + platforms = ["linux/amd64", "linux/arm64"] +} + +target "9-alpine" { + dockerfile = "Dockerfile.alpine" + context = "." + args = { + BASE_IMAGE = "alpine:3.18" + CLANG_VERSION = "9" + } + tags = [ + "${DOCKER_REPO}:9-alpine", + "${GITHUB_REPO}:9-alpine" + ] + platforms = ["linux/amd64", "linux/arm64"] +} + +target "8-alpine" { + dockerfile = "Dockerfile.alpine" + context = "." + args = { + BASE_IMAGE = "alpine:3.18" + CLANG_VERSION = "8" + } + tags = [ + "${DOCKER_REPO}:8-alpine", + "${GITHUB_REPO}:8-alpine" + ] + platforms = ["linux/amd64", "linux/arm64"] +} + +target "7-alpine" { + dockerfile = "Dockerfile.alpine" + context = "." + args = { + BASE_IMAGE = "alpine:3.18" + CLANG_VERSION = "7" + } + tags = [ + "${DOCKER_REPO}:7-alpine", + "${GITHUB_REPO}:7-alpine" + ] + platforms = ["linux/amd64", "linux/arm64"] +} } # ---- variables ---- @@ -34,13 +215,13 @@ target "all" { dockerfile = "Dockerfile.all" context = "." args = { - BASE_IMAGE="ubuntu:20.04" + BASE_IMAGE="ubuntu:24.04" } tags = [ "${DOCKER_REPO}:all", "${GITHUB_REPO}:all" ] - platforms = ["linux/amd64"] + platforms = ["linux/amd64", "linux/arm64"] } target "clang-tools" { @@ -52,14 +233,14 @@ target "clang-tools" { context = "." args = { # https://packages.ubuntu.com/search?suite=default§ion=all&arch=any&keywords=clang-format-20&searchon=names - BASE_IMAGE="ubuntu:plucky" + BASE_IMAGE="ubuntu:24.04" CLANG_VERSION="${tgt}", } tags = [ "${DOCKER_REPO}:${tgt}", "${GITHUB_REPO}:${tgt}" ] - platforms = ["linux/amd64"] + platforms = ["linux/amd64", "linux/arm64"] } target "clang-tools" { @@ -71,14 +252,14 @@ target "clang-tools" { context = "." args = { # https://packages.ubuntu.com/search?suite=default§ion=all&arch=any&keywords=clang-format-19&searchon=names - BASE_IMAGE="ubuntu:oracular" + BASE_IMAGE="ubuntu:24.04" CLANG_VERSION="${tgt}", } tags = [ "${DOCKER_REPO}:${tgt}", "${GITHUB_REPO}:${tgt}" ] - platforms = ["linux/amd64"] + platforms = ["linux/amd64", "linux/arm64"] } target "clang-tools" { @@ -90,14 +271,14 @@ target "clang-tools" { context = "." args = { # https://packages.ubuntu.com/search?suite=default§ion=all&arch=any&keywords=clang-format-18&searchon=names - BASE_IMAGE="ubuntu:noble" + BASE_IMAGE="ubuntu:24.04" CLANG_VERSION="${tgt}", } tags = [ "${DOCKER_REPO}:${tgt}", "${GITHUB_REPO}:${tgt}" ] - platforms = ["linux/amd64"] + platforms = ["linux/amd64", "linux/arm64"] } target "clang-tools" { @@ -108,14 +289,14 @@ target "clang-tools" { dockerfile = "Dockerfile" context = "." args = { - BASE_IMAGE="ubuntu:24.10" + BASE_IMAGE="ubuntu:24.04" CLANG_VERSION="${tgt}", } tags = [ "${DOCKER_REPO}:${tgt}", "${GITHUB_REPO}:${tgt}" ] - platforms = ["linux/amd64"] + platforms = ["linux/amd64", "linux/arm64"] } target "clang-tools" { @@ -126,14 +307,14 @@ target "clang-tools" { dockerfile = "Dockerfile" context = "." args = { - BASE_IMAGE="ubuntu:22.04" + BASE_IMAGE="ubuntu:24.04" CLANG_VERSION="${tgt}", } tags = [ "${DOCKER_REPO}:${tgt}", "${GITHUB_REPO}:${tgt}" ] - platforms = ["linux/amd64"] + platforms = ["linux/amd64", "linux/arm64"] } target "clang-tools" { @@ -144,14 +325,14 @@ target "clang-tools" { dockerfile = "Dockerfile" context = "." args = { - BASE_IMAGE="ubuntu:20.04" + BASE_IMAGE="ubuntu:24.04" CLANG_VERSION="${tgt}", } tags = [ "${DOCKER_REPO}:${tgt}", "${GITHUB_REPO}:${tgt}" ] - platforms = ["linux/amd64"] + platforms = ["linux/amd64", "linux/arm64"] } target "clang-tools" { From 72f27eabd7ceb233299449ab999ff9ce946a36a1 Mon Sep 17 00:00:00 2001 From: Nicola Lunghi Date: Wed, 13 Aug 2025 16:16:29 +0200 Subject: [PATCH 2/2] Modify the github workflow to automatically build all targets --- .github/workflows/CI.yml | 20 ++++++++++++++++++-- docker-bake.hcl | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index e6f742d..c84962c 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -20,11 +20,27 @@ concurrency: cancel-in-progress: true jobs: + extract-targets: + runs-on: ubuntu-latest + outputs: + targets: ${{ steps.extract.outputs.targets }} + steps: + - uses: actions/checkout@v4 + - name: Extract targets as JSON array + id: extract + uses: dcarbone/install-jq-action@v2 + - name: Get targets from bake file + id: get-targets + run: | + TARGETS=$(docker buildx bake --file docker-bake.hcl --print | jq -c '[.target | keys[] | select(. != "default")]') + echo "targets=$TARGETS" | tee -a ${GITHUB_OUTPUT} + build: + needs: extract-targets + runs-on: ubuntu-latest strategy: matrix: - target: [ "all", "20", "19", "18", "17", "16", "16-alpine", "15", "14", "13", "12", "11", "10", "9", "8", "7"] - runs-on: ubuntu-latest + target: ${{ fromJson(needs.extract-targets.outputs.targets) }} steps: - uses: actions/checkout@v4 diff --git a/docker-bake.hcl b/docker-bake.hcl index 8296c49..272d77d 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -17,6 +17,7 @@ group "default" { "8", "8-alpine", "7", "7-alpine", ] +} # ---- Alpine targets ---- target "20-alpine" { dockerfile = "Dockerfile.alpine" @@ -199,7 +200,6 @@ target "7-alpine" { ] platforms = ["linux/amd64", "linux/arm64"] } -} # ---- variables ---- variable "DOCKER_REPO" {