diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f665af26a..2f9c0e001 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -98,200 +98,200 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # release: - # permissions: - # id-token: write - # contents: write - # attestations: write - # name: ${{ matrix.target }} (${{ matrix.runner }}) - # runs-on: ${{ matrix.runner }} - # timeout-minutes: 240 - # needs: prepare - # strategy: - # fail-fast: false - # matrix: - # include: - # # `runner`: GHA runner label - # # `target`: Rust build target triple - # # `platform` and `arch`: Used in tarball names - # # `svm`: target platform to use for the Solc binary: https://github.com/roynalnaruto/svm-rs/blob/84cbe0ac705becabdc13168bae28a45ad2299749/svm-builds/build.rs#L4-L24 - # - runner: ubuntu-24.04-github-hosted-16core - # target: x86_64-unknown-linux-gnu - # svm_target_platform: linux-amd64 - # platform: linux - # arch: amd64 - # - runner: ubuntu-24.04-github-hosted-16core - # target: aarch64-unknown-linux-gnu - # svm_target_platform: linux-aarch64 - # platform: linux - # arch: arm64 - # - runner: macos-latest - # target: x86_64-apple-darwin - # svm_target_platform: macosx-amd64 - # platform: darwin - # arch: amd64 - # - runner: macos-latest - # target: aarch64-apple-darwin - # svm_target_platform: macosx-aarch64 - # platform: darwin - # arch: arm64 - # steps: - # - uses: actions/checkout@v4 - # with: - # ref: ${{ inputs.tag || '' }} + release: + permissions: + id-token: write + contents: write + attestations: write + name: ${{ matrix.target }} (${{ matrix.runner }}) + runs-on: ${{ matrix.runner }} + timeout-minutes: 240 + needs: prepare + strategy: + fail-fast: false + matrix: + include: + # `runner`: GHA runner label + # `target`: Rust build target triple + # `platform` and `arch`: Used in tarball names + # `svm`: target platform to use for the Solc binary: https://github.com/roynalnaruto/svm-rs/blob/84cbe0ac705becabdc13168bae28a45ad2299749/svm-builds/build.rs#L4-L24 + - runner: ubuntu-24.04-github-hosted-16core + target: x86_64-unknown-linux-gnu + svm_target_platform: linux-amd64 + platform: linux + arch: amd64 + - runner: ubuntu-24.04-github-hosted-16core + target: aarch64-unknown-linux-gnu + svm_target_platform: linux-aarch64 + platform: linux + arch: arm64 + - runner: macos-latest + target: x86_64-apple-darwin + svm_target_platform: macosx-amd64 + platform: darwin + arch: amd64 + - runner: macos-latest + target: aarch64-apple-darwin + svm_target_platform: macosx-aarch64 + platform: darwin + arch: arm64 + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ inputs.tag || '' }} - # - uses: Swatinem/rust-cache@v2 - # with: - # key: ${{ matrix.target }} - # cache-on-failure: true + - uses: Swatinem/rust-cache@v2 + with: + key: ${{ matrix.target }} + cache-on-failure: true - # - name: Install required Rust targets - # run: rustup target add ${{ matrix.target }} + - name: Install required Rust targets + run: rustup target add ${{ matrix.target }} - # - uses: dtolnay/rust-toolchain@stable - # with: - # targets: ${{ matrix.target }} + - uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.target }} - # - name: Install cross v0.2.5 from source - # run: cargo install cross --git https://github.com/cross-rs/cross --tag v0.2.5 + - name: Install cross v0.2.5 from source + run: cargo install cross --git https://github.com/cross-rs/cross --tag v0.2.5 - # # We diverge from upstream and build with cross as we're building static binaries - # - name: Build binaries - # env: - # SVM_TARGET_PLATFORM: ${{ matrix.svm_target_platform }} - # shell: bash - # run: | - # set -eo pipefail - # target="${{ matrix.target }}" - # flags=() + # We diverge from upstream and build with cross as we're building static binaries + - name: Build binaries + env: + SVM_TARGET_PLATFORM: ${{ matrix.svm_target_platform }} + shell: bash + run: | + set -eo pipefail + target="${{ matrix.target }}" + flags=() - # # Disable asm-keccak, see https://github.com/alloy-rs/core/issues/711 - # # # Remove jemalloc, only keep `asm-keccak` if applicable - # # if [[ "$target" != *msvc* && "$target" != "aarch64-unknown-linux-gnu" ]]; then - # # flags+=(--features asm-keccak) - # # fi + # Disable asm-keccak, see https://github.com/alloy-rs/core/issues/711 + # # Remove jemalloc, only keep `asm-keccak` if applicable + # if [[ "$target" != *msvc* && "$target" != "aarch64-unknown-linux-gnu" ]]; then + # flags+=(--features asm-keccak) + # fi - # RUSTFLAGS='-C target-feature=+crt-static' OPENSSL_STATIC=1 cross build --release --bin forge --bin cast --target "$target" "${flags[@]}" + RUSTFLAGS='-C target-feature=+crt-static' OPENSSL_STATIC=1 cross build --release --bin forge --bin cast --target "$target" "${flags[@]}" - # bins=(cast forge) - # for name in "${bins[@]}"; do - # bin=./target/$target/release/$name - # file "$bin" || true - # ldd "$bin" || true - # $bin --version || true - # echo "${name}_bin_path=${bin}" >> $GITHUB_ENV - # done + bins=(cast forge) + for name in "${bins[@]}"; do + bin=./target/$target/release/$name + file "$bin" || true + ldd "$bin" || true + $bin --version || true + echo "${name}_bin_path=${bin}" >> $GITHUB_ENV + done - # - name: Archive binaries - # id: artifacts - # env: - # PLATFORM_NAME: ${{ matrix.platform }} - # TARGET: ${{ matrix.target }} - # ARCH: ${{ matrix.arch }} - # VERSION_NAME: ${{ needs.prepare.outputs.version_name }} - # shell: bash - # run: | - # if [ "$PLATFORM_NAME" == "linux" ]; then - # tar -czvf "foundry_zksync_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" -C ./target/${TARGET}/release forge cast - # echo "file_name=foundry_zksync_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" >> $GITHUB_OUTPUT - # elif [ "$PLATFORM_NAME" == "darwin" ]; then - # # We need to use gtar here otherwise the archive is corrupt. - # # See: https://github.com/actions/virtual-environments/issues/2619 - # gtar -czvf "foundry_zksync_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" -C ./target/${TARGET}/release forge cast - # echo "file_name=foundry_zksync_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" >> $GITHUB_OUTPUT - # fi + - name: Archive binaries + id: artifacts + env: + PLATFORM_NAME: ${{ matrix.platform }} + TARGET: ${{ matrix.target }} + ARCH: ${{ matrix.arch }} + VERSION_NAME: ${{ needs.prepare.outputs.version_name }} + shell: bash + run: | + if [ "$PLATFORM_NAME" == "linux" ]; then + tar -czvf "foundry_zksync_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" -C ./target/${TARGET}/release forge cast + echo "file_name=foundry_zksync_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" >> $GITHUB_OUTPUT + elif [ "$PLATFORM_NAME" == "darwin" ]; then + # We need to use gtar here otherwise the archive is corrupt. + # See: https://github.com/actions/virtual-environments/issues/2619 + gtar -czvf "foundry_zksync_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" -C ./target/${TARGET}/release forge cast + echo "file_name=foundry_zksync_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" >> $GITHUB_OUTPUT + fi - # - name: Build man page - # id: man - # if: matrix.target == 'x86_64-unknown-linux-gnu' - # env: - # PLATFORM_NAME: ${{ matrix.platform }} - # TARGET: ${{ matrix.target }} - # VERSION_NAME: ${{ needs.prepare.outputs.version_name }} - # shell: bash - # run: | - # sudo apt-get -y install help2man - # help2man -N ./target/${TARGET}/release/forge > forge.1 - # help2man -N ./target/${TARGET}/release/cast > cast.1 - # gzip forge.1 - # gzip cast.1 - # tar -czvf "foundry_man_${VERSION_NAME}.tar.gz" forge.1.gz cast.1.gz - # echo "foundry_man=foundry_man_${VERSION_NAME}.tar.gz" >> $GITHUB_OUTPUT + - name: Build man page + id: man + if: matrix.target == 'x86_64-unknown-linux-gnu' + env: + PLATFORM_NAME: ${{ matrix.platform }} + TARGET: ${{ matrix.target }} + VERSION_NAME: ${{ needs.prepare.outputs.version_name }} + shell: bash + run: | + sudo apt-get -y install help2man + help2man -N ./target/${TARGET}/release/forge > forge.1 + help2man -N ./target/${TARGET}/release/cast > cast.1 + gzip forge.1 + gzip cast.1 + tar -czvf "foundry_man_${VERSION_NAME}.tar.gz" forge.1.gz cast.1.gz + echo "foundry_man=foundry_man_${VERSION_NAME}.tar.gz" >> $GITHUB_OUTPUT - # # Creates the release for this specific version - # - name: Create release - # if: ${{ inputs.tag == '' }} - # uses: softprops/action-gh-release@v2 - # with: - # name: ${{ needs.prepare.outputs.release_name }} - # tag_name: ${{ needs.prepare.outputs.tag_name }} - # prerelease: ${{ needs.prepare.outputs.prerelease }} - # body: ${{ needs.prepare.outputs.changelog }} - # files: | - # ${{ steps.artifacts.outputs.file_name }} - # ${{ steps.man.outputs.foundry_man }} + # Creates the release for this specific version + - name: Create release + if: ${{ inputs.tag == '' }} + uses: softprops/action-gh-release@v2 + with: + name: ${{ needs.prepare.outputs.release_name }} + tag_name: ${{ needs.prepare.outputs.tag_name }} + prerelease: ${{ needs.prepare.outputs.prerelease }} + body: ${{ needs.prepare.outputs.changelog }} + files: | + ${{ steps.artifacts.outputs.file_name }} + ${{ steps.man.outputs.foundry_man }} - # - name: Update release-please release artifacts - # if: ${{ inputs.tag != '' }} - # uses: softprops/action-gh-release@v2 - # with: - # tag_name: ${{ inputs.tag }} - # files: | - # ${{ steps.artifacts.outputs.file_name }} - # ${{ steps.man.outputs.foundry_man }} + - name: Update release-please release artifacts + if: ${{ inputs.tag != '' }} + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ inputs.tag }} + files: | + ${{ steps.artifacts.outputs.file_name }} + ${{ steps.man.outputs.foundry_man }} - # - name: Binaries attestation - # uses: actions/attest-build-provenance@v2 - # with: - # subject-path: | - # ${{ env.cast_bin_path }} - # ${{ env.forge_bin_path }} + - name: Binaries attestation + uses: actions/attest-build-provenance@v2 + with: + subject-path: | + ${{ env.cast_bin_path }} + ${{ env.forge_bin_path }} - # # If this is a nightly release, it also updates the release - # # tagged `nightly` for compatibility with `foundryup` - # - name: Update nightly release - # if: ${{ env.IS_NIGHTLY == 'true' }} - # uses: softprops/action-gh-release@v2 - # with: - # name: "Nightly foundry-zksync" - # tag_name: "nightly" - # prerelease: true - # body: ${{ needs.prepare.outputs.changelog }} - # files: | - # ${{ steps.artifacts.outputs.file_name }} - # ${{ steps.man.outputs.foundry_man }} + # If this is a nightly release, it also updates the release + # tagged `nightly` for compatibility with `foundryup` + - name: Update nightly release + if: ${{ env.IS_NIGHTLY == 'true' }} + uses: softprops/action-gh-release@v2 + with: + name: "Nightly foundry-zksync" + tag_name: "nightly" + prerelease: true + body: ${{ needs.prepare.outputs.changelog }} + files: | + ${{ steps.artifacts.outputs.file_name }} + ${{ steps.man.outputs.foundry_man }} - # retry-on-failure: - # if: failure() && fromJSON(github.run_attempt) < 3 - # needs: [release] - # runs-on: ubuntu-latest - # steps: - # - env: - # GH_REPO: ${{ github.repository }} - # GH_TOKEN: ${{ github.token }} - # run: gh workflow run retry.yml -F run_id=${{ github.run_id }} + retry-on-failure: + if: failure() && fromJSON(github.run_attempt) < 3 + needs: [release] + runs-on: ubuntu-latest + steps: + - env: + GH_REPO: ${{ github.repository }} + GH_TOKEN: ${{ github.token }} + run: gh workflow run retry.yml -F run_id=${{ github.run_id }} - # cleanup: - # name: Release cleanup - # runs-on: ubuntu-latest - # timeout-minutes: 30 - # needs: release - # if: always() - # steps: - # - uses: actions/checkout@v4 + cleanup: + name: Release cleanup + runs-on: ubuntu-latest + timeout-minutes: 30 + needs: release + if: always() + steps: + - uses: actions/checkout@v4 - # # Moves the `nightly` tag to `HEAD` - # - name: Move nightly tag - # if: ${{ env.IS_NIGHTLY == 'true' }} - # uses: actions/github-script@v7 - # with: - # script: | - # const moveTag = require('./.github/scripts/move-tag.js') - # await moveTag({ github, context }, 'nightly') + # Moves the `nightly` tag to `HEAD` + - name: Move nightly tag + if: ${{ env.IS_NIGHTLY == 'true' }} + uses: actions/github-script@v7 + with: + script: | + const moveTag = require('./.github/scripts/move-tag.js') + await moveTag({ github, context }, 'nightly') - # - name: Delete old nightlies - # uses: actions/github-script@v7 - # with: - # script: | - # const prunePrereleases = require('./.github/scripts/prune-prereleases.js') - # await prunePrereleases({github, context}) + - name: Delete old nightlies + uses: actions/github-script@v7 + with: + script: | + const prunePrereleases = require('./.github/scripts/prune-prereleases.js') + await prunePrereleases({github, context})