on: push: branches: - main tags: - "*" pull_request: name: CI jobs: lint: name: Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: toolchain: stable override: true # make sure all code has been formatted with rustfmt - run: rustup component add rustfmt - name: check rustfmt uses: actions-rs/cargo@v1 with: command: fmt args: -- --check --color always # run clippy to verify we have no warnings - run: rustup component add clippy - name: cargo fetch uses: actions-rs/cargo@v1 with: command: fetch - name: cargo clippy uses: actions-rs/cargo@v1 with: command: clippy args: --lib --tests -- -D warnings test: name: Test strategy: matrix: os: [ubuntu-latest, windows-latest, macOS-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: toolchain: stable override: true - name: cargo fetch uses: actions-rs/cargo@v1 with: command: fetch - name: cargo test uses: actions-rs/cargo@v1 with: command: test args: --release publish-check: name: Publish Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: toolchain: stable override: true - name: cargo fetch uses: actions-rs/cargo@v1 with: command: fetch - name: cargo publish check uses: actions-rs/cargo@v1 with: command: publish args: --dry-run # Remove this job if you don't publish the crate(s) from this repo # You must add a crates.io API token to your GH secrets called CRATES_IO_TOKEN publish: name: Publish needs: [test, publish-check] runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') steps: - uses: actions/checkout@v1 - uses: actions-rs/toolchain@v1 with: toolchain: stable override: true - name: cargo fetch uses: actions-rs/cargo@v1 with: command: fetch - name: cargo publish uses: actions-rs/cargo@v1 env: CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }} with: command: publish