Release 243/merge #78
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release | |
run-name: Release ${{ github.ref_name }} | |
on: | |
push: | |
branches: | |
- "main" | |
pull_request: | |
types: [opened, synchronize, reopened, ready_for_review, labeled] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
env: | |
#rust-musl-cross:x86_64-musl | |
RUST_MUSL_CROSS_IMAGE: messense/rust-musl-cross@sha256:68b86bc7cb2867259e6b233415a665ff4469c28b57763e78c3bfea1c68091561 | |
RUST_LOG: trace | |
jobs: | |
tag: | |
if: github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'release-test') | |
runs-on: ubuntu-24.04 | |
permissions: | |
contents: write | |
outputs: | |
TAG: ${{ steps.versions.outputs.TAG }} | |
PKG_VER: ${{ steps.versions.outputs.PKG_VER }} | |
RELEASE_NOTES: ${{ steps.versions.outputs.RELEASE_NOTES }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-tags: "true" | |
fetch-depth: 0 | |
- name: Versions | |
id: versions | |
run: | | |
export CURRENT_TAG=$(git describe --tags --abbrev=0 --exclude "llvm-*") | |
export PKG_VER=v$(cat Cargo.toml | grep -A 5 package] | grep version | cut -d '=' -f 2 | tr -d '"' | tr -d " ") | |
echo "Current tag $CURRENT_TAG" | |
echo "Package version $PKG_VER" | |
# | |
echo "PKG_VER=$PKG_VER" >> $GITHUB_OUTPUT | |
if [[ $CURRENT_TAG == $PKG_VER ]]; | |
then | |
echo "Tag is up to date. Nothing to do."; | |
export TAG=old; | |
else | |
echo "Tag was updated."; | |
export TAG=new; | |
fi | |
echo "TAG=$TAG" >> $GITHUB_OUTPUT | |
# Generating release notes early, in order to avoid checkout at the last step | |
export RELEASE_NOTES="$(sed '/^## '${PKG_VER}'/,/^## v/!d' CHANGELOG.md | sed -e '1d' -e '$d')" | |
echo "Release notes:" | |
echo "$RELEASE_NOTES" | |
echo 'RELEASE_NOTES<<EOF' >> $GITHUB_OUTPUT | |
echo "$RELEASE_NOTES" >> $GITHUB_OUTPUT | |
echo 'EOF' >> $GITHUB_OUTPUT | |
build-macos: | |
strategy: | |
matrix: | |
os: [macos-14, macos-13] | |
include: | |
- os: macos-13 | |
arch: x64 | |
- os: macos-14 | |
arch: arm64 | |
if: ${{ needs.tag.outputs.TAG == 'new' }} | |
runs-on: ${{ matrix.os }} | |
name: build-macos | |
needs: [tag] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: get llvm | |
uses: ./.github/actions/get-llvm | |
with: | |
releasePrefix: llvm- | |
artifactArch: macos-${{ matrix.arch }} | |
dir: ./ | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
with: | |
toolchain: stable | |
components: rust-src | |
target: wasm32-unknown-emscripten | |
rustflags: "" | |
- name: install macos deps | |
run: | | |
brew install ninja | |
- name: versions | |
run: | | |
rustup show | |
cargo --version | |
cmake --version | |
echo "bash:" && bash --version | |
echo "ninja:" && ninja --version | |
echo "clang:" && clang --version | |
- name: build revive | |
run: | | |
export LLVM_SYS_181_PREFIX=$PWD/target-llvm/gnu/target-final | |
make install-bin | |
cp ./target/release/resolc ./target/release/resolc-${{ matrix.arch }} | |
- name: check revive | |
run: | | |
mkdir solc | |
curl -sSLo solc/solc https://github.com/ethereum/solidity/releases/download/v0.8.28/solc-macos | |
chmod +x solc/solc | |
PATH=$PWD/solc:$PATH | |
result=$(./target/release/resolc-${{ matrix.arch }} --bin crates/integration/contracts/flipper.sol) | |
echo $result | |
if [[ $result == *'0x50564d'* ]]; then exit 0; else exit 1; fi | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: "revive-macos-${{ matrix.arch }}" | |
path: | | |
./target/release/resolc-${{ matrix.arch }} | |
retention-days: 1 | |
macos-universal-binary: | |
runs-on: macos-14 | |
needs: [build-macos] | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: revive-macos-* | |
path: revive-macos | |
- name: run lipo | |
run: | | |
lipo revive-macos/revive-macos-arm64/resolc-arm64 revive-macos/revive-macos-x64/resolc-x64 -create -output resolc-macos | |
chmod +x resolc-macos | |
- name: compress macos artifact | |
run: | | |
tar -czf resolc-macos.tar.gz ./resolc-macos | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: resolc-macos.tar.gz | |
path: | | |
resolc-macos.tar.gz | |
retention-days: 1 | |
build-linux-all: | |
if: ${{ needs.tag.outputs.TAG == 'new' }} | |
runs-on: parity-large | |
needs: [tag] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: install linux deps | |
run: | | |
sudo apt-get update && sudo apt-get install -y cmake ninja-build \ | |
curl git libssl-dev pkg-config clang lld musl | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
with: | |
toolchain: stable | |
components: rust-src | |
target: wasm32-unknown-emscripten | |
rustflags: "" | |
- name: versions | |
run: | | |
rustup show | |
cargo --version | |
cmake --version | |
echo "bash:" && bash --version | |
echo "ninja:" && ninja --version | |
echo "clang:" && clang --version | |
- name: get llvm musl | |
uses: ./.github/actions/get-llvm | |
with: | |
releasePrefix: llvm- | |
artifactArch: x86_64-linux-musl | |
dir: ./ | |
# Build revive | |
- name: build musl | |
run: | | |
mkdir resolc-out | |
docker run -v $PWD:/opt/revive $RUST_MUSL_CROSS_IMAGE /bin/bash -c " | |
cd /opt/revive | |
apt update && apt upgrade -y && apt install -y pkg-config | |
export LLVM_SYS_181_PREFIX=/opt/revive/target-llvm/musl/target-final | |
make install-bin | |
cp /root/.cargo/bin/resolc /opt/revive/resolc-out/resolc-static-linux | |
" | |
- name: check musl | |
run: | | |
mkdir solc | |
curl -sSLo solc/solc https://github.com/ethereum/solidity/releases/download/v0.8.28/solc-static-linux | |
chmod +x solc/solc | |
PATH=$PWD/solc:$PATH | |
result=$(./resolc-out/resolc-static-linux --bin crates/integration/contracts/flipper.sol) | |
echo $result | |
if [[ $result == *'0x50564d'* ]]; then exit 0; else exit 1; fi | |
- name: compress musl artifact | |
run: | | |
tar -czf $(pwd)/resolc-static-linux.tar.gz -C ./resolc-out resolc-static-linux | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: resolc-static-linux.tar.gz | |
path: | | |
resolc-static-linux.tar.gz | |
retention-days: 1 | |
- name: Set Up Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: "20" | |
- name: get llvm emscripten | |
uses: ./.github/actions/get-llvm | |
with: | |
artifactArch: emscripten | |
- name: install emsdk | |
uses: ./.github/actions/get-emsdk | |
- name: build wasm | |
run: | | |
export LLVM_SYS_181_PREFIX=$PWD/target-llvm/musl/target-final | |
export REVIVE_LLVM_TARGET_PREFIX=$PWD/target-llvm/emscripten/target-final | |
source emsdk/emsdk_env.sh | |
rustup target add wasm32-unknown-emscripten | |
make install-wasm | |
chmod -x ./target/wasm32-unknown-emscripten/release/resolc.wasm | |
- name: check wasm | |
run: | | |
curl -sSLo solc/soljson.js https://github.com/ethereum/solidity/releases/download/v0.8.28/soljson.js | |
node -e " | |
const soljson = require('solc/soljson'); | |
const createRevive = require('./target/wasm32-unknown-emscripten/release/resolc.js'); | |
const compiler = createRevive(); | |
compiler.soljson = soljson; | |
const standardJsonInput = | |
{ | |
language: 'Solidity', | |
sources: { | |
'MyContract.sol': { | |
content: 'pragma solidity ^0.8.0; contract MyContract { function greet() public pure returns (string memory) { return \'Hello\'; } }', | |
}, | |
}, | |
settings: { optimizer: { enabled: false } } | |
}; | |
compiler.writeToStdin(JSON.stringify(standardJsonInput)); | |
compiler.callMain(['--standard-json']); | |
// Collect output | |
const stdout = compiler.readFromStdout(); | |
const stderr = compiler.readFromStderr(); | |
if (stderr) { console.error(stderr); process.exit(1); } | |
let out = JSON.parse(stdout); | |
let bytecode = out.contracts['MyContract.sol']['MyContract'].evm.bytecode.object | |
console.log(bytecode); | |
if(!bytecode.startsWith('50564d')) { process.exit(1); } | |
" | |
- name: compress wasm artifact | |
run: | | |
tar -czf $(pwd)/resolc-wasm.tar.gz -C ./target/wasm32-unknown-emscripten/release/ \ | |
resolc.js \ | |
resolc.wasm \ | |
resolc_web.js | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: resolc-wasm.tar.gz | |
path: | | |
resolc-wasm.tar.gz | |
retention-days: 1 | |
create-release: | |
if: github.event_name != 'pull_request' | |
needs: [tag, build-linux-all, macos-universal-binary] | |
runs-on: ubuntu-24.04 | |
permissions: | |
contents: write | |
steps: | |
- name: Download revive-wasm | |
uses: actions/download-artifact@v4 | |
with: | |
name: resolc-wasm.tar.gz | |
path: resolc-wasm/ | |
- name: Download revive-linux | |
uses: actions/download-artifact@v4 | |
with: | |
name: resolc-static-linux.tar.gz | |
path: resolc-linux/ | |
- name: Download revive-macos | |
uses: actions/download-artifact@v4 | |
with: | |
name: resolc-macos.tar.gz | |
path: resolc-macos/ | |
- name: create-release | |
uses: softprops/action-gh-release@v2 | |
with: | |
body: | | |
${{ needs.tag.outputs.RELEASE_NOTES }} | |
# Note for macOS Users | |
The macOS binary is unsigned and it needs to be made runnable using `xattr -c resolc-macos`. | |
tag_name: ${{ needs.tag.outputs.PKG_VER }} | |
name: ${{ needs.tag.outputs.PKG_VER }} | |
draft: true | |
target_commitish: ${{ github.sha }} | |
files: | | |
./resolc-linux/resolc-static-linux.tar.gz | |
./resolc-macos/resolc-macos.tar.gz | |
./resolc-wasm/resolc-wasm.tar.gz | |