name: Release
on:
workflow_dispatch:
jobs:
release:
name: Create release
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Generate token
id: app-token
uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 with:
app-id: ${{ secrets.SATURATE_CI_APP_ID }}
private-key: ${{ secrets.SATURATE_CI_PRIVATE_KEY }}
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with:
fetch-depth: 0
token: ${{ steps.app-token.outputs.token }}
- uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30
- name: Install cargo-changeset
run: cargo install cargo-changeset --version 0.1.7
- name: Configure git
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
- name: Check for pending changesets
run: |
status=$(cargo changeset status 2>&1)
if echo "$status" | grep -q "No pending changesets"; then
echo "No changesets to release"
exit 1
fi
echo "$status"
- name: Get current version
id: before
run: |
version=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')
echo "version=$version" >> $GITHUB_OUTPUT
- name: Release
id: release
env:
OLD_VERSION: ${{ steps.before.outputs.version }}
run: |
cargo changeset release --no-tags
version=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')
if [ -z "$version" ]; then
echo "Failed to extract version from Cargo.toml" >&2
exit 1
fi
if [ "$version" = "$OLD_VERSION" ]; then
echo "Version unchanged ($version) - only none-bump changesets. Nothing to release."
exit 1
fi
echo "version=$version" >> $GITHUB_OUTPUT
- name: Tag and push
env:
RELEASE_VERSION: ${{ steps.release.outputs.version }}
run: |
git tag "v${RELEASE_VERSION}"
git push origin main --tags
publish:
name: Publish to crates.io
needs: release
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with:
ref: main
- uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 - run: cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }}