2020-07-29 11:45:51 +02:00
name : Build Release Suite
on :
push :
branches :
- stable
tags :
- v*
2020-09-28 17:07:36 +02:00
# Global vars
env :
AWS_REGION : "us-east-1"
2020-09-29 13:04:59 +02:00
AWS_S3_ARTIFACTS_BUCKET : "openethereum-releases"
2020-09-28 17:07:36 +02:00
2020-07-29 11:45:51 +02:00
jobs :
build :
name : Build Release
env :
SCCACHE_CACHE_SIZE : "1G"
SCCACHE_IDLE_TIMEOUT : 0
strategy :
matrix :
platform :
- ubuntu-20.04
- macos-latest
- windows-latest
toolchain :
- stable
runs-on : ${{ matrix.platform }}
steps :
- name : Checkout sources
uses : actions/checkout@master
- name : Install toolchain
uses : actions-rs/toolchain@v1
with :
toolchain : ${{ matrix.toolchain }}
profile : minimal
override : true
- name : Cache cargo registry
uses : actions/cache@v2
with :
path : ~/.cargo/registry
key : ${{ runner.os }}-cargo-registry-build-${{ hashFiles('**/Cargo.lock') }}
- name : Cache cargo index
uses : actions/cache@v2
with :
path : ~/.cargo/git
key : ${{ runner.os }}-cargo-git-build-${{ hashFiles('**/Cargo.lock') }}
- name : Cache cargo build
uses : actions/cache@v2
with :
path : target
key : ${{ runner.os }}-cargo-build-target-build-${{ hashFiles('**/Cargo.lock') }}
- name : Cache sccache linux
if : matrix.platform == 'ubuntu-20.04'
uses : actions/cache@v2
with :
path : "/home/runner/.cache/sccache"
key : ${{ runner.os }}-sccache-build-${{ hashFiles('**/Cargo.lock') }}
- name : Cache sccache MacOS
if : matrix.platform == 'macos-latest'
uses : actions/cache@v2
with :
path : "/Users/runner/Library/Caches/Mozilla.sccache"
key : ${{ runner.os }}-sccache-build-${{ hashFiles('**/Cargo.lock') }}
- name : Cache sccache Windows
if : matrix.platform == 'windows-latest'
uses : actions/cache@v2
with :
path : "C:\\Users\\runneradmin\\AppData\\Local\\Mozilla\\sccache\\cache"
key : ${{ runner.os }}-sccache-build-${{ hashFiles('**/Cargo.lock') }}
- name : Install sccache for ${{ matrix.platform }}
shell : pwsh
run : pwsh scripts/actions/install-sccache.ps1 ${{ runner.os}}
# ==============================
# Windows Build
# ==============================
- name : Install LLVM for Windows
if : matrix.platform == 'windows-latest'
run : choco install llvm
- name : Sccache statistics
run : sccache --show-stats
- name : Build OpenEthereum for Windows
if : matrix.platform == 'windows-latest'
run : sh scripts/actions/build-windows.sh ${{matrix.platform}}
- name : Upload Windows build
uses : actions/upload-artifact@v2
if : matrix.platform == 'windows-latest'
with :
name : windows-artifacts
path : artifacts
# ==============================
# Linux/Macos Build
# ==============================
- name : Build OpenEthereum for ${{matrix.platform}}
if : matrix.platform != 'windows-latest'
run : sh scripts/actions/build-linux.sh ${{matrix.platform}}
- name : Upload Linux build
uses : actions/upload-artifact@v2
if : matrix.platform == 'ubuntu-20.04'
with :
name : linux-artifacts
path : artifacts
- name : Upload MacOS build
uses : actions/upload-artifact@v2
if : matrix.platform == 'macos-latest'
with :
name : macos-artifacts
path : artifacts
# ==============================
# End builds
# ==============================
- name : Stop sccache
if : always()
run : sccache --stop-server
- name : Prepare build directory for cache
shell : bash
run : bash scripts/actions/clean-target.sh
zip-artifacts-creator :
name : Create zip artifacts
needs : build
runs-on : ubuntu-20.04
steps :
- name : Set env
run : echo ::set-env name=RELEASE_VERSION::${GITHUB_REF#refs/*/}
# ==============================
# Create ZIP files
# ==============================
- name : Download Windows artifacts
uses : actions/download-artifact@v2
with :
name : windows-artifacts
path : windows-artifacts
- name : Download Linux artifacts
uses : actions/download-artifact@v2
with :
name : linux-artifacts
path : linux-artifacts
- name : Download MacOS artifacts
uses : actions/download-artifact@v2
with :
name : macos-artifacts
path : macos-artifacts
- name : Display structure of downloaded files
run : ls
- name : Create zip Linux
id : create_zip_linux
run : |
cd linux-artifacts/
zip -rT openethereum-linux-${{ env.RELEASE_VERSION }}.zip *
ls openethereum-linux-${{ env.RELEASE_VERSION }}.zip
cd ..
mv linux-artifacts/openethereum-linux-${{ env.RELEASE_VERSION }}.zip .
echo "Setting outputs..."
echo ::set-output name=LINUX_ARTIFACT::openethereum-linux-${{ env.RELEASE_VERSION }}.zip
echo ::set-output name=LINUX_SHASUM::$(shasum -a 256 openethereum-linux-${{ env.RELEASE_VERSION }}.zip | awk '{print $1}')
- name : Create zip MacOS
id : create_zip_macos
run : |
cd macos-artifacts/
zip -rT openethereum-macos-${{ env.RELEASE_VERSION }}.zip *
ls openethereum-macos-${{ env.RELEASE_VERSION }}.zip
cd ..
mv macos-artifacts/openethereum-macos-${{ env.RELEASE_VERSION }}.zip .
echo "Setting outputs..."
echo ::set-output name=MACOS_ARTIFACT::openethereum-macos-${{ env.RELEASE_VERSION }}.zip
echo ::set-output name=MACOS_SHASUM::$(shasum -a 256 openethereum-macos-${{ env.RELEASE_VERSION }}.zip | awk '{print $1}')
- name : Create zip Windows
id : create_zip_windows
run : |
cd windows-artifacts/
zip -rT openethereum-windows-${{ env.RELEASE_VERSION }}.zip *
ls openethereum-windows-${{ env.RELEASE_VERSION }}.zip
cd ..
mv windows-artifacts/openethereum-windows-${{ env.RELEASE_VERSION }}.zip .
echo "Setting outputs..."
echo ::set-output name=WINDOWS_ARTIFACT::openethereum-windows-${{ env.RELEASE_VERSION }}.zip
echo ::set-output name=WINDOWS_SHASUM::$(shasum -a 256 openethereum-windows-${{ env.RELEASE_VERSION }}.zip | awk '{print $1}')
# =======================================================================
# Upload artifacts
# This is required to share artifacts between different jobs
# =======================================================================
- name : Upload artifacts
uses : actions/upload-artifact@v2
with :
name : openethereum-linux-${{ env.RELEASE_VERSION }}.zip
path : openethereum-linux-${{ env.RELEASE_VERSION }}.zip
- name : Upload artifacts
uses : actions/upload-artifact@v2
with :
name : openethereum-macos-${{ env.RELEASE_VERSION }}.zip
path : openethereum-macos-${{ env.RELEASE_VERSION }}.zip
- name : Upload artifacts
uses : actions/upload-artifact@v2
with :
name : openethereum-windows-${{ env.RELEASE_VERSION }}.zip
path : openethereum-windows-${{ env.RELEASE_VERSION }}.zip
# =======================================================================
# Upload artifacts to S3
# This is required by some software distribution systems which require
# artifacts to be downloadable, like Brew on MacOS.
# =======================================================================
- name : Configure AWS credentials
uses : aws-actions/configure-aws-credentials@v1
with :
aws-access-key-id : ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region : ${{ env.AWS_REGION }}
- name : Copy files to S3 with the AWS CLI
run : |
# Deploy zip artifacts to S3 bucket to a directory whose name is the tagged release version.
# Deploy macos binary artifact (if required, add more `aws s3 cp` commands to deploy specific OS versions)
2020-09-28 17:07:36 +02:00
aws s3 cp macos-artifacts/openethereum s3://${{ env.AWS_S3_ARTIFACTS_BUCKET }}/${{ env.RELEASE_VERSION }}/macos/ --region ${{ env.AWS_REGION }}
2020-07-29 11:45:51 +02:00
outputs :
linux-artifact : ${{ steps.create_zip_linux.outputs.LINUX_ARTIFACT }}
linux-shasum : ${{ steps.create_zip_linux.outputs.LINUX_SHASUM }}
macos-artifact : ${{ steps.create_zip_macos.outputs.MACOS_ARTIFACT }}
macos-shasum : ${{ steps.create_zip_macos.outputs.MACOS_SHASUM }}
windows-artifact : ${{ steps.create_zip_windows.outputs.WINDOWS_ARTIFACT }}
windows-shasum : ${{ steps.create_zip_windows.outputs.WINDOWS_SHASUM }}
draft-release :
name : Draft Release
needs : zip-artifacts-creator
runs-on : ubuntu-20.04
steps :
- name : Set env
run : echo ::set-env name=RELEASE_VERSION::${GITHUB_REF#refs/*/}
# ==============================
# Download artifacts
# ==============================
- name : Download artifacts
uses : actions/download-artifact@v2
with :
name : openethereum-linux-${{ env.RELEASE_VERSION }}.zip
- name : Download artifacts
uses : actions/download-artifact@v2
with :
name : openethereum-macos-${{ env.RELEASE_VERSION }}.zip
- name : Download artifacts
uses : actions/download-artifact@v2
with :
name : openethereum-windows-${{ env.RELEASE_VERSION }}.zip
- name : Display structure of downloaded files
run : ls
# ==============================
# Create release draft
# ==============================
- name : Create Release Draft
id : create_release_draft
uses : actions/create-release@v1
env :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
with :
tag_name : ${{ github.ref }}
release_name : OpenEthereum ${{ github.ref }}
body : |
This release contains <ADD_TEXT>
| System | Architecture | Binary | Sha256 Checksum |
|:---:|:---:|:---:|:---|
| <img src="https://gist.github.com/5chdn/1fce888fde1d773761f809b607757f76/raw/44c4f0fc63f1ea8e61a9513af5131ef65eaa6c75/apple.png" alt="Apple Icon by Pixel Perfect from https://www.flaticon.com/authors/pixel-perfect" style="width: 32px;"/> | x64 | [${{ needs.zip-artifacts-creator.outputs.macos-artifact }}](https://github.com/openethereum/openethereum/releases/download/${{ env.RELEASE_VERSION }}/${{ needs.zip-artifacts-creator.outputs.macos-artifact }}) | `${{ needs.zip-artifacts-creator.outputs.macos-shasum }}` |
| <img src="https://gist.github.com/5chdn/1fce888fde1d773761f809b607757f76/raw/44c4f0fc63f1ea8e61a9513af5131ef65eaa6c75/linux.png" alt="Linux Icon by Pixel Perfect from https://www.flaticon.com/authors/pixel-perfect" style="width: 32px;"/> | x64 | [${{ needs.zip-artifacts-creator.outputs.linux-artifact }}](https://github.com/openethereum/openethereum/releases/download/${{ env.RELEASE_VERSION }}/${{ needs.zip-artifacts-creator.outputs.linux-artifact }}) | `${{ needs.zip-artifacts-creator.outputs.linux-shasum }}` |
| <img src="https://gist.github.com/5chdn/1fce888fde1d773761f809b607757f76/raw/44c4f0fc63f1ea8e61a9513af5131ef65eaa6c75/windows.png" alt="Windows Icon by Pixel Perfect from https://www.flaticon.com/authors/pixel-perfect" style="width: 32px;"/> | x64 | [${{ needs.zip-artifacts-creator.outputs.windows-artifact }}](https://github.com/openethereum/openethereum/releases/download/${{ env.RELEASE_VERSION }}/${{ needs.zip-artifacts-creator.outputs.windows-artifact }}) | `${{ needs.zip-artifacts-creator.outputs.windows-shasum }}` |
| | | | |
| **System** | **Option** | - | **Resource** |
| <img src="https://gist.github.com/5chdn/1fce888fde1d773761f809b607757f76/raw/44c4f0fc63f1ea8e61a9513af5131ef65eaa6c75/settings.png" alt="Settings Icon by Pixel Perfect from https://www.flaticon.com/authors/pixel-perfect" style="width: 32px;"/> | Docker | - | [hub.docker.com/r/openethereum/openethereum](https://hub.docker.com/r/openethereum/openethereum) |
draft : true
prerelease : true
- name : Upload Release Asset - Linux
id : upload_release_asset_linux
uses : actions/upload-release-asset@v1.0.1
env :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
with :
upload_url : ${{ steps.create_release_draft.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
asset_path : ./openethereum-linux-${{ env.RELEASE_VERSION }}.zip
asset_name : openethereum-linux-${{ env.RELEASE_VERSION }}.zip
asset_content_type : application/zip
- name : Upload Release Asset - MacOS
id : upload_release_asset_macos
uses : actions/upload-release-asset@v1.0.1
env :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
with :
upload_url : ${{ steps.create_release_draft.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
asset_path : ./openethereum-macos-${{ env.RELEASE_VERSION }}.zip
asset_name : openethereum-macos-${{ env.RELEASE_VERSION }}.zip
asset_content_type : application/zip
- name : Upload Release Asset - Windows
id : upload_release_asset_windows
uses : actions/upload-release-asset@v1
env :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
with :
upload_url : ${{ steps.create_release_draft.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
asset_path : ./openethereum-windows-${{ env.RELEASE_VERSION }}.zip
asset_name : openethereum-windows-${{ env.RELEASE_VERSION }}.zip
asset_content_type : application/zip