# This workflow is borrowed from Lighthouse: https://github.com/sigp/lighthouse/blob/693886b94176faa4cb450f024696cb69cda2fe58/.github/workflows/release.yml name: release on: push: tags: - v* env: REPO_NAME: ${{ github.repository_owner }}/reth IMAGE_NAME: ${{ github.repository_owner }}/reth RUSTFLAGS: -D warnings CARGO_TERM_COLOR: always jobs: extract-version: name: extract version runs-on: ubuntu-latest steps: - name: Extract version run: echo "VERSION=$(echo ${GITHUB_REF#refs/tags/})" >> $GITHUB_OUTPUT id: extract_version outputs: VERSION: ${{ steps.extract_version.outputs.VERSION }} build: name: build release strategy: matrix: arch: [aarch64-unknown-linux-gnu, x86_64-unknown-linux-gnu, x86_64-apple-darwin, aarch64-apple-darwin, x86_64-pc-windows-gnu] include: - arch: aarch64-unknown-linux-gnu platform: ubuntu-latest profile: maxperf - arch: x86_64-unknown-linux-gnu platform: ubuntu-latest profile: maxperf - arch: x86_64-apple-darwin platform: macos-latest profile: maxperf - arch: aarch64-apple-darwin platform: macos-latest profile: maxperf - arch: x86_64-pc-windows-gnu platform: ubuntu-latest profile: maxperf runs-on: ${{ matrix.platform }} needs: extract-version steps: - name: Checkout sources uses: actions/checkout@v3 - name: Get latest version of stable Rust run: rustup update stable - name: Install target run: rustup target add ${{ matrix.arch }} - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true # ============================== # Apple M1 SDK setup # ============================== - name: Apple M1 setup if: ${{ matrix.job.target == 'aarch64-apple-darwin' }} run: | echo "SDKROOT=$(xcrun -sdk macosx --show-sdk-path)" >> $GITHUB_ENV echo "MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx --show-sdk-platform-version)" >> $GITHUB_ENV # ============================== # Builds # ============================== - name: Build reth for ${{ matrix.arch }} run: | cargo install cross env PROFILE=${{ matrix.profile }} make build-${{ matrix.arch }} - name: Move cross-compiled binary if: matrix.arch != 'x86_64-pc-windows-gnu' run: | mkdir artifacts mv target/${{ matrix.arch }}/${{ matrix.profile }}/reth ./artifacts - name: Move cross-compiled binary (Windows) if: matrix.arch == 'x86_64-pc-windows-gnu' run: | mkdir artifacts mv target/${{ matrix.arch }}/${{ matrix.profile }}/reth.exe ./artifacts # ============================== # Signing # ============================== - name: Configure GPG and create artifacts env: GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} run: | export GPG_TTY=$(tty) echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --batch --import cd artifacts tar -czf reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz reth* echo "$GPG_PASSPHRASE" | gpg --passphrase-fd 0 --pinentry-mode loopback --batch -ab reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz mv *tar.gz* .. shell: bash # ======================================================================= # Upload artifacts # This is required to share artifacts between different jobs # ======================================================================= - name: Upload artifact uses: actions/upload-artifact@v3 with: name: reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz path: reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz - name: Upload signature uses: actions/upload-artifact@v3 with: name: reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz.asc path: reth-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz.asc draft-release: name: draft release needs: [build, extract-version] runs-on: ubuntu-latest env: VERSION: ${{ needs.extract-version.outputs.VERSION }} permissions: # Required to post the release contents: write steps: # This is necessary for generating the changelog. It has to come before "Download Artifacts" or else it deletes the artifacts. - name: Checkout sources uses: actions/checkout@v3 with: fetch-depth: 0 # ============================== # Download artifacts # ============================== - name: Download artifacts uses: actions/download-artifact@v3 # ============================== # Create release draft # ============================== - name: Generate full changelog id: changelog run: | echo "CHANGELOG<> $GITHUB_OUTPUT echo "$(git log --pretty=format:"- %s" $(git describe --tags --abbrev=0 ${{ env.VERSION }}^)..${{ env.VERSION }})" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - name: Create release draft env: GITHUB_USER: ${{ github.repository_owner }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # The formatting here is borrowed from Lighthouse (which is borrowed from OpenEthereum): https://github.com/openethereum/openethereum/blob/main/.github/workflows/build.yml run: | body=$(cat <<- "ENDBODY" ## Testing Checklist (DELETE ME) - [ ] Run on testnet for 1-3 days. - [ ] Resync a mainnet node. - [ ] Ensure all CI checks pass. ## Release Checklist (DELETE ME) - [ ] Ensure all crates have had their versions bumped. - [ ] Write the summary. - [ ] Fill out the update priority. - [ ] Ensure all binaries have been added. - [ ] Prepare release posts (Twitter, ...). ## Summary Add a summary, including: - Critical bug fixes - New features - Any breaking changes (and what to expect) ## Update Priority This table provides priorities for which classes of users should update particular components. | User Class | Priority | |----------------------|-----------------| | Payload Builders | | | Non-Payload Builders | | *See [Update Priorities](https://paradigmxyz.github.io/reth/installation-priorities.html) more information about this table.* ## All Changes ${{ steps.changelog.outputs.CHANGELOG }} ## Binaries [See pre-built binaries documentation.](https://https://paradigmxyz.github.io/reth/installation/binaries.html) The binaries are signed with the PGP key: `A3AE 097C 8909 3A12 4049 DF1F 5391 A3C4 1005 30B4` | System | Architecture | Binary | PGP Signature | |:---:|:---:|:---:|:---| | | x86_64 | [reth-${{ env.VERSION }}-x86_64-unknown-linux-gnu.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/reth-${{ env.VERSION }}-x86_64-unknown-linux-gnu.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/reth-${{ env.VERSION }}-x86_64-unknown-linux-gnu.tar.gz.asc) | | | aarch64 | [reth-${{ env.VERSION }}-aarch64-unknown-linux-gnu.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/reth-${{ env.VERSION }}-aarch64-unknown-linux-gnu.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/reth-${{ env.VERSION }}-aarch64-unknown-linux-gnu.tar.gz.asc) | | | x86_64 | [reth-${{ env.VERSION }}-x86_64-pc-windows-gnu.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/reth-${{ env.VERSION }}-x86_64-pc-windows-gnu.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/reth-${{ env.VERSION }}-x86_64-pc-windows-gnu.tar.gz.asc) | | | x86_64 | [reth-${{ env.VERSION }}-x86_64-apple-darwin.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/reth-${{ env.VERSION }}-x86_64-apple-darwin.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/reth-${{ env.VERSION }}-x86_64-apple-darwin.tar.gz.asc) | | | aarch64 | [reth-${{ env.VERSION }}-aarch64-apple-darwin.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/reth-${{ env.VERSION }}-aarch64-apple-darwin.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/reth-${{ env.VERSION }}-aarch64-apple-darwin.tar.gz.asc) | | | | | | | **System** | **Option** | - | **Resource** | | | Docker | [${{ env.VERSION }}](https://github.com/paradigmxyz/reth/pkgs/container/reth/102974600?tag=${{ env.VERSION }}) | [${{ env.IMAGE_NAME }}](https://github.com/paradigmxyz/reth/pkgs/container/reth) | ENDBODY ) assets=() for asset in ./reth-*.tar.gz*; do assets+=("-a" "$asset/$asset") done tag_name="${{ env.VERSION }}" echo "$body" | hub release create --draft "${assets[@]}" -F "-" "$tag_name"