canvas-lms-api 0.7.0

Rust client for the Instructure Canvas LMS REST API
Documentation
name: CI

on:
  push:
    branches: [main]
    tags: ["v*"]
  pull_request:

env:
  CARGO_TERM_COLOR: always
  RUSTDOCFLAGS: "-D warnings"

jobs:
  test:
    name: Test (${{ matrix.features }})
    runs-on: ubuntu-latest
    strategy:
      matrix:
        features:
          - ""
          - "--features full"
          - "--no-default-features --features blocking"
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
        continue-on-error: true
      - run: cargo test ${{ matrix.features }}

  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy
      - uses: Swatinem/rust-cache@v2
        continue-on-error: true
      - run: cargo fmt --check
      - run: cargo clippy -- -D warnings
      - run: cargo clippy --features full -- -D warnings

  docs:
    name: Docs
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
        continue-on-error: true
      - run: cargo doc --no-deps --features full

  msrv:
    name: MSRV (1.86)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@1.86
      - uses: Swatinem/rust-cache@v2
        continue-on-error: true
      - run: cargo check --features full

  publish:
    name: Publish to crates.io
    runs-on: ubuntu-latest
    needs: [test, lint, docs, msrv]
    if: startsWith(github.ref, 'refs/tags/v')
    environment: crates-io
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - name: Publish canvas-lms-api-derive
        run: |
          set +e
          OUTPUT=$(cargo publish --manifest-path canvas-lms-api-derive/Cargo.toml 2>&1)
          EXIT=$?
          echo "$OUTPUT"
          if [ $EXIT -ne 0 ]; then
            echo "$OUTPUT" | grep -q "already exists" || exit $EXIT
            echo "Already published, skipping."
          fi
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
      - name: Wait for derive crate to be indexed
        run: sleep 30
      - name: Publish canvas-lms-api
        run: cargo publish
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}