name: Manual Release & Publish
on:
workflow_dispatch:
inputs:
version:
description: 'Version to release (e.g. 1.2.3)'
required: true
type: string
permissions:
contents: write
pull-requests: write
jobs:
release:
name: Release
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Install cargo-edit
run: cargo install cargo-edit
- name: Bump Version in Cargo.toml
id: set_version
run: |
VERSION="${{ github.event.inputs.version }}"
echo "Setting version to: $VERSION"
# Bump the version using cargo-edit
cargo set-version $VERSION
# Output for later steps
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
- name: Get package name
id: package_name
run: |
PACKAGE_NAME=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].name')
echo "name=$PACKAGE_NAME" >> "$GITHUB_OUTPUT"
- name: Publish to Crates.io
run: |
cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }} --allow-dirty --color always
- name: Create Pull Request
id: cpr
uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.PERSONAL_TOKEN }}
commit-message: "chore: release v${{ steps.set_version.outputs.version }}"
committer: GitHub <noreply@github.com>
author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
branch: release/v${{ steps.set_version.outputs.version }}
base: main
delete-branch: true
title: "chore: release v${{ steps.set_version.outputs.version }}"
body: |
Automated release PR for version ${{ steps.set_version.outputs.version }}.
labels: |
automated
publish
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ steps.set_version.outputs.version }}
name: Release v${{ steps.set_version.outputs.version }}
body: "Release of version ${{ steps.set_version.outputs.version }}"
target_commitish: ${{ steps.cpr.outputs.pull-request-head-sha }}
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}