name: Rust Deploy
on:
push:
tags:
- "v*.*.*"
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Verify crate version
id: verify_version
run: |
TAG_VERSION=${GITHUB_REF#refs/tags/v}
CRATE_VERSION=$(grep '^version' Cargo.toml | sed -E 's/version = "(.*)"/\1/')
if [ "$TAG_VERSION" != "$CRATE_VERSION" ]; then
echo "Error: Git tag version ($TAG_VERSION) does not match crate version ($CRATE_VERSION)."
exit 1
fi
- name: Run tests
run: cargo test --verbose
- name: Build crate
run: cargo build --release
- name: Build documentation
run: cargo doc --no-deps
- name: Publish to crates.io
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: cargo publish --verbose
- name: Create GitHub Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref_name }}
release_name: Release ${{ github.ref_name }}
body_path: releases/${{ github.ref_name }}.md
draft: false
prerelease: false