name: release on: schedule: - cron: "0 0 * * 0" workflow_dispatch: inputs: release_type: type: choice description: Release type options: - major - minor - patch - rc - beta - alpha permissions: contents: write jobs: 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/scripts/release-tag-from.js $current_version $RELEASE_TYPE) echo from $from_version to $current_version echo "::set-output name=release_version::$(echo $current_version)" 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 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' }}