@ -16,7 +16,7 @@ jobs:
validate:
runs-on : ubuntu-22.04
env:
RELEASE_NAME : "${{ inputs.tag }}"
RELEASE_VERSIO N : "${{ inputs.tag }}"
steps:
- name : Check default branch
run : |
@ -24,36 +24,36 @@ jobs:
echo "Default Branch: ${{ github.event.repository.default_branch }}"
if [[ ${{ github.ref_name }} != ${{ github.event.repository.default_branch }} ]]
then
echo "This workflow can only be run on default branch"
echo "This workflow can only be run on default branch. This is not an issue for hot fixes as code is checked out from the tag "
exit 1
fi
- name : Pre-process Release Name
id : pre_process_release_name
id : validate_release_version
run : |
# strip all whitespace
RELEASE_NAME ="${RELEASE_NAME //[[:space:]]/}"
if [[ ! "$RELEASE_NAME " =~ ^[0-9]+\.[0-9]+(\.[0-9]+)?(-.*)?$ ]]; then
RELEASE_VERSIO N="${RELEASE_VERSIO N//[[:space:]]/}"
if [[ ! "$RELEASE_VERSIO N" =~ ^[0-9]+\.[0-9]+(\.[0-9]+)?(-.*)?$ ]]; then
echo "Release name does not conform to a valid besu release format YY.M.v[-suffix], e.g. 24.8.0-RC1."
exit 1
fi
echo "release_name =$RELEASE_NAME " >> $GITHUB_OUTPUT # Set as output using the new syntax
echo "release_versio n=$RELEASE_VERSIO N" >> $GITHUB_OUTPUT # Set as output using the new syntax
# Perform a tag checkout to ensure tag is available
- name : Verify tag Exist
uses : actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
with :
ref : ${{ steps.pre_process_release_name.outputs.release_name }}
with:
ref : ${{ steps.validate_release_version.outputs.release_version }}
fetch-depth : 1
outputs:
release_name : ${{ steps.pre_process_release_name.outputs.release_name }}
release_versio n : ${{ steps.validate_release_version.outputs.release_version }}
build:
runs-on : ubuntu-22.04
needs : validate
env:
RELEASE_NAME : ${{ needs.validate.outputs.release_name }} # Use the output from the pre_process_release job
RELEASE_VERSIO N : ${{ needs.validate.outputs.release_versio n }} # Use the output from the pre_process_release job
outputs:
tarSha : ${{steps.hashes.outputs.tarSha}}
zipSha : ${{steps.hashes.outputs.zipSha}}
@ -61,22 +61,22 @@ jobs:
- name : Checkout tag
uses : actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
with:
ref : ${{ env.RELEASE_NAME }}
ref : ${{ env.RELEASE_VERSIO N }}
- name : Set up Java
uses : actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
with:
distribution : temurin
java-version : 21
- name : Setup gradle
uses : gradle/actions/setup-gradle@9e899d11ad247ec76be7a60bc1cf9d3abbb9e7f1
with:
cache-disabled : true
- name : Assemble release
run:
./gradlew -Prelease.releaseVersion=${{env.RELEASE_NAME }} -Pversion=${{env.RELEASE_NAME }} assemble
./gradlew -Prelease.releaseVersion=${{env.RELEASE_VERSIO N}} -Pversion=${{env.RELEASE_VERSIO N}} assemble
- name : Hashes
id : hashes
@ -86,35 +86,35 @@ jobs:
echo "tarSha=$(shasum -a 256 besu*.tar.gz)"
echo "zipSha=$(shasum -a 256 besu*.zip)" >> $GITHUB_OUTPUT
echo "tarSha=$(shasum -a 256 besu*.tar.gz)" >> $GITHUB_OUTPUT
shasum -a 256 besu-${{env.RELEASE_NAME }}.tar.gz > besu-${{env.RELEASE_NAME }}.tar.gz.sha256
shasum -a 256 besu-${{env.RELEASE_NAME }}.zip > besu-${{env.RELEASE_NAME }}.zip.sha256
shasum -a 256 besu-${{env.RELEASE_VERSIO N}}.tar.gz > besu-${{env.RELEASE_VERSIO N}}.tar.gz.sha256
shasum -a 256 besu-${{env.RELEASE_VERSIO N}}.zip > besu-${{env.RELEASE_VERSIO N}}.zip.sha256
- name : Upload tarball
uses : actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3
with:
path : 'build/distributions/besu-${{ env.RELEASE_NAME }}.tar.gz'
name : besu-${{ env.RELEASE_NAME }}.tar.gz
path : 'build/distributions/besu-${{ env.RELEASE_VERSIO N }}.tar.gz'
name : besu-${{ env.RELEASE_VERSIO N }}.tar.gz
compression-level : 0
- name : upload zipfile
uses : actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3
with:
path : 'build/distributions/besu-${{ env.RELEASE_NAME }}.zip'
name : besu-${{ env.RELEASE_NAME }}.zip
path : 'build/distributions/besu-${{ env.RELEASE_VERSIO N }}.zip'
name : besu-${{ env.RELEASE_VERSIO N }}.zip
compression-level : 0
- name : upload checksum zip
uses : actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3
with:
path : 'build/distributions/besu-${{ env.RELEASE_NAME }}.zip.sha256'
name : besu-${{ env.RELEASE_NAME }}.zip.sha256
path : 'build/distributions/besu-${{ env.RELEASE_VERSIO N }}.zip.sha256'
name : besu-${{ env.RELEASE_VERSIO N }}.zip.sha256
compression-level : 0
- name : upload checksum tar.gz
uses : actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3
with:
path : 'build/distributions/besu-${{ env.RELEASE_NAME }}.tar.gz.sha256'
name : besu-${{ env.RELEASE_NAME }}.tar.gz.sha256
path : 'build/distributions/besu-${{ env.RELEASE_VERSIO N }}.tar.gz.sha256'
name : besu-${{ env.RELEASE_VERSIO N }}.tar.gz.sha256
compression-level : 0
test-windows:
@ -127,7 +127,7 @@ jobs:
with:
distribution : temurin
java-version : 21
- name : Download zip
uses : actions/download-artifact@eaceaf801fd36c7dee90939fad912460b18a1ffe
with:
@ -153,7 +153,7 @@ jobs:
with:
distribution : temurin
java-version : 21
- name : Download tar.gz
uses : actions/download-artifact@eaceaf801fd36c7dee90939fad912460b18a1ffe
with:
@ -172,20 +172,20 @@ jobs:
runs-on : ubuntu-22.04
needs : [ test-linux, test-windows]
env:
RELEASE_NAME : ${{ needs.validate.outputs.release_name }} # Use the output from the pre_process_release job
RELEASE_VERSIO N : ${{ needs.validate.outputs.release_versio n }} # Use the output from the pre_process_release job
steps:
- name : Checkout Repo
uses : actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
with:
ref : ${{ env.RELEASE_NAME }}
ref : ${{ env.RELEASE_VERSIO N }}
- name : hadoLint
run : docker run --rm -i hadolint/hadolint < docker/Dockerfile
docker-publish:
needs : [ validate, docker-lint]
env:
RELEASE_NAME : ${{ needs.validate.outputs.release_name }} # Use the output from the pre_process_release job
RELEASE_VERSIO N : ${{ needs.validate.outputs.release_versio n }} # Use the output from the pre_process_release job
strategy:
fail-fast : false
matrix:
@ -198,7 +198,7 @@ jobs:
id : prep
run : |
platform=${{ matrix.platform }}
if [ "$platform" = 'ubuntu-22.04' ]; then
if [ "$platform" = 'ubuntu-22.04' ]; then
echo "PLATFORM_PAIR=linux-amd64" >> $GITHUB_OUTPUT
echo "ARCH=amd64" >> $GITHUB_OUTPUT
else
@ -209,7 +209,7 @@ jobs:
- name : Checkout Repo
uses : actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
with:
ref : ${{ env.RELEASE_NAME }}
ref : ${{ env.RELEASE_VERSIO N }}
- name : short sha
id : shortSha
@ -225,7 +225,7 @@ jobs:
uses : gradle/actions/setup-gradle@9e899d11ad247ec76be7a60bc1cf9d3abbb9e7f1
with:
cache-disabled : true
- name : install goss
run : |
mkdir -p docker/reports
@ -244,23 +244,23 @@ jobs:
architecture : ${{ steps.prep.outputs.ARCH }}
with:
cache-disabled : true
arguments : testDocker -PdockerOrgName=${{ env.registry }}/${{ secrets.DOCKER_ORG }} -Pversion=${{env.RELEASE_NAME }} -Prelease.releaseVersion=${{ env.RELEASE_NAME }}
arguments : testDocker -PdockerOrgName=${{ env.registry }}/${{ secrets.DOCKER_ORG }} -Pversion=${{env.RELEASE_VERSIO N}} -Prelease.releaseVersion=${{ env.RELEASE_VERSIO N }}
- name : publish
env:
architecture : ${{ steps.prep.outputs.ARCH }}
run : ./gradlew --no-daemon dockerUpload -PdockerOrgName=${{ env.registry }}/${{ secrets.DOCKER_ORG }} -Pversion=${{env.RELEASE_NAME }} -Prelease.releaseVersion=${{ env.RELEASE_NAME }}
run : ./gradlew --no-daemon dockerUpload -PdockerOrgName=${{ env.registry }}/${{ secrets.DOCKER_ORG }} -Pversion=${{env.RELEASE_VERSIO N}} -Prelease.releaseVersion=${{ env.RELEASE_VERSIO N }}
docker-manifest:
needs : [ validate, docker-publish]
runs-on : ubuntu-22.04
env:
RELEASE_NAME : ${{ needs.validate.outputs.release_name }} # Use the output from the pre_process_release job
RELEASE_VERSIO N : ${{ needs.validate.outputs.release_versio n }}
steps:
- name : Checkout Repo
uses : actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
with:
ref : ${{ env.RELEASE_NAME }}
ref : ${{ env.RELEASE_VERSIO N }}
- name : Set up Java
uses : actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
@ -281,24 +281,48 @@ jobs:
password : ${{ secrets.DOCKER_PASSWORD_RW }}
- name : multi-arch docker
run : ./gradlew manifestDocker -PdockerOrgName=${{ env.registry }}/${{ secrets.DOCKER_ORG }} -Pversion=${{env.RELEASE_NAME }} -Prelease.releaseVersion=${{ env.RELEASE_NAME }}
run : ./gradlew manifestDocker -PdockerOrgName=${{ env.registry }}/${{ secrets.DOCKER_ORG }} -Pversion=${{env.RELEASE_VERSIO N}} -Prelease.releaseVersion=${{ env.RELEASE_VERSIO N }}
docker-verify:
needs : [ validate,docker-manifest]
env:
RELEASE_NAME : ${{ needs.validate.outputs.release_name }} # Use the output from the pre_process_release job
runs-on : ubuntu-22.04
permissions:
contents : read
actions : write
CONTAINER_NAME : besu-check
RELEASE_VERSION : ${{ needs.validate.outputs.release_version }}
runs-on : ${{ matrix.combination.runner }}
timeout-minutes : 4
strategy:
matrix:
combination:
- tag : ${{ needs.validate.outputs.release_version }}
platform : ''
runner : ubuntu-22.04
- tag : ${{ needs.validate.outputs.release_version }}-amd64
platform : 'linux/amd64'
runner : ubuntu-22.04
- tag : ${{ needs.validate.outputs.release_version }}-arm64
platform : ''
runner : besu-arm64
steps:
- name : Checkout
uses : actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
with:
sparse-checkout : '.github/workflows/BesuContainerVerify.sh'
- name : Start container
run : |
PLATFORM_OPT=""
[ [ x${{ matrix.combination.platform }} != 'x' ]] && PLATFORM_OPT="--platform ${{ matrix.combination.platform }}"
docker run -d $PLATFORM_OPT --name ${{ env.CONTAINER_NAME }} ${{ secrets.DOCKER_ORG }}/besu:${{ matrix.combination.tag }}
- name : Trigger container verify
run : echo '{"version":"${{ env.RELEASE_NAME }}","verify-latest-version":"false"}' | gh workflow run container-verify.yml --json
- name : Verify besu container
run : bash .github/workflows/BesuContainerVerify.sh
env:
GH_TOKEN : ${{ github.token }}
TAG : ${{ matrix.combination.tag }}
VERSION : ${{ env.RELEASE_VERSION }}
CHECK_LATEST : false
- name : Stop container
run : docker stop ${{ env.CONTAINER_NAME }}
release-draft:
runs-on : ubuntu-22.04
@ -306,42 +330,42 @@ jobs:
permissions:
contents : write
env:
RELEASE_NAME : ${{ needs.validate.outputs.release_name }}
RELEASE_VERSIO N : ${{ needs.validate.outputs.release_version }}
steps:
- name : Checkout Repo
uses : actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
with:
ref : ${{ env.RELEASE_NAME }}
ref : ${{ env.RELEASE_VERSIO N }}
- name : Download Besu artifacts
uses : actions/download-artifact@eaceaf801fd36c7dee90939fad912460b18a1ffe
with:
pattern : besu-${{env.RELEASE_NAME }}*
pattern : besu-${{env.RELEASE_VERSIO N}}*
merge-multiple : true
- name : Draft release notes
run : |
echo "## ${{env.RELEASE_NAME }}" > draft-release-notes.md
echo "## ${{env.RELEASE_VERSIO N}}" > draft-release-notes.md
echo "## Upcoming Breaking Changes" >> draft-release-notes.md
echo "## Breaking Changes" >> draft-release-notes.md
echo "## Additions and Improvements" >> draft-release-notes.md
echo "## Bug fixes" >> draft-release-notes.md
echo "`$(cat besu-${{env.RELEASE_NAME }}.zip.sha256)`" >> draft-release-notes.md
echo "`$(cat besu-${{env.RELEASE_NAME }}.tar.gz.sha256)`" >> draft-release-notes.md
cat besu-${{env.RELEASE_NAME }}.zip.sha256 >> draft-release-notes.md
cat besu-${{env.RELEASE_NAME }}.tar.gz.sha256 >> draft-release-notes.md
echo "`$(cat besu-${{env.RELEASE_VERSIO N}}.zip.sha256)`" >> draft-release-notes.md
echo "`$(cat besu-${{env.RELEASE_VERSIO N}}.tar.gz.sha256)`" >> draft-release-notes.md
cat besu-${{env.RELEASE_VERSIO N}}.zip.sha256 >> draft-release-notes.md
cat besu-${{env.RELEASE_VERSIO N}}.tar.gz.sha256 >> draft-release-notes.md
- name : Draft release
run : |
gh release create \
--draft \
--title=${{env.RELEASE_NAME }} \
--title=${{env.RELEASE_VERSIO N}} \
--notes-file draft-release-notes.md \
--verify-tag ${{env.RELEASE_NAME }} \
besu-${{env.RELEASE_NAME }}.tar.gz \
besu-${{env.RELEASE_NAME }}.zip \
besu-${{env.RELEASE_NAME }}.zip.sha256 \
besu-${{env.RELEASE_NAME }}.tar.gz.sha256
--verify-tag ${{env.RELEASE_VERSIO N}} \
besu-${{env.RELEASE_VERSIO N}}.tar.gz \
besu-${{env.RELEASE_VERSIO N}}.zip \
besu-${{env.RELEASE_VERSIO N}}.zip.sha256 \
besu-${{env.RELEASE_VERSIO N}}.tar.gz.sha256
env:
GH_TOKEN : ${{ github.token }}
@ -349,12 +373,12 @@ jobs:
runs-on : ubuntu-22.04
needs : [ validate, test-linux, test-windows]
env:
RELEASE_NAME : ${{ needs.validate.outputs.release_name }}
RELEASE_VERSIO N : ${{ needs.validate.outputs.release_version }}
steps:
- name : checkout
uses : actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
with:
ref : ${{ env.RELEASE_NAME }}
ref : ${{ env.RELEASE_VERSIO N }}
- name : Set up Java
uses : actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
@ -371,4 +395,4 @@ jobs:
env:
ARTIFACTORY_USER : ${{ secrets.BESU_ARTIFACTORY_USER }}
ARTIFACTORY_KEY : ${{ secrets.BESU_ARTIFACTORY_TOKEN }}
run : ./gradlew -Prelease.releaseVersion=${{ env.RELEASE_NAME }} -Pversion=${{env.RELEASE_NAME }} artifactoryPublish
run : ./gradlew -Prelease.releaseVersion=${{ env.RELEASE_VERSIO N }} -Pversion=${{env.RELEASE_VERSIO N}} artifactoryPublish