chore: fix release github action (#1133) #11
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
# 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 }}/trin | |
IMAGE_NAME: ${{ github.repository_owner }}/trin | |
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-20.04 | |
profile: release | |
- arch: x86_64-unknown-linux-gnu | |
platform: ubuntu-20.04 | |
profile: release | |
- arch: x86_64-apple-darwin | |
platform: macos-latest | |
profile: release | |
- arch: aarch64-apple-darwin | |
platform: macos-latest | |
profile: release | |
- arch: x86_64-pc-windows-gnu | |
platform: ubuntu-20.04 | |
profile: release | |
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 trin for ${{ matrix.arch }} | |
run: | | |
cargo install cross --git https://github.com/cross-rs/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 }}/trin ./artifacts | |
- name: Move cross-compiled binary (Windows) | |
if: matrix.arch == 'x86_64-pc-windows-gnu' | |
run: | | |
mkdir artifacts | |
mv target/${{ matrix.arch }}/${{ matrix.profile }}/trin.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 trin-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz trin* | |
echo "$GPG_PASSPHRASE" | gpg --passphrase-fd 0 --pinentry-mode loopback --batch -ab trin-${{ 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: trin-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz | |
path: trin-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz | |
- name: Upload signature | |
uses: actions/upload-artifact@v3 | |
with: | |
name: trin-${{ needs.extract-version.outputs.VERSION }}-${{ matrix.arch }}.tar.gz.asc | |
path: trin-${{ 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<<EOF" >> $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" | |
<Release Name> | |
## Testing Checklist (DELETE ME) | |
- [ ] Ensure all CI checks pass. | |
## Release Checklist (DELETE ME) | |
- [ ] Ensure all crates have had their versions bumped. | |
- [ ] Write the summary. | |
- [ ] Ensure all binaries have been added. | |
- [ ] Prepare release posts (Discord, ...). | |
## Summary | |
Add a summary, including: | |
- Critical bug fixes | |
- New features | |
- Any breaking changes (and what to expect) | |
## All Changes | |
${{ steps.changelog.outputs.CHANGELOG }} | |
## Binaries | |
The binaries are signed with the PGP key: `A3AE 097C 8909 3A12 4049 DF1F 5391 A3C4 1005 30B4` | |
| System | Architecture | Binary | PGP Signature | | |
|:---:|:---:|:---:|:---| | |
| <img src="https://simpleicons.org/icons/linux.svg" style="width: 32px;"/> | x86_64 | [trin-${{ env.VERSION }}-x86_64-unknown-linux-gnu.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/trin-${{ env.VERSION }}-x86_64-unknown-linux-gnu.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/trin-${{ env.VERSION }}-x86_64-unknown-linux-gnu.tar.gz.asc) | | |
| <img src="https://simpleicons.org/icons/linux.svg" style="width: 32px;"/> | aarch64 | [trin-${{ env.VERSION }}-aarch64-unknown-linux-gnu.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/trin-${{ env.VERSION }}-aarch64-unknown-linux-gnu.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/trin-${{ env.VERSION }}-aarch64-unknown-linux-gnu.tar.gz.asc) | | |
| <img src="https://simpleicons.org/icons/windows.svg" style="width: 32px;"/> | x86_64 | [trin-${{ env.VERSION }}-x86_64-pc-windows-gnu.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/trin-${{ env.VERSION }}-x86_64-pc-windows-gnu.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/trin-${{ env.VERSION }}-x86_64-pc-windows-gnu.tar.gz.asc) | | |
| <img src="https://simpleicons.org/icons/apple.svg" style="width: 32px;"/> | x86_64 | [trin-${{ env.VERSION }}-x86_64-apple-darwin.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/trin-${{ env.VERSION }}-x86_64-apple-darwin.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/trin-${{ env.VERSION }}-x86_64-apple-darwin.tar.gz.asc) | | |
| <img src="https://simpleicons.org/icons/apple.svg" style="width: 32px;"/> | aarch64 | [trin-${{ env.VERSION }}-aarch64-apple-darwin.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/trin-${{ env.VERSION }}-aarch64-apple-darwin.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/trin-${{ env.VERSION }}-aarch64-apple-darwin.tar.gz.asc) | | |
| | | | | | |
| **System** | **Option** | - | **Resource** | | |
| <img src="https://simpleicons.org/icons/docker.svg" style="width: 32px;"/> | Docker | [${{ env.VERSION }}](https://github.com/ethereum/trin/pkgs/container/trin/102974600?tag=${{ env.VERSION }}) | [${{ env.IMAGE_NAME }}](https://github.com/ethereum/trin/pkgs/container/trin) | | |
ENDBODY | |
) | |
assets=() | |
for asset in ./trin-*.tar.gz*; do | |
assets+=("-a" "$asset/$asset") | |
done | |
tag_name="${{ env.VERSION }}" | |
echo "$body" | gh release create --draft "${assets[@]}" -F "-" "$tag_name" |