From 8faae9d26d36af9124506f82faf97167f3391358 Mon Sep 17 00:00:00 2001 From: Stainless Bot Date: Thu, 21 Dec 2023 12:41:01 +0000 Subject: [PATCH] chore(internal): add bin script --- bin/check-env-state.py | 40 ++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 1 + requirements-dev.lock | 2 ++ 3 files changed, 43 insertions(+) create mode 100644 bin/check-env-state.py diff --git a/bin/check-env-state.py b/bin/check-env-state.py new file mode 100644 index 00000000..e1b8b6cb --- /dev/null +++ b/bin/check-env-state.py @@ -0,0 +1,40 @@ +"""Script that exits 1 if the current environment is not +in sync with the `requirements-dev.lock` file. +""" + +from pathlib import Path + +import importlib_metadata + + +def should_run_sync() -> bool: + dev_lock = Path(__file__).parent.parent.joinpath("requirements-dev.lock") + + for line in dev_lock.read_text().splitlines(): + if not line or line.startswith("#") or line.startswith("-e"): + continue + + dep, lock_version = line.split("==") + + try: + version = importlib_metadata.version(dep) + + if lock_version != version: + print(f"mismatch for {dep} current={version} lock={lock_version}") + return True + except Exception: + print(f"could not import {dep}") + return True + + return False + + +def main() -> None: + if should_run_sync(): + exit(1) + else: + exit(0) + + +if __name__ == "__main__": + main() diff --git a/pyproject.toml b/pyproject.toml index 5ff17ac5..b1db7632 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,6 +58,7 @@ dev-dependencies = [ "time-machine", "nox", "dirty-equals>=0.6.0", + "importlib-metadata>=6.7.0", ] diff --git a/requirements-dev.lock b/requirements-dev.lock index 2ad33ff6..a696dd94 100644 --- a/requirements-dev.lock +++ b/requirements-dev.lock @@ -24,6 +24,7 @@ h11==0.14.0 httpcore==1.0.2 httpx==0.25.2 idna==3.4 +importlib-metadata==7.0.0 iniconfig==2.0.0 isort==5.10.1 mypy==1.7.1 @@ -50,5 +51,6 @@ time-machine==2.9.0 tomli==2.0.1 typing-extensions==4.8.0 virtualenv==20.24.5 +zipp==3.17.0 # The following packages are considered to be unsafe in a requirements file: setuptools==68.2.2