name: Submit
on:
workflow_dispatch:
inputs:
version_bump:
description: Version bump type
required: true
type: choice
options:
- patch
- minor
- major
env:
CARGO_TERM_COLOR: always
jobs:
version-bump:
name: Version Bump
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: write
outputs:
new_version: ${{ steps.bump.outputs.new_version }}
steps:
- uses: actions/checkout@v6
with:
token: ${{ secrets.GITHUB_TOKEN }}
- uses: dtolnay/rust-toolchain@stable
- id: bump
run: |
CURRENT_VERSION=$(cargo metadata --format-version=1 --no-deps | jq -r '.packages[0].version')
echo "Current version: $CURRENT_VERSION"
IFS='.' read -r major minor patch <<< "$CURRENT_VERSION"
case "${{ github.event.inputs.version_bump }}" in
major)
major=$((major + 1))
minor=0
patch=0
;;
minor)
minor=$((minor + 1))
patch=0
;;
patch)
patch=$((patch + 1))
;;
esac
NEW_VERSION="${major}.${minor}.${patch}"
echo "New version: $NEW_VERSION"
echo "new_version=$NEW_VERSION" >> "$GITHUB_OUTPUT"
- run: |
sed -i "s/^version = \".*\"/version = \"${{ steps.bump.outputs.new_version }}\"/" Cargo.toml
cargo check
- run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add Cargo.toml Cargo.lock
git commit -m "bump version to ${{ steps.bump.outputs.new_version }}"
git tag "v${{ steps.bump.outputs.new_version }}"
git push origin HEAD:${{ github.ref_name }}
git push origin "v${{ steps.bump.outputs.new_version }}"
publish-crates:
name: Publish to crates.io
runs-on: ubuntu-latest
timeout-minutes: 15
needs: [version-bump]
permissions:
id-token: write
environment:
name: crates.io
url: https://crates.io/crates/chrome-devtools
steps:
- uses: actions/checkout@v6
with:
ref: v${{ needs.version-bump.outputs.new_version }}
- uses: dtolnay/rust-toolchain@stable
- uses: actions/cache@v5
with:
path: |
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-publish-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-publish-
${{ runner.os }}-cargo-
- run: cargo publish --dry-run
- uses: rust-lang/crates-io-auth-action@v1.0.4
id: auth
- run: cargo publish
env:
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}