language: rust
rust: nightly
sudo: false

jobs:
  include:
    - name: "Main"
      script:
        - |
          RUN_CLIPPY=true
          rustup component add clippy --toolchain=nightly || RUN_CLIPPY=false
        - cargo test --workspace --all-features
        - |
          if $RUN_CLIPPY; then
            CLIPPY_STATUS=0
            for package in maud_htmlescape maud_macros maud; do
              (cd $package && cargo clippy -- -D warnings) || CLIPPY_STATUS=$?
            done
            (exit $CLIPPY_STATUS)
          fi
    - name: "Stable"
      rust: stable
      script:
        # Skip `--all-features` because stable Rocket isn't released yet
        - cargo test --workspace
    - name: "Benchmarks"
      script:
        - (cd benchmarks && cargo test --benches --locked)
    - name: "Documentation"
      script:
        - (cd docs && make -j$(nproc))
      deploy:
        provider: pages
        skip_cleanup: true
        github_token: $GITHUB_TOKEN
        fqdn: maud.lambda.xyz
        local_dir: docs/site
        on:
          branch: master
    - name: "Format"
      before_script:
        - rustup component add rustfmt
      script:
        - cargo fmt -- --check
        - (cd benchmarks && cargo fmt -- --check)
        - (cd docs && cargo fmt -- --check)
        # trybuild harnesses are technically not part of the Cargo project, so
        # need to be checked separately
        - rustfmt --check maud/tests/warnings/*.rs