diff --git a/.github/workflows/reusable_checks.yml b/.github/workflows/reusable_checks.yml index 69cff7069fab..3821e6522b2a 100644 --- a/.github/workflows/reusable_checks.yml +++ b/.github/workflows/reusable_checks.yml @@ -281,6 +281,10 @@ jobs: - name: Check for too large files run: | ./scripts/check_large_files.sh + + - name: Check Python example requirements + run: | + ./scripts/check_requirements.py # --------------------------------------------------------------------------- diff --git a/examples/python/requirements.txt b/examples/python/requirements.txt index be2a3e246785..4adb866ac151 100644 --- a/examples/python/requirements.txt +++ b/examples/python/requirements.txt @@ -1,17 +1,23 @@ -r api_demo/requirements.txt +-r arkitscenes/requirements.txt -r car/requirements.txt -r clock/requirements.txt -r colmap/requirements.txt -r deep_sdf/requirements.txt -r dicom/requirements.txt +-r dna/requirements.txt -r minimal/requirements.txt -r mp_pose/requirements.txt -r multiprocessing/requirements.txt -r multithreading/requirements.txt +-r notebook/requirements.txt -r nyud/requirements.txt -r objectron/requirements.txt +-r opencv_canny/requirements.txt -r plots/requirements.txt -r raw_mesh/requirements.txt +-r ros/requirements.txt +-r segment_anything/requirements.txt -r stable_diffusion/requirements.txt -r text_logging/requirements.txt -r tracking_hf_opencv/requirements.txt diff --git a/scripts/check_requirements.py b/scripts/check_requirements.py new file mode 100755 index 000000000000..6b9be991b072 --- /dev/null +++ b/scripts/check_requirements.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +import os +from glob import glob + + +def main() -> None: + failed = False + + print("Checking `examples/python/requirements.txt`...") + with open("examples/python/requirements.txt") as f: + lines = f.read().strip().splitlines() + sorted_lines = lines.copy() + sorted_lines.sort() + requirements = set(lines) + + missing = [] + for path in glob("examples/python/*/requirements.txt"): + line = f"-r {os.path.relpath(path, 'examples/python')}" + if line not in requirements: + missing.append(line) + + if len(missing) != 0: + print("\n`examples/python/requirements.txt` is missing the following requirements:") + for line in missing: + print(line) + failed = True + + if lines != sorted_lines: + print("\n`examples/python/requirements.txt` is not correctly sorted.") + failed = True + + if failed: + print("\nHere is what `examples/python/requirements.txt` should contain:") + expected = glob("examples/python/*/requirements.txt") + expected.sort() + for path in expected: + print(f"-r {os.path.relpath(path, 'examples/python')}") + exit(1) + else: + print("All clear.") + + +if __name__ == "__main__": + main()