name: Prepare release
run-name: "Prepare release v${{ inputs.version }}"
on:
workflow_dispatch:
inputs:
version:
description: 'Version to release (e.g. 0.10.0)'
required: true
type: string
permissions:
contents: write
pull-requests: write
jobs:
prepare:
name: Prepare release PR
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 with:
toolchain: stable
- name: Validate version format
run: |
VERSION="${{ inputs.version }}"
if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Error: Version must be in format X.Y.Z"
exit 1
fi
- name: Install cargo-release
run: cargo install cargo-release
- name: Bump versions
run: |
cargo release version ${{ inputs.version }} --workspace --execute --no-confirm --allow-branch main
- name: Check compatibility
continue-on-error: true
uses: obi1kenobi/cargo-semver-checks-action@6b69fcf40e9b5fb17adeb57e4b6ecd020649a239
- name: Run tests
run: cargo test --all-features
- name: Create pull request
uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "chore(release): bump version to ${{ inputs.version }}"
branch: release/v${{ inputs.version }}
delete-branch: true
labels: release
title: "Release v${{ inputs.version }}"
body: |
Automated release preparation for version ${{ inputs.version }}
This PR updates:
- Version in Cargo.toml files
- Cargo.lock
After merging, the release workflow will automatically:
- Create and push git tag v${{ inputs.version }}
- Publish to crates.io
- Create GitHub release