From f77fc8d7e41db3f588ba16c1f940089689dec0d1 Mon Sep 17 00:00:00 2001 From: Advaita Saha Date: Thu, 13 Mar 2025 19:42:55 +0530 Subject: [PATCH 1/4] multi arch docker image builder with extensible platform support --- .github/workflows/nimbus_docker_build.yml | 136 ++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 .github/workflows/nimbus_docker_build.yml diff --git a/.github/workflows/nimbus_docker_build.yml b/.github/workflows/nimbus_docker_build.yml new file mode 100644 index 000000000..9f3cfa46c --- /dev/null +++ b/.github/workflows/nimbus_docker_build.yml @@ -0,0 +1,136 @@ +# Nimbus +# Copyright (c) 2025 Status Research & Development GmbH +# Licensed under either of +# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or +# http://www.apache.org/licenses/LICENSE-2.0) +# * MIT license ([LICENSE-MIT](LICENSE-MIT) or +# http://opensource.org/licenses/MIT) +# at your option. This file may not be copied, modified, or distributed except +# according to those terms. + +name: Build Docker Images + +on: + push: + branches: + - 'master' + paths-ignore: + - 'fluffy/**' + - '**/*.md' + - '.github/workflows/fluffy*.yml' + - 'nimbus_verified_proxy/**' + - '.github/workflows/nimbus_verified_proxy.yml' + + workflow_dispatch: + +env: + REGISTRY_IMAGE: ${{ secrets.DOCKERHUB_USERNAME }}/nimbus-eth1 + +jobs: + build: + strategy: + fail-fast: false + matrix: + target: + - os: linux + cpu: amd64 + - os: linux + cpu: arm64 + include: + - target: + cpu: amd64 + builder: ubuntu-latest + - target: + cpu: arm64 + builder: ubuntu-24.04-arm + name: '${{ matrix.target.os }}-${{ matrix.target.cpu }}' + runs-on: ${{ matrix.builder }} + steps: + - name: Prepare + run: | + platform=${{ matrix.target.os }}/${{ matrix.target.cpu }} + # Replace '/' with '-' to create a unique identifier for this platform + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_IMAGE }} + + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ vars.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build and push by digest + id: build + uses: docker/build-push-action@v6 + with: + context: . + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta.outputs.labels }} + tags: ${{ env.REGISTRY_IMAGE }} + outputs: type=image,push-by-digest=true,name-canonical=true,push=true + + - name: Export digest + run: | + mkdir -p ${{ runner.temp }}/digests + digest="${{ steps.build.outputs.digest }}" + touch "${{ runner.temp }}/digests/${digest#sha256:}" + + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-${{ env.PLATFORM_PAIR }} + path: ${{ runner.temp }}/digests/* + if-no-files-found: error + retention-days: 1 + + merge: + runs-on: ubuntu-latest + needs: + - build + steps: + - name: Download digests + uses: actions/download-artifact@v4 + with: + path: ${{ runner.temp }}/digests + pattern: digests-* + merge-multiple: true + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ vars.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_IMAGE }} + tags: | + type=ref,event=branch + type=sha,prefix={{branch}}- + + - name: Create manifest list and push + working-directory: ${{ runner.temp }}/digests + run: | + jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON" + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *) + + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }} \ No newline at end of file From c1ca6af2f885d5e48526e9dae7b4d4b7754868cc Mon Sep 17 00:00:00 2001 From: Advaita Saha Date: Thu, 13 Mar 2025 19:47:14 +0530 Subject: [PATCH 2/4] replace vars to secrets --- .github/workflows/nimbus_docker_build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nimbus_docker_build.yml b/.github/workflows/nimbus_docker_build.yml index 9f3cfa46c..c6abf9177 100644 --- a/.github/workflows/nimbus_docker_build.yml +++ b/.github/workflows/nimbus_docker_build.yml @@ -64,7 +64,7 @@ jobs: - name: Login to Docker Hub uses: docker/login-action@v3 with: - username: ${{ vars.DOCKERHUB_USERNAME }} + username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up Docker Buildx @@ -109,7 +109,7 @@ jobs: - name: Login to Docker Hub uses: docker/login-action@v3 with: - username: ${{ vars.DOCKERHUB_USERNAME }} + username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up Docker Buildx From 64c47f25607f458bbe2d7222a4f7073593a38846 Mon Sep 17 00:00:00 2001 From: Advaita Saha Date: Thu, 13 Mar 2025 19:55:22 +0530 Subject: [PATCH 3/4] update dockerfile --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index eb7bbf8cb..6dec1c4af 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,13 +15,13 @@ SHELL ["/bin/bash", "-c"] RUN apt-get clean && apt update \ && apt -y install curl build-essential git-lfs librocksdb-dev -RUN ldd --version ldd +RUN ldd --version ADD . /root/nimbus-eth1 RUN cd /root/nimbus-eth1 \ && make -j$(nproc) update-from-ci \ - && make -j$(nproc) V=1 LOG_LEVEL=TRACE nimbus + && make -j$(nproc) V=1 nimbus # --------------------------------- # # Starting new image to reduce size # @@ -33,7 +33,7 @@ RUN apt-get clean && apt update \ && apt -y install build-essential librocksdb-dev RUN apt update && apt -y upgrade -RUN ldd --version ldd +RUN ldd --version RUN rm -f /home/user/nimbus-eth1/build/nimbus_execution_client From 401ff843fc1dda85679aef5917cd19294b80690c Mon Sep 17 00:00:00 2001 From: Advaita Saha Date: Thu, 13 Mar 2025 19:56:23 +0530 Subject: [PATCH 4/4] fix: lint --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6dec1c4af..db59ac29b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Nimbus -# Copyright (c) 2024 Status Research & Development GmbH +# Copyright (c) 2024-2025 Status Research & Development GmbH # Licensed under either of # * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or # http://www.apache.org/licenses/LICENSE-2.0)