language: rust
rust: nightly
services: docker

matrix:
  include:
    # Linux
    - name: "aarch64-unknown-linux-gnu"
      env: TARGET=aarch64-unknown-linux-gnu NO_JEMALLOC_TESTS=1
    - name: "arm-unknown-linux-gnueabi"
      env: TARGET=arm-unknown-linux-gnueabi NO_JEMALLOC_TESTS=1
    - name: "armv7-unknown-linux-gnueabihf"
      env: TARGET=armv7-unknown-linux-gnueabihf NO_JEMALLOC_TESTS=1
    - name: "i586-unknown-linux-gnu"
      env: TARGET=i586-unknown-linux-gnu
      addons: &gcc_multilib
        apt:
          packages:
            - gcc-multilib
    - name: "i686-unknown-linux-gnu (nightly)"
      env: TARGET=i686-unknown-linux-gnu
      addons: *gcc_multilib
    - name: "i686-unknown-linux-gnu (beta)"
      env: TARGET=i686-unknown-linux-gnu
      addons: *gcc_multilib
      rust: beta
    - name: "i686-unknown-linux-gnu (stable)"
      env: TARGET=i686-unknown-linux-gnu
      addons: *gcc_multilib
      rust: stable
    # FIXME: blocked onhttps://github.com/jemalloc/jemalloc/issues/1464
    # - name: "i686-unknown-linux-musl"
    #   env: TARGET=i686-unknown-linux-musl NOBGT=1 NO_JEMALLOC_TESTS=1
    - name: "mips-unknown-linux-gnu"
      env: TARGET=mips-unknown-linux-gnu NO_JEMALLOC_TESTS=1
    - name: "mips64-unknown-linux-gnuabi64"
      env: TARGET=mips64-unknown-linux-gnuabi64 NO_JEMALLOC_TESTS=1
    - name: "mips64el-unknown-linux-gnuabi64"
      env: TARGET=mips64el-unknown-linux-gnuabi64 NO_JEMALLOC_TESTS=1
    - name: "mipsel-unknown-linux-gnu"
      env: TARGET=mipsel-unknown-linux-gnu NO_JEMALLOC_TESTS=1
    - name: "powerpc-unknown-linux-gnu"
      env: TARGET=powerpc-unknown-linux-gnu NO_JEMALLOC_TESTS=1
    - name: "powerpc64-unknown-linux-gnu"
      env: TARGET=powerpc64-unknown-linux-gnu NO_JEMALLOC_TESTS=1
    - name: "powerpc64le-unknown-linux-gnu"
      env: TARGET=powerpc64le-unknown-linux-gnu NO_JEMALLOC_TESTS=1
    - name: "x86_64-unknown-linux-gnu (nightly)"
      env: TARGET=x86_64-unknown-linux-gnu VALGRIND=1 JEMALLOC_SYS_VERIFY_CONFIGURE=1
      install: rustup component add llvm-tools-preview
      addons: &valgrind
        apt:
          packages:
            - valgrind
            - autoconf
    - name: "x86_64-unknown-linux-gnu (nightly - jemalloc's dev branch)"
      env: TARGET=x86_64-unknown-linux-gnu VALGRIND=1 JEMALLOC_SYS_GIT_DEV_BRANCH=1
      install: rustup component add llvm-tools-preview
      addons: *valgrind
    - name: "x86_64-unknown-linux-gnu (beta)"
      env: TARGET=x86_64-unknown-linux-gnu VALGRIND=1
      rust: beta
      install: rustup component add llvm-tools-preview
      addons: *valgrind
    - name: "x86_64-unknown-linux-gnu (stable)"
      env: TARGET=x86_64-unknown-linux-gnu VALGRIND=1
      rust: stable
      install: rustup component add llvm-tools-preview
      addons: *valgrind
    - name: "Benchmarks using x86_64-unknown-linux-gnu (nightly)"
      env: TARGET=x86_64-unknown-linux-gnu
      install: true
      script:
        - cargo test --bench roundtrip
        - cargo test --features=alloc_trait --bench roundtrip
    - name: "x86_64-unknown-linux-musl"
      env: TARGET=x86_64-unknown-linux-musl NOBGT=1 NO_JEMALLOC_TESTS=1

    # Android
    - name: "aarch64-linux-android"
      env: TARGET=aarch64-linux-android NO_JEMALLOC_TESTS=1
    - name: "x86_64-linux-android"
      env: TARGET=x86_64-linux-android

    # OSX
    # FIXME: cannot jemalloc tests fail due to:
    # https://github.com/jemalloc/jemalloc/issues/1320
    # https://github.com/gnzlbg/jemallocator/issues/85
    - name: "i686-apple-darwin (nightly)"
      env: TARGET=i686-apple-darwin NO_JEMALLOC_TESTS=1
      os: osx
      osx_image: xcode10
    - name: "i686-apple-darwin (beta)"
      env: TARGET=i686-apple-darwin NO_JEMALLOC_TESTS=1
      os: osx
      osx_image: xcode10
      rust: beta
    - name: "i686-apple-darwin (stable)"
      env: TARGET=i686-apple-darwin NO_JEMALLOC_TESTS=1
      os: osx
      osx_image: xcode10
      rust: stable
    # FIXME: valgrind fails on OSX
    # https://github.com/gnzlbg/jemallocator/issues/86
    - name: "x86_64-apple-darwin (nightly)"
      env: TARGET=x86_64-apple-darwin NO_JEMALLOC_TESTS=1 JEMALLOC_SYS_VERIFY_CONFIGURE=1
      os: osx
      osx_image: xcode10
      install: rustup component add llvm-tools-preview
    - name: "x86_64-apple-darwin (nightly - jemalloc's dev branch)"
      env: TARGET=x86_64-apple-darwin NO_JEMALLOC_TESTS=1 JEMALLOC_SYS_GIT_DEV_BRANCH=1
      os: osx
      osx_image: xcode10
      install: rustup component add llvm-tools-preview
    - name: "x86_64-apple-darwin (beta)"
      env: TARGET=x86_64-apple-darwin NO_JEMALLOC_TESTS=1
      os: osx
      osx_image: xcode10
      rust: beta
      install: rustup component add llvm-tools-preview
    - name: "x86_64-apple-darwin (stable)"
      env: TARGET=x86_64-apple-darwin NO_JEMALLOC_TESTS=1
      os: osx
      osx_image: xcode10
      rust: stable
      install: rustup component add llvm-tools-preview

    # TOOLING
    - name: "Documentation"
      install: true
      script: RUSTDOCFLAGS="--cfg jemallocator_docs" cargo doc
      deploy:
        provider: script
        script: curl -LsSf https://git.io/fhJ8n | rustc - && (cd target/doc && ../../rust_out)
        skip_cleanup: true
        on:
          branch: master
    - name: "rustfmt"
      install: true
      rust: nightly
      script: |
        if rustup component add rustfmt-preview ; then
            cargo fmt --all -- --check
        fi
    - name: "clippy"
      install: true
      rust: nightly
      # allow(clippy::all) fails in the syscrate, so we can't use --all here:
      script: |
        if rustup component add clippy-preview ; then
            cargo clippy -p jemalloc-sys -- -D clippy::pedantic
            cargo clippy -p jemallocator -- -D clippy::pedantic
            cargo clippy -p jemallocator-global -- -D clippy::pedantic
            cargo clippy -p jemalloc-ctl -- -D clippy::pedantic
        fi
    - name: "Shellcheck"
      install: true
      script: shellcheck ci/*.sh

install: rustup target add ${TARGET}
script: sh ci/run.sh
notifications:
  email:
    on_success: never
