# Nimbus # Copyright (c) 2020-2024 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. on: push: tags: - 'v*' # "v1.2.3" name: Upload Release Asset jobs: build-amd64: name: Linux AMD64 release asset runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Build project id: make_dist run: | make dist-amd64 cd dist ARCHIVE=$(echo nimbus-eth1_Linux_amd64_*.tar.gz) echo "archive=${ARCHIVE}" >> $GITHUB_OUTPUT echo "archive_dir=${ARCHIVE%.tar.gz}" >> $GITHUB_OUTPUT tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_execution_client.sha512sum - name: Upload archive artefact uses: actions/upload-artifact@v4 with: name: Linux_amd64_archive path: ./dist/${{ steps.make_dist.outputs.archive }} retention-days: 2 - name: Upload checksum artefact uses: actions/upload-artifact@v4 with: name: Linux_amd64_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_execution_client.sha512sum retention-days: 2 - name: Login to Docker Hub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push a Docker image for end users run: | cd dist tar -xzf ${{ steps.make_dist.outputs.archive }} mv ${{ steps.make_dist.outputs.archive_dir }} ../docker/dist/binaries/nimbus-eth1 cd ../docker/dist/binaries REFNAME="${{ github.ref }}" TAG="${REFNAME#refs/tags/}" DOCKER_BUILDKIT=1 docker build -f Dockerfile.amd64 -t statusim/nimbus-eth1:amd64-${TAG} -t statusim/nimbus-eth1:amd64-latest . docker push statusim/nimbus-eth1:amd64-${TAG} docker push statusim/nimbus-eth1:amd64-latest build-arm64: name: Linux ARM64 release asset runs-on: ubuntu-latest steps: - name: Install packages env: DEBIAN_FRONTEND: "noninteractive" TZ: "Etc/UTC" run: | sudo apt-get -qq update sudo apt-get -qq -y install binfmt-support qemu-user-static - name: Checkout code uses: actions/checkout@v4 - name: Build project id: make_dist run: | make dist-arm64 cd dist ARCHIVE=$(echo nimbus-eth1_Linux_arm64v8_*.tar.gz) echo "archive=${ARCHIVE}" >> $GITHUB_OUTPUT echo "archive_dir=${ARCHIVE%.tar.gz}" >> $GITHUB_OUTPUT tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_execution_client.sha512sum - name: Upload archive artefact uses: actions/upload-artifact@v4 with: name: Linux_arm64_archive path: ./dist/${{ steps.make_dist.outputs.archive }} retention-days: 2 - name: Upload checksum artefact uses: actions/upload-artifact@v4 with: name: Linux_arm64_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_execution_client.sha512sum retention-days: 2 - name: Login to Docker Hub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push a Docker image for end users run: | cd dist tar -xzf ${{ steps.make_dist.outputs.archive }} mv ${{ steps.make_dist.outputs.archive_dir }} ../docker/dist/binaries/nimbus-eth1 cd ../docker/dist/binaries REFNAME="${{ github.ref }}" TAG="${REFNAME#refs/tags/}" cp -a /usr/bin/qemu-aarch64-static . DOCKER_BUILDKIT=1 docker build -f Dockerfile.arm64 -t statusim/nimbus-eth1:arm64-${TAG} -t statusim/nimbus-eth1:arm64-latest . docker push statusim/nimbus-eth1:arm64-${TAG} docker push statusim/nimbus-eth1:arm64-latest build-win64: name: Windows AMD64 release asset runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Build project id: make_dist run: | make dist-win64 cd dist ARCHIVE=$(echo nimbus-eth1_Windows_amd64_*.tar.gz) echo "archive=${ARCHIVE}" >> $GITHUB_OUTPUT echo "archive_dir=${ARCHIVE%.tar.gz}" >> $GITHUB_OUTPUT tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_execution_client.sha512sum - name: Upload archive artefact uses: actions/upload-artifact@v4 with: name: Windows_amd64_archive path: ./dist/${{ steps.make_dist.outputs.archive }} retention-days: 2 - name: Upload checksum artefact uses: actions/upload-artifact@v4 with: name: Windows_amd64_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_execution_client.sha512sum retention-days: 2 build-macos-arm64: name: macOS ARM64 release asset runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Build project id: make_dist run: | make dist-macos-arm64 cd dist ARCHIVE=$(echo nimbus-eth1_macOS_arm64_*.tar.gz) echo "archive=${ARCHIVE}" >> $GITHUB_OUTPUT echo "archive_dir=${ARCHIVE%.tar.gz}" >> $GITHUB_OUTPUT tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_execution_client.sha512sum - name: Upload archive artefact uses: actions/upload-artifact@v4 with: name: macOS_arm64_archive path: ./dist/${{ steps.make_dist.outputs.archive }} retention-days: 2 - name: Upload checksum artefact uses: actions/upload-artifact@v4 with: name: macOS_arm64_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_execution_client.sha512sum retention-days: 2 prepare-release: name: Prepare release draft needs: [build-amd64, build-arm64, build-win64, build-macos-arm64] runs-on: ubuntu-latest steps: - name: Download artefacts uses: actions/download-artifact@v4 - name: Create release notes run: | cat > release_notes.md <> release_notes.md cat Linux_amd64_checksum/* >> release_notes.md echo '# Linux ARM64' >> release_notes.md cat Linux_arm64_checksum/* >> release_notes.md echo '# Windows AMD64' >> release_notes.md cat Windows_amd64_checksum/* >> release_notes.md echo '# macOS ARM64' >> release_notes.md cat macOS_arm64_checksum/* >> release_notes.md echo '```' >> release_notes.md - name: Create release id: create_release uses: softprops/action-gh-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: draft: true prerelease: false body_path: release_notes.md files: | Linux_amd64_archive/* Linux_arm64_archive/* Windows_amd64_archive/* macOS_arm64_archive/* - name: Delete artefacts uses: geekyeggo/delete-artifact@v1 with: failOnError: false name: | Linux_amd64_archive Linux_amd64_checksum Linux_arm64_archive Linux_arm64_checksum Windows_amd64_archive Windows_amd64_checksum macOS_arm64_archive macOS_arm64_checksum - name: Login to Docker Hub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build multi-arch Docker image run: | REFNAME="${{ github.ref }}" TAG="${REFNAME#refs/tags/}" docker manifest create \ statusim/nimbus-eth1:multiarch-${TAG} \ --amend statusim/nimbus-eth1:amd64-${TAG} \ --amend statusim/nimbus-eth1:arm64-${TAG} docker manifest push statusim/nimbus-eth1:multiarch-${TAG} docker manifest create \ statusim/nimbus-eth1:multiarch-latest \ --amend statusim/nimbus-eth1:amd64-latest \ --amend statusim/nimbus-eth1:arm64-latest docker manifest push statusim/nimbus-eth1:multiarch-latest