language: rust
rust: nightly
sudo: false

jobs:
  include:
    - name: "Main"
      script:
        - |
          RUN_CLIPPY=true
          rustup component add clippy --toolchain=nightly || RUN_CLIPPY=false
        # As of right now, these need to be tested individually becuase `--workspace`
        # (which is implied by `workspace = true`) cannot be used with `--features`
        # This _may_ be resolved with the `--package` flag, however this requires
        # opting in to a `-Z` unstable feature as of time of commit.
        #
        # Follow https://github.com/rust-lang/cargo/issues/5364 for updates.
        - cargo test --manifest-path maud/Cargo.toml --features actix-web,iron,rocket
        - cargo test --manifest-path maud_htmlescape/Cargo.toml
        - cargo test --manifest-path maud_macros/Cargo.toml
        - |
          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: "Unstable"
      script:
        - cargo test --all --all-features
    - name: "Benchmarks"
      script:
        - (cd benchmarks && cargo test --benches --features unstable)
    - 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