diff --git a/.cirrus.yml b/.cirrus.yml index 52abddcadd..b728e31867 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -34,7 +34,7 @@ env: # Increment the build number to force new pip cache upload. PIP_CACHE_BUILD: "0" # Pip packages to be upgraded/installed. - PIP_CACHE_PACKAGES: "nox pip setuptools wheel" + PIP_CACHE_PACKAGES: "nox pip pyyaml setuptools wheel" # Conda packages to be installed. CONDA_CACHE_PACKAGES: "nox pip" # Git commit hash for iris test data. @@ -105,7 +105,7 @@ iris_test_data_template: &IRIS_TEST_DATA_TEMPLATE # # Linting # -lint_task: +precommit_task: only_if: ${SKIP_LINT_TASK} == "" << : *CREDITS_TEMPLATE auto_cancellation: true @@ -113,17 +113,17 @@ lint_task: image: python:3.8 cpu: 2 memory: 4G - name: "${CIRRUS_OS}: linting" + name: "${CIRRUS_OS}: pre-commit hooks" pip_cache: folder: ~/.cache/pip fingerprint_script: - echo "${CIRRUS_TASK_NAME} py${PYTHON_VERSION}" - echo "$(date +%Y).$(expr $(date +%U) / ${CACHE_PERIOD}):${PIP_CACHE_BUILD} ${PIP_CACHE_PACKAGES}" - lint_script: + precommit_script: - pip list - python -m pip install --retries 3 --upgrade ${PIP_CACHE_PACKAGES} - pip list - - nox --session lint + - nox --session precommit # diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index abcca5ecbe..4574d09b77 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -32,7 +32,7 @@ repos: hooks: - id: black pass_filenames: false - args: [--config=./pyproject.toml, --check, .] + args: [--config=./pyproject.toml, .] - repo: https://github.com/PyCQA/flake8 rev: 3.9.2 @@ -46,7 +46,7 @@ repos: hooks: - id: isort types: [file, python] - args: [--filter-files, --check] + args: [--filter-files] - repo: https://github.com/asottile/blacken-docs rev: v1.10.0 diff --git a/noxfile.py b/noxfile.py index 1570f62532..f7cd86e09f 100755 --- a/noxfile.py +++ b/noxfile.py @@ -163,9 +163,9 @@ def prepare_venv(session: nox.sessions.Session) -> None: @nox.session -def lint(session: nox.sessions.Session): +def precommit(session: nox.sessions.Session): """ - Perform pre-commit linting of iris codebase. + Perform pre-commit hooks of iris codebase. Parameters ---------- @@ -173,13 +173,28 @@ def lint(session: nox.sessions.Session): A `nox.sessions.Session` object. """ + import yaml + # Pip install the session requirements. session.install("pre-commit") - # Execute the pre-commit linting tasks. - cmd = ["pre-commit", "run", "--all-files"] - hooks = ["black", "blacken-docs", "flake8", "isort"] - for hook in hooks: - session.run(*cmd, hook) + + # Load the pre-commit configuration YAML file. + with open(".pre-commit-config.yaml", "r") as fi: + config = yaml.load(fi, Loader=yaml.FullLoader) + + # List of pre-commit hook ids that we don't want to run. + excluded = ["no-commit-to-branch"] + + # Enumerate the ids of pre-commit hooks we do want to run. + ids = [ + hook["id"] + for entry in config["repos"] + for hook in entry["hooks"] + if hook["id"] not in excluded + ] + + # Execute the pre-commit hooks. + [session.run("pre-commit", "run", "--all-files", id) for id in ids] @nox.session(python=PY_VER, venv_backend="conda")