name: Release
on:
push:
tags:
- 'v*.*.*'
env:
CARGO_TERM_COLOR: always
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo registry
uses: Swatinem/rust-cache@v2
- name: Check for tag version match
run: |
VERSION="${{ github.ref_name }}"
VERSION="${VERSION#v}"
CARGO_VERSION=$(grep '^version = ' Cargo.toml | head -1 | cut -d'"' -f2)
if [ "$VERSION" != "$CARGO_VERSION" ]; then
echo "Error: Tag version $VERSION does not match Cargo.toml version $CARGO_VERSION"
exit 1
fi
- name: Run tests
run: cargo test --all-features --verbose
- name: Build release
run: cargo build --release --verbose
- name: Package macOS binary
run: |
tar czf sqltool-macos.tar.gz -C target/release sqltool
echo "MACOS_SHA256=$(shasum -a 256 sqltool-macos.tar.gz | cut -d' ' -f1)" >> $GITHUB_ENV
- name: Package Linux binary
run: |
tar czf sqltool-linux.tar.gz -C target/release sqltool
echo "LINUX_SHA256=$(sha256sum sqltool-linux.tar.gz | cut -d' ' -f1)" >> $GITHUB_ENV
- name: Upload to GitHub Release
uses: softprops/action-gh-release@v2
with:
files: |
target/release/sqltool
sqltool-macos.tar.gz
sqltool-linux.tar.gz
checksums: |
SHA256 checksums.txt
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish to crates.io
uses: katyo/publish-crates@v2
with:
crates_token: ${{ secrets.CRATES_IO_TOKEN }}
publish-sdk-docs:
runs-on: ubuntu-latest
needs: release
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Generate documentation
run: cargo doc --all-features --no-deps --release
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./target/doc
publish_branch: gh-pages