add CI to publish to crates.io #1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release & Publish | |
on: | |
push: | |
branches: [main] | |
workflow_dispatch: | |
jobs: | |
ensure-doc: | |
name: Ensure documentation builds | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/[email protected] | |
- uses: IronCoreLabs/rust-toolchain@v1 | |
- uses: dtolnay/install@cargo-docs-rs | |
- run: cargo docs-rs | |
release: | |
name: Release | |
runs-on: ubuntu-latest | |
needs: ensure-doc | |
steps: | |
- uses: actions/[email protected] | |
- name: Retreive version from Cargo.toml | |
id: new-version | |
run: echo "version=$(grep -m1 version Cargo.toml | cut -d '"' -f2)" >> $GITHUB_OUTPUT | |
- name: Retreive version from Crates.io | |
id: old-version | |
run: | | |
VERSION=$(curl -s https://crates.io/api/v1/crates/${GITHUB_REPOSITORY#*/} | jq -r '.versions[0].num') | |
if [ "$VERSION" == "null" ]; then | |
echo "version=" >> $GITHUB_OUTPUT | |
else | |
echo "version=$VERSION" >> $GITHUB_OUTPUT | |
fi | |
- name: Compare versions | |
id: compare-versions | |
# if old-version is empty, then this is the first release | |
# else we compare the two versions | |
run: echo "should-release=$(if [ -z "${{ steps.old-version.outputs.version }}" ]; then echo true; else if [ "${{ steps.old-version.outputs.version }}" != "${{ steps.new-version.outputs.version }}" ]; then echo true; else echo false; fi; fi)" >> $GITHUB_OUTPUT | |
# if we are releasing, then can we install rust and publish to crates.io | |
- name: Install Rust | |
if: steps.compare-versions.outputs.should-release == 'true' | |
uses: IronCoreLabs/rust-toolchain@v1 | |
- name: Release | |
if: steps.compare-versions.outputs.should-release == 'true' | |
uses: katyo/publish-crates@v2 | |
with: | |
registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }} |