#!/usr/bin/env python3
# Copyright 2019 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Wrapper to run analyzers & tests with the right settings."""

import functools
import os
from pathlib import Path
import subprocess
import sys
from typing import List

import pytest


ROOT_DIR = Path(__file__).resolve().parent


@functools.lru_cache()
def is_ci() -> bool:
    """Whether we're running in our CI system."""
    return os.getenv("LUCI_CQ") == "yes"


def run_pytest(argv: List[str]) -> int:
    """Returns the exit code from pytest."""
    if is_ci():
        argv = ["-m", "not skip_cq"] + argv

    return pytest.main(argv)


def run_black() -> int:
    """Returns the exit code from black."""
    # Black by default only matches .py files.  We have to list standalone
    # scripts manually.
    extra_programs = [
        "run_tests",
    ]
    return subprocess.run(
        [sys.executable, "-m", "black", "--verbose", "--check", ROOT_DIR]
        + extra_programs,
        check=False,
        cwd=ROOT_DIR,
    ).returncode


def main(argv):
    """The main entry."""
    checks = (
        functools.partial(run_pytest, argv),
        run_black,
    )
    # Run all the tests all the time to get full feedback.  Don't exit on the
    # first error as that makes it more difficult to iterate in the CQ.
    return 1 if sum(c() for c in checks) else 0


if __name__ == "__main__":
    sys.exit(main(sys.argv[1:]))
