From 8d726b3986293d7a36be7a482127920d0aee8a03 Mon Sep 17 00:00:00 2001 From: Ayaz Salikhov Date: Wed, 11 Jun 2025 18:39:17 +0100 Subject: [PATCH] feat: Build GCC natively and then merge the image --- .github/workflows/update_docker_ci.yml | 108 +++++++++++++++++++++---- docker/ci/Dockerfile | 3 +- docker/compilers/gcc/Dockerfile | 2 +- 3 files changed, 96 insertions(+), 17 deletions(-) diff --git a/.github/workflows/update_docker_ci.yml b/.github/workflows/update_docker_ci.yml index a0c99cc07..5443f28f2 100644 --- a/.github/workflows/update_docker_ci.yml +++ b/.github/workflows/update_docker_ci.yml @@ -27,9 +27,12 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +env: + GHCR_REPO: ghcr.io/${{ github.repository_owner }} + jobs: - gcc: - name: Build and push GCC docker image + gcc-amd64: + name: Build and push GCC docker image (amd64) runs-on: [self-hosted, heavy] steps: @@ -42,27 +45,104 @@ jobs: files: "docker/compilers/gcc/**" - uses: ./.github/actions/build_docker_image - # Skipping this build for now, because CI environment is not stable - if: false && steps.changed-files.outputs.any_changed == 'true' + if: steps.changed-files.outputs.any_changed == 'true' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }} DOCKERHUB_PW: ${{ secrets.DOCKERHUB_PW }} with: images: | - ghcr.io/xrplf/clio-gcc + ${{ env.GHCR_REPO }}/clio-gcc rippleci/clio_gcc push_image: ${{ github.event_name != 'pull_request' }} directory: docker/compilers/gcc tags: | - type=raw,value=latest - type=raw,value=12 - type=raw,value=12.3.0 - type=raw,value=${{ github.sha }} - platforms: linux/amd64,linux/arm64 + type=raw,value=amd64-latest + type=raw,value=amd64-12 + type=raw,value=amd64-12.3.0 + type=raw,value=amd64-${{ github.sha }} + platforms: linux/amd64 + dockerhub_repo: rippleci/clio_gcc + dockerhub_description: GCC compiler for XRPLF/clio. + + gcc-arm64: + name: Build and push GCC docker image (arm64) + runs-on: [self-hosted, heavy-arm64] + + steps: + - uses: actions/checkout@v4 + + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46.0.5 + with: + files: "docker/compilers/gcc/**" + + - uses: ./.github/actions/build_docker_image + if: steps.changed-files.outputs.any_changed == 'true' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }} + DOCKERHUB_PW: ${{ secrets.DOCKERHUB_PW }} + with: + images: | + ${{ env.GHCR_REPO }}/clio-gcc + rippleci/clio_gcc + push_image: ${{ github.event_name != 'pull_request' }} + directory: docker/compilers/gcc + tags: | + type=raw,value=arm64-latest + type=raw,value=arm64-12 + type=raw,value=arm64-12.3.0 + type=raw,value=arm64-${{ github.sha }} + platforms: linux/arm64 dockerhub_repo: rippleci/clio_gcc dockerhub_description: GCC compiler for XRPLF/clio. + gcc-merge: + name: Merge and push multi-arch GCC docker image + runs-on: [self-hosted, heavy] + needs: [gcc-amd64, gcc-arm64] + if: ${{ github.event_name != 'pull_request' }} + + steps: + - uses: actions/checkout@v4 + + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46.0.5 + with: + files: "docker/compilers/gcc/**" + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USER }} + password: ${{ secrets.DOCKERHUB_PW }} + + - name: Create and push multi-arch manifest + if: steps.changed-files.outputs.any_changed == 'true' + run: | + for image in ${{ env.GHCR_REPO }}/clio-gcc rippleci/clio_gcc; do + docker buildx imagetools create \ + -t $image:latest \ + -t $image:12 \ + -t $image:12.3.0 \ + -t $image:${{ github.sha }} \ + $image:arm64-latest \ + $image:amd64-latest + done + clang: name: Build and push Clang docker image runs-on: [self-hosted, heavy] @@ -84,7 +164,7 @@ jobs: DOCKERHUB_PW: ${{ secrets.DOCKERHUB_PW }} with: images: | - ghcr.io/xrplf/clio-clang + ${{ env.GHCR_REPO }}/clio-clang rippleci/clio_clang push_image: ${{ github.event_name != 'pull_request' }} directory: docker/compilers/clang @@ -115,7 +195,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: images: | - ghcr.io/xrplf/clio-tools + ${{ env.GHCR_REPO }}/clio-tools push_image: ${{ github.event_name != 'pull_request' }} directory: docker/tools tags: | @@ -126,7 +206,7 @@ jobs: ci: name: Build and push CI docker image runs-on: [self-hosted, heavy] - needs: [gcc, clang, tools] + needs: [gcc-merge, clang, tools] steps: - uses: actions/checkout@v4 @@ -137,8 +217,8 @@ jobs: DOCKERHUB_PW: ${{ secrets.DOCKERHUB_PW }} with: images: | + ${{ env.GHCR_REPO }}/clio-ci rippleci/clio_ci - ghcr.io/xrplf/clio-ci push_image: ${{ github.event_name != 'pull_request' }} directory: docker/ci tags: | diff --git a/docker/ci/Dockerfile b/docker/ci/Dockerfile index 61f62d759..20aed2966 100644 --- a/docker/ci/Dockerfile +++ b/docker/ci/Dockerfile @@ -1,5 +1,4 @@ -# TODO: change this when we are able to push gcc image to ghcr.io -FROM rippleci/clio_gcc:12.3.0 AS clio-gcc +FROM ghcr.io/xrplf/clio-gcc:12.3.0 AS clio-gcc FROM ghcr.io/xrplf/clio-tools:latest AS clio-tools FROM ghcr.io/xrplf/clio-clang:16 diff --git a/docker/compilers/gcc/Dockerfile b/docker/compilers/gcc/Dockerfile index f4e763880..f98da1d03 100644 --- a/docker/compilers/gcc/Dockerfile +++ b/docker/compilers/gcc/Dockerfile @@ -4,7 +4,7 @@ ARG DEBIAN_FRONTEND=noninteractive ARG TARGETARCH ARG UBUNTU_VERSION=20.04 ARG GCC_VERSION=12.3.0 -ARG BUILD_VERSION=2 +ARG BUILD_VERSION=3 RUN apt-get update \ && apt-get install -y --no-install-recommends --no-install-suggests \