name: Release
on:
workflow_dispatch:
inputs:
type:
description: "version bump type"
default: "patch"
required: true
type: choice
options:
- patch
- minor
- major
prerelease:
description: "prerelease"
default: false
required: true
type: boolean
env:
CARGO_TERM_COLOR: always
jobs:
bump:
runs-on: ubuntu-latest
permissions:
contents: write
outputs:
tag: ${{steps.tag.outputs.tag}}
steps:
- uses: actions/checkout@v4
- name: Config git
run: git config user.name github_actions && git config user.email nil
- name: Install cargo-workspaces
run: cargo install cargo-workspaces
- name: BUMP!
run: cargo ws version ${{inputs.type}} --no-individual-tags -y
- name: Export version
run: echo "tag=$(git describe --tags --abbrev=0)" >> $GITHUB_OUTPUT
id: tag
make-release:
runs-on: ubuntu-latest
needs: bump
permissions:
contents: write
steps:
- name: Create release
id: create_release
uses: softprops/action-gh-release@v3.0.2
with:
tag_name: ${{ needs.bump.outputs.tag }}
prerelease: ${{ inputs.prerelease }}
draft: true
binary:
runs-on: ${{matrix.os}}
needs: [bump, make-release]
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
include:
- os: ubuntu-latest
filestub: starbloom-linux
filesuffix:
- os: macos-latest
filestub: macos
filesuffix:
- os: windows-latest
filestub: windows
filesuffix: ".exe"
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- name: Get latest commit
run: git pull
- name: Build binary
run: cargo build --release --features native_release
- name: Upload binary
uses: softprops/action-gh-release@v3.0.2
with:
tag_name: ${{ needs.bump.outputs.tag }}
files: ./target/release/starbloom${{matrix.filesuffix}}
draft: true
publish-release:
runs-on: ubuntu-latest
needs: [binary, bump]
steps:
- uses: actions/checkout@v4
- name: Install git-cliff
run: npm i -g git-cliff
- name: Write changelog
run: git-cliff -o CHANGELOG.md
- name: Store changelog
run: echo "changelog=$(cat CHANGELOG.md)" >> $GITHUB_OUTPUT
id: changelog
- name: Publish release
uses: softprops/action-gh-release@v3.0.2
with:
tag_name: ${{ needs.bump.outputs.tag }}
body: ${{steps.changelog.outputs.changelog}}
publish:
runs-on: ubuntu-latest
needs: bump
permissions:
id-token: write
steps:
- uses: actions/checkout@v4
- name: Get latest commit
run: git pull
- name: Authenticate to crates.io
uses: rust-lang/crates-io-auth-action@v1.0.5
id: auth
- name: Publish to crates.io
run: cargo publish --workspace
env:
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}