---
version: 2

workflows:
  version: 2
  program-analysis:
    jobs:
      # Dynamic analysis in the Bazel build
      - bazel-asan
      - bazel-msan
      - bazel-tsan
      # Dynamic analysis with CMake
      - asan
      - tsan
      - ubsan
      # Static analysis
      - clang-analyze
      - cpplint
      - static-analysis

jobs:
  bazel-asan:
    working_directory: /tmp/cirrus-ci-build
    docker:
      - image: toxchat/toktok-stack:latest-asan

    steps:
      - checkout
      - run: .circleci/bazel-test
          //c-toxcore/...

  bazel-tsan:
    working_directory: /tmp/cirrus-ci-build
    docker:
      - image: toxchat/toktok-stack:latest-tsan

    steps:
      - checkout
      - run: .circleci/bazel-test
          //c-toxcore/...
          -//c-toxcore/auto_tests:conference_av_test
          -//c-toxcore/auto_tests:conference_test
          -//c-toxcore/auto_tests:onion_test
          -//c-toxcore/auto_tests:tox_many_test

  bazel-msan:
    working_directory: /tmp/cirrus-ci-build
    docker:
      - image: toxchat/toktok-stack:latest-msan

    steps:
      - checkout
      - run: .circleci/bazel-test
          //c-toxcore/auto_tests:lossless_packet_test

  asan:
    working_directory: ~/work
    docker:
      - image: ubuntu

    steps:
      - run: &apt_install
          apt-get update &&
          DEBIAN_FRONTEND=noninteractive
          apt-get install -y --no-install-recommends
            ca-certificates
            clang
            cmake
            git
            libconfig-dev
            libgmock-dev
            libgtest-dev
            libopus-dev
            libsodium-dev
            libvpx-dev
            llvm-dev
            ninja-build
            pkg-config
      - checkout
      - run: git submodule update --init --recursive
      - run: CC=clang .circleci/cmake-asan

  tsan:
    working_directory: ~/work
    docker:
      - image: ubuntu

    steps:
      - run: *apt_install
      - checkout
      - run: git submodule update --init --recursive
      - run: CC=clang .circleci/cmake-tsan

  ubsan:
    working_directory: ~/work
    docker:
      - image: ubuntu

    steps:
      - run: *apt_install
      - checkout
      - run: git submodule update --init --recursive
      - run: CC=clang .circleci/cmake-ubsan

  static-analysis:
    working_directory: ~/work
    docker:
      - image: ubuntu

    steps:
      - run: *apt_install
      - run:
          apt-get install -y --no-install-recommends
            ca-certificates
            g++
            llvm-dev
      - checkout
      - run: git submodule update --init --recursive
      - run: other/analysis/check_includes
      - run: other/analysis/check_logger_levels
      - run: other/analysis/run-clang
      - run: other/analysis/run-gcc

  clang-analyze:
    working_directory: ~/work
    docker:
      - image: ubuntu

    steps:
      - run: *apt_install
      - checkout
      - run: git submodule update --init --recursive
      - run: other/analysis/run-clang-analyze

  cpplint:
    working_directory: ~/work
    docker:
      - image: ubuntu

    steps:
      - run: *apt_install
      - run:
          apt-get install -y --no-install-recommends
            ca-certificates
            python3-pip
      - checkout
      - run: git submodule update --init --recursive
      - run: pip install cpplint
      - run: other/analysis/run-cpplint
