nimbus-eth1/.github/workflows/release.yml

273 lines
9.8 KiB
YAML

# 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.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.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.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.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.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.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-eth1_macOS_amd64_*.tar.gz)
echo "archive=${ARCHIVE}" >> $GITHUB_OUTPUT
echo "archive_dir=${ARCHIVE%.tar.gz}" >> $GITHUB_OUTPUT
tar -xzf ${ARCHIVE} ${ARCHIVE%.tar.gz}/build/nimbus.sha512sum
- name: Upload archive artefact
uses: actions/upload-artifact@v4
with:
name: macOS_amd64_archive
path: ./dist/${{ steps.make_dist.outputs.archive }}
retention-days: 2
- name: Upload checksum artefact
uses: actions/upload-artifact@v4
with:
name: macOS_amd64_checksum
path: ./dist/${{ steps.make_dist.outputs.archive_dir }}/build/nimbus.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.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.sha512sum
retention-days: 2
prepare-release:
name: Prepare release draft
needs: [build-amd64, build-arm64, build-win64, build-macos-amd64, 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 <<EOF
## Notes
## SHA512 checksums
\`\`\`text
EOF
echo '# Linux AMD64' >> 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 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_arm64_archive/*
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_arm64_archive
Linux_arm64_checksum
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 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