# beacon_chain # Copyright (c) 2020-2024 Status Research & Development GmbH # Licensed and distributed under either of # * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). # * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0). # 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-eth2_Linux_amd64_*.tar.gz) echo "::set-output name=archive::"${ARCHIVE} echo "::set-output name=archive_dir::"${ARCHIVE%.tar.gz} tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_beacon_node.sha512sum tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_validator_client.sha512sum - name: Upload archive artefact uses: actions/upload-artifact@v3 with: name: Linux_amd64_archive path: ./dist/${{ steps.make_dist.outputs.archive }} retention-days: 2 - name: Upload BN checksum artefact uses: actions/upload-artifact@v3 with: name: Linux_amd64_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_beacon_node.sha512sum retention-days: 2 - name: Upload VC checksum artefact uses: actions/upload-artifact@v3 with: name: Linux_amd64_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_validator_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 images for end users run: | cd dist tar -xzf ${{ steps.make_dist.outputs.archive }} mv ${{ steps.make_dist.outputs.archive_dir }} ../docker/dist/binaries/nimbus-eth2 cd ../docker/dist/binaries REFNAME="${{ github.ref }}" TAG="${REFNAME#refs/tags/}" DOCKER_BUILDKIT=1 docker build -f Dockerfile.bn.amd64 -t statusim/nimbus-eth2:amd64-${TAG} -t statusim/nimbus-eth2:amd64-latest . docker push statusim/nimbus-eth2:amd64-${TAG} docker push statusim/nimbus-eth2:amd64-latest DOCKER_BUILDKIT=1 docker build -f Dockerfile.vc.amd64 -t statusim/nimbus-validator-client:amd64-${TAG} -t statusim/nimbus-validator-client:amd64-latest . docker push statusim/nimbus-validator-client:amd64-${TAG} docker push statusim/nimbus-validator-client:amd64-latest - name: Setup ruby # Needed for fpm uses: ruby/setup-ruby@v1 with: ruby-version: '3.1' # Not needed with a .ruby-version file - name: Create RPM/DEB run: | scripts/make_packages.sh -b nimbus_beacon_node -t dist/*.tar.gz --install-fpm scripts/make_packages.sh -b nimbus_validator_client -t dist/*.tar.gz --install-fpm - name: Upload DEB uses: actions/upload-artifact@v3 with: name: Linux_amd64_packages path: | ./dist/*.deb ./dist/*.rpm retention-days: 2 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-eth2_Linux_arm64v8_*.tar.gz) echo "::set-output name=archive::"${ARCHIVE} echo "::set-output name=archive_dir::"${ARCHIVE%.tar.gz} tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_beacon_node.sha512sum tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_validator_client.sha512sum - name: Upload archive artefact uses: actions/upload-artifact@v3 with: name: Linux_arm64_archive path: ./dist/${{ steps.make_dist.outputs.archive }} retention-days: 2 - name: Upload BN checksum artefact uses: actions/upload-artifact@v3 with: name: Linux_arm64_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_beacon_node.sha512sum retention-days: 2 - name: Upload VC checksum artefact uses: actions/upload-artifact@v3 with: name: Linux_arm64_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_validator_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 images for end users run: | cd dist tar -xzf ${{ steps.make_dist.outputs.archive }} mv ${{ steps.make_dist.outputs.archive_dir }} ../docker/dist/binaries/nimbus-eth2 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.bn.arm64 -t statusim/nimbus-eth2:arm64-${TAG} -t statusim/nimbus-eth2:arm64-latest . docker push statusim/nimbus-eth2:arm64-${TAG} docker push statusim/nimbus-eth2:arm64-latest DOCKER_BUILDKIT=1 docker build -f Dockerfile.vc.arm64 -t statusim/nimbus-validator-client:arm64-${TAG} -t statusim/nimbus-validator-client:arm64-latest . docker push statusim/nimbus-validator-client:arm64-${TAG} docker push statusim/nimbus-validator-client:arm64-latest - name: Setup ruby # Needed for fpm uses: ruby/setup-ruby@v1 with: ruby-version: '3.1' # Not needed with a .ruby-version file - name: Create RPM/DEB run: | scripts/make_packages.sh -b nimbus_beacon_node -t dist/*.tar.gz --install-fpm scripts/make_packages.sh -b nimbus_validator_client -t dist/*.tar.gz --install-fpm - name: Upload DEB uses: actions/upload-artifact@v3 with: name: Linux_arm64_packages path: | ./dist/*.deb ./dist/*.rpm retention-days: 2 build-arm: name: Linux ARM 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-arm cd dist ARCHIVE=$(echo nimbus-eth2_Linux_arm32v7_*.tar.gz) echo "::set-output name=archive::"${ARCHIVE} echo "::set-output name=archive_dir::"${ARCHIVE%.tar.gz} tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_beacon_node.sha512sum tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_validator_client.sha512sum - name: Upload archive artefact uses: actions/upload-artifact@v3 with: name: Linux_arm_archive path: ./dist/${{ steps.make_dist.outputs.archive }} retention-days: 2 - name: Upload BN checksum artefact uses: actions/upload-artifact@v3 with: name: Linux_arm_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_beacon_node.sha512sum retention-days: 2 - name: Upload VC checksum artefact uses: actions/upload-artifact@v3 with: name: Linux_arm_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_validator_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 images for end users run: | cd dist tar -xzf ${{ steps.make_dist.outputs.archive }} mv ${{ steps.make_dist.outputs.archive_dir }} ../docker/dist/binaries/nimbus-eth2 cd ../docker/dist/binaries REFNAME="${{ github.ref }}" TAG="${REFNAME#refs/tags/}" cp -a /usr/bin/qemu-arm-static . DOCKER_BUILDKIT=1 docker build -f Dockerfile.bn.arm -t statusim/nimbus-eth2:arm-${TAG} -t statusim/nimbus-eth2:arm-latest . docker push statusim/nimbus-eth2:arm-${TAG} docker push statusim/nimbus-eth2:arm-latest DOCKER_BUILDKIT=1 docker build -f Dockerfile.vc.arm -t statusim/nimbus-validator-client:arm-${TAG} -t statusim/nimbus-validator-client:arm-latest . docker push statusim/nimbus-validator-client:arm-${TAG} docker push statusim/nimbus-validator-client:arm-latest - name: Setup ruby # Needed for fpm uses: ruby/setup-ruby@v1 with: ruby-version: '3.1' # Not needed with a .ruby-version file - name: Create RPM/DEB run: | scripts/make_packages.sh -b nimbus_beacon_node -t dist/*.tar.gz --install-fpm scripts/make_packages.sh -b nimbus_validator_client -t dist/*.tar.gz --install-fpm - name: Upload DEB uses: actions/upload-artifact@v3 with: name: Linux_arm_packages path: | ./dist/*.deb ./dist/*.rpm retention-days: 2 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-eth2_Windows_amd64_*.tar.gz) echo "::set-output name=archive::"${ARCHIVE} echo "::set-output name=archive_dir::"${ARCHIVE%.tar.gz} tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_beacon_node.sha512sum tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_validator_client.sha512sum - name: Upload archive artefact uses: actions/upload-artifact@v3 with: name: Windows_amd64_archive path: ./dist/${{ steps.make_dist.outputs.archive }} retention-days: 2 - name: Upload BN checksum artefact uses: actions/upload-artifact@v3 with: name: Windows_amd64_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_beacon_node.sha512sum retention-days: 2 - name: Upload VC checksum artefact uses: actions/upload-artifact@v3 with: name: Windows_amd64_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_validator_client.sha512sum retention-days: 2 build-macos-amd64: name: macOS AMD64 release asset runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Build project id: make_dist run: | make dist-macos cd dist ARCHIVE=$(echo nimbus-eth2_macOS_amd64_*.tar.gz) echo "::set-output name=archive::"${ARCHIVE} echo "::set-output name=archive_dir::"${ARCHIVE%.tar.gz} tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_beacon_node.sha512sum tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_validator_client.sha512sum - name: Upload archive artefact uses: actions/upload-artifact@v3 with: name: macOS_amd64_archive path: ./dist/${{ steps.make_dist.outputs.archive }} retention-days: 2 - name: Upload BN checksum artefact uses: actions/upload-artifact@v3 with: name: macOS_amd64_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_beacon_node.sha512sum retention-days: 2 - name: Upload VC checksum artefact uses: actions/upload-artifact@v3 with: name: macOS_amd64_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_validator_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-eth2_macOS_arm64_*.tar.gz) echo "::set-output name=archive::"${ARCHIVE} echo "::set-output name=archive_dir::"${ARCHIVE%.tar.gz} tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_beacon_node.sha512sum tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus_validator_client.sha512sum - name: Upload archive artefact uses: actions/upload-artifact@v3 with: name: macOS_arm64_archive path: ./dist/${{ steps.make_dist.outputs.archive }} retention-days: 2 - name: Upload BN checksum artefact uses: actions/upload-artifact@v3 with: name: macOS_arm64_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_beacon_node.sha512sum retention-days: 2 - name: Upload VC checksum artefact uses: actions/upload-artifact@v3 with: name: macOS_arm64_checksum path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus_validator_client.sha512sum retention-days: 2 prepare-release: name: Prepare release draft needs: [build-amd64, build-arm64, build-arm, build-win64, build-macos-amd64, build-macos-arm64] runs-on: ubuntu-latest steps: - name: Download artefacts uses: actions/download-artifact@v3 - 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 '# Linux ARM' >> release_notes.md cat Linux_arm_checksum/* >> release_notes.md echo '# Windows AMD64' >> release_notes.md cat Windows_amd64_checksum/* >> release_notes.md echo '# macOS AMD64' >> release_notes.md cat macOS_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_amd64_packages/* Linux_arm64_archive/* Linux_arm64_packages/* Linux_arm_archive/* Linux_arm_packages/* Windows_amd64_archive/* macOS_amd64_archive/* macOS_arm64_archive/* - name: Delete artefacts uses: geekyeggo/delete-artifact@v1 with: failOnError: false name: | Linux_amd64_archive Linux_amd64_checksum Linux_amd64_packages Linux_arm64_archive Linux_arm64_checksum Linux_arm64_packages Linux_arm_archive Linux_arm_checksum Linux_arm_packages Windows_amd64_archive Windows_amd64_checksum macOS_amd64_archive macOS_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 images run: | REFNAME="${{ github.ref }}" TAG="${REFNAME#refs/tags/}" docker manifest create \ statusim/nimbus-eth2:multiarch-${TAG} \ --amend statusim/nimbus-eth2:amd64-${TAG} \ --amend statusim/nimbus-eth2:arm64-${TAG} \ --amend statusim/nimbus-eth2:arm-${TAG} docker manifest push statusim/nimbus-eth2:multiarch-${TAG} docker manifest create \ statusim/nimbus-eth2:multiarch-latest \ --amend statusim/nimbus-eth2:amd64-latest \ --amend statusim/nimbus-eth2:arm64-latest \ --amend statusim/nimbus-eth2:arm-latest docker manifest push statusim/nimbus-eth2:multiarch-latest docker manifest create \ statusim/nimbus-validator-client:multiarch-${TAG} \ --amend statusim/nimbus-validator-client:amd64-${TAG} \ --amend statusim/nimbus-validator-client:arm64-${TAG} \ --amend statusim/nimbus-validator-client:arm-${TAG} docker manifest push statusim/nimbus-validator-client:multiarch-${TAG} docker manifest create \ statusim/nimbus-validator-client:multiarch-latest \ --amend statusim/nimbus-validator-client:amd64-latest \ --amend statusim/nimbus-validator-client:arm64-latest \ --amend statusim/nimbus-validator-client:arm-latest docker manifest push statusim/nimbus-validator-client:multiarch-latest