2022-05-13 20:10:05 +00:00
|
|
|
name: Release
|
|
|
|
|
|
|
|
on:
|
2022-09-28 18:58:26 +00:00
|
|
|
schedule:
|
|
|
|
- cron: "0 0 * * 0"
|
2022-05-13 20:10:05 +00:00
|
|
|
|
2022-09-28 18:58:26 +00:00
|
|
|
workflow_dispatch:
|
|
|
|
inputs:
|
|
|
|
release_type:
|
|
|
|
type: choice
|
|
|
|
description: Release type
|
|
|
|
options:
|
|
|
|
- major
|
|
|
|
- minor
|
|
|
|
- patch
|
|
|
|
- rc
|
|
|
|
- beta
|
|
|
|
- alpha
|
2022-05-13 20:10:05 +00:00
|
|
|
|
|
|
|
permissions:
|
2022-09-28 18:58:26 +00:00
|
|
|
contents: write
|
2022-05-13 20:10:05 +00:00
|
|
|
|
|
|
|
jobs:
|
2022-09-28 18:58:26 +00:00
|
|
|
release:
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
env:
|
|
|
|
CARGO_TOKEN: ${{ secrets.CARGO_TOKEN }}
|
|
|
|
RELEASE_TYPE: ${{ github.event.inputs.release_type }}
|
|
|
|
steps:
|
|
|
|
- name: Checkout sources
|
|
|
|
uses: actions/checkout@v3
|
|
|
|
with:
|
|
|
|
fetch-depth: 0
|
|
|
|
- name: Configure git
|
|
|
|
run: |
|
|
|
|
git config user.name github-actions
|
|
|
|
git config user.email github-actions@github.com
|
|
|
|
- name: Rust stable
|
|
|
|
uses: actions-rs/toolchain@v1
|
|
|
|
with:
|
|
|
|
profile: minimal
|
|
|
|
toolchain: stable
|
|
|
|
- uses: Swatinem/rust-cache@v1
|
|
|
|
with:
|
|
|
|
cache-on-failure: true
|
|
|
|
- name: Install cargo-release
|
|
|
|
uses: actions-rs/install@v0.1
|
|
|
|
with:
|
|
|
|
crate: cargo-release
|
|
|
|
version: latest
|
|
|
|
- name: Cargo login
|
|
|
|
run: |
|
|
|
|
cargo login $CARGO_TOKEN
|
|
|
|
- name: Dry-run cargo release
|
|
|
|
run: |
|
|
|
|
cargo release --workspace ${RELEASE_TYPE:-alpha} --exclude ethers-wasm
|
|
|
|
- name: Publish release
|
|
|
|
run: |
|
|
|
|
cargo release --workspace ${RELEASE_TYPE:-alpha} --exclude ethers-wasm --execute --no-confirm
|
|
|
|
- name: Setup node
|
|
|
|
uses: actions/setup-node@v3
|
|
|
|
with:
|
|
|
|
node-version: 14
|
|
|
|
- run: |
|
|
|
|
npm i semver
|
|
|
|
- name: Install git-cliff
|
|
|
|
uses: actions-rs/install@v0.1
|
|
|
|
with:
|
|
|
|
crate: git-cliff
|
|
|
|
version: latest
|
|
|
|
- name: Publish changelog
|
|
|
|
id: changelog
|
|
|
|
run: |
|
|
|
|
current_version=$(git tag --contains HEAD -l "v*" | head -1)
|
|
|
|
from_version=$(node .github/workflows/release-tag-from.js $current_version $RELEASE_TYPE)
|
|
|
|
echo from $from_version to $current_version
|
2022-05-13 20:10:05 +00:00
|
|
|
|
2022-09-28 18:58:26 +00:00
|
|
|
echo "::set-output name=release_version::$(echo $current_version)"
|
2022-05-13 20:10:05 +00:00
|
|
|
|
2022-09-28 18:58:26 +00:00
|
|
|
if git rev-parse "$from_version" >/dev/null 2>&1; then
|
|
|
|
echo "tag exists, can generate changelog";
|
|
|
|
else
|
|
|
|
echo "tag does not exist, cannot generate changelog, publish github release manually"
|
|
|
|
exit 0
|
|
|
|
fi
|
2022-05-13 20:10:05 +00:00
|
|
|
|
2022-09-28 18:58:26 +00:00
|
|
|
git cliff $from_version..$current_version > GENERATED_CHANGELOG.md
|
|
|
|
cat GENERATED_CHANGELOG.md
|
|
|
|
- name: Create GitHub release
|
|
|
|
id: release
|
|
|
|
uses: actions/create-release@v1
|
|
|
|
env:
|
|
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
RELEASE_VERSION: ${{ steps.changelog.outputs.release_version }}
|
|
|
|
with:
|
|
|
|
tag_name: ${{ env.RELEASE_VERSION }}
|
|
|
|
release_name: ${{ env.RELEASE_VERSION }}
|
|
|
|
body_path: GENERATED_CHANGELOG.md
|
|
|
|
prerelease: ${{ env.RELEASE_TYPE == 'alpha' }}
|