name: Rust on: push: paths: - "**.rs" - "Cargo.**" - ".github/workflows/rust.yml" pull_request: paths: - "**.rs" - "Cargo.**" - ".github/workflows/rust.yml" jobs: build-and-test: name: Build and Test runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] steps: - name: Checkout repository uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 - name: Test run: cargo test --verbose publish: name: Publish to crates.io needs: build-and-test # Only run on this on proper semver (vX.Y.Z) tags if: ${{ github.ref_type == 'tag' && startsWith(github.ref_name, 'v') }} runs-on: ubuntu-latest permissions: id-token: write steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions-rust-lang/setup-rust-toolchain@v1 - name: Publish run: cargo publish env: CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_TOKEN }}