name: Cargo Build & Test
on:
push:
branches: ["main", "feature/*", "fix/*", "bugfix/*"]
pull_request:
branches: ["main"]
env:
CARGO_TERM_COLOR: always
jobs:
build_and_test:
name: Build & Test
runs-on: ubuntu-latest
strategy:
matrix:
toolchain:
- stable
- beta
- nightly
steps:
- uses: actions/checkout@v3
- run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }}
- run: cargo build --verbose
- run: cargo test --verbose
publish:
name: Publish to 'crates.io'
runs-on: ubuntu-latest
needs: build_and_test
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v3
- name: Fetch unshallow
run: git fetch --prune --tags --unshallow
- name: Install GitVersion
uses: gittools/actions/gitversion/setup@v0.9.7
with:
versionSpec: '5.x'
- name: Semantic Versioning
id: gitversion
uses: gittools/actions/gitversion/execute@v0.9.7
- name: Install Cargo Bump
run: cargo install cargo-bump
- name: Bump Package Version
run: cargo bump ${{ steps.gitversion.outputs.SemVer }}
- run: cargo build --release
- run: cargo package --allow-dirty
- name: Publish dry-run
run: cargo publish --allow-dirty --dry-run
- name: Publish
run: cargo publish --allow-dirty
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }}