name: Code-Analysis on: push: workflow_dispatch: schedule: - cron: '0 5 * * 1' # Every Monday at 5:00 AM UTC (7:00 AM CEST) jobs: pylint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v3 with: python-version: "3.11" - name: Install dependencies run: | python -m pip install --upgrade pip pip install $(find . -name "requirement*" -type f -printf ' -r %p') pip install pylint - name: Analysing the code with pylint run: | pylint -d C0301,R0913,W1202 $(git ls-files '*.py') --ignored-modules "rdkit" --max-positional-arguments 10 mypy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v3 with: python-version: "3.11" - name: Install dependencies run: | python -m pip install --upgrade pip pip install mypy mypy . || exit_code=$? mypy --install-types --non-interactive - name: Analysing the code with mypy run: | mypy --ignore-missing-imports --disallow-any-generics --disallow-untyped-defs --no-implicit-optional --disallow-incomplete-defs . pydocstyle: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v3 with: python-version: "3.11" - name: Install dependencies run: | python -m pip install --upgrade pip pip install pydocstyle - name: Analysing the code with pydocstyle run: | pydocstyle . docsig: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v3 with: python-version: "3.11" - name: Install dependencies run: | python -m pip install --upgrade pip pip install docsig - name: Analysing the code with docsig run: | docsig --check-class-constructor --check-dunders --check-protected-class-methods --check-nested --check-overridden --check-protected . black: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v3 with: python-version: "3.11" - name: Install dependencies run: | python -m pip install --upgrade pip pip install black[jupyter] - name: Analysing the code with black run: | black --check . flake8: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v3 with: python-version: "3.11" - name: Install dependencies run: | python -m pip install --upgrade pip pip install flake8 - name: Analysing the code with flake8 run: | flake8 --extend-ignore=D203,E203,E501,W503 . interrogate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v3 with: python-version: "3.11" - name: Install dependencies run: | python -m pip install --upgrade pip pip install interrogate - name: Analysing the code with interrogate run: | interrogate --ignore-overloaded-functions -vv . bandit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v3 with: python-version: "3.11" - name: Install dependencies run: | python -m pip install --upgrade pip pip install bandit - name: Analysing the code with bandit run: | bandit -r --skip=B404,B603,B602 . isort: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v3 with: python-version: "3.11" - name: Install dependencies run: | python -m pip install --upgrade pip pip install isort - name: Analysing the code with isort run: | isort --profile black --check-only . test_basis: needs: - pylint - mypy - pydocstyle - docsig - black - flake8 - interrogate - bandit - isort runs-on: ubuntu-latest strategy: matrix: python-version: ["3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Install package run: | python -m pip install --upgrade pip pip install coverage pip install . - name: Run unit-tests run: | # Run only the core test suite in the tests directory. coverage run --source=molpipeline,tests -m unittest discover tests # Create a coverage report. Fail if the coverage is below 85%. Exclude extra packages from the report. coverage report --fail-under=85 --omit="*chemprop*","*/*chemprop*/*" test_chemprop: needs: - test_basis runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python 3.11 uses: actions/setup-python@v3 with: python-version: "3.11" - name: Install package run: | python -m pip install --upgrade pip pip install coverage pip install torch pip install .[chemprop] - name: Run unit-tests for chemprop run: | # Run only the chemprop test suite. coverage run --source=molpipeline,tests -m unittest discover test_extras/test_chemprop # Create a coverage report. Fail if the coverage is below 85%. Include only chemprop files in the report. coverage report --fail-under=85 --include="*chemprop*","*/*chemprop*/*" test_notebooks: needs: - test_basis runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python 3.11 uses: actions/setup-python@v3 with: python-version: "3.11" - name: Install package run: | python -m pip install --upgrade pip pip install .[notebooks] - name: Run unit-tests for notebooks run: | python test_extras/test_notebooks/test_notebooks.py --continue-on-failure