Skip to content

Commit

Permalink
ci: check minimum requirements
Browse files Browse the repository at this point in the history
Use a script to ensure the minimum requirements file is in-sync with the package.
  • Loading branch information
gadomski committed Feb 9, 2022
1 parent c6ed1d4 commit a8a9b81
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/continuous-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ jobs:
run: pip install -r requirements-min.txt
- name: Install the package
run: pip install .
- name: Check minimum requirements
run: scripts/check_minimum_requirements
- name: Install development dependencies
run: pip install -r requirements-dev.txt
- name: Test
Expand Down
2 changes: 2 additions & 0 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
codespell
flake8
importlib-metadata
ipython
jupyter
lxml-stubs
mypy
nbsphinx
packaging
pylint
pytest
pytest-cov
Expand Down
38 changes: 38 additions & 0 deletions scripts/check_minimum_requirements
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/bin/env python3
# type: ignore

import os.path
import sys
from importlib_metadata import requires
from packaging.requirements import Requirement

package_requirements = [
Requirement(requirement) for requirement in requires("stactools")
]
requirements_min = os.path.join(os.path.dirname(os.path.dirname(__file__)),
"requirements-min.txt")
with open(requirements_min) as file:
min_requirements = [Requirement(line) for line in file]
min_requirements = dict(
(requirement.name, requirement) for requirement in min_requirements)

incorrect_requirements = list()
for package_requirement in package_requirements:
if package_requirement.marker is not None:
continue
min_requirement = min_requirements[package_requirement.name]
for (package_specifier,
min_specifier) in zip(package_requirement.specifier,
min_requirement.specifier):
if package_specifier.operator == ">=" and package_specifier.version != min_specifier.version:
incorrect_requirements.append(
(package_requirement, min_requirement))

if incorrect_requirements:
print("ERROR: Incorrect min-requirements.txt!")
for package_requirement, min_requirement in incorrect_requirements:
print(f"- package: {package_requirement}, min: {min_requirement}")
sys.exit(1)
else:
print("OK")
sys.exit(0)

0 comments on commit a8a9b81

Please sign in to comment.