diff --git a/.circleci/config.yml b/.circleci/config.yml index 76745007..3f27cde1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,6 +13,11 @@ jobs: - checkout: path: /tmp/src/templateflow + - run: + name: Generate requirements.txt + command: | + python /tmp/src/templateflow/.maint/update_requirements.py + - restore_cache: keys: - deps-v10-{{ checksum "/tmp/src/templateflow/requirements.txt"}}-{{ epoch }} diff --git a/.gitignore b/.gitignore index 4fb6d48b..b112ba85 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,10 @@ # setuptools_scm templateflow/_version.py +# circleci hash checking +requirements.txt +min-requirements.txt + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/update_changes.sh b/.maint/update_changes.sh similarity index 100% rename from update_changes.sh rename to .maint/update_changes.sh diff --git a/.maint/update_requirements.py b/.maint/update_requirements.py new file mode 100644 index 00000000..3a10c150 --- /dev/null +++ b/.maint/update_requirements.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 +from copy import copy +from pathlib import Path +from packaging.requirements import Requirement, SpecifierSet + +try: + from tomllib import loads # Python +3.11 +except ImportError: + from pip._vendor.tomli import loads + +repo_root = Path(__file__).parent.parent +pyproject = repo_root / "pyproject.toml" +reqs = repo_root / "requirements.txt" +min_reqs = repo_root / "min-requirements.txt" + +requirements = [ + Requirement(req) + for req in loads(pyproject.read_text())["project"]["dependencies"] +] + +script_name = Path(__file__).relative_to(repo_root) + + +def to_min(req): + if req.specifier: + req = copy(req) + try: + min_spec = [spec for spec in req.specifier if spec.operator in (">=", "~=")][0] + except IndexError: + return req + min_spec._spec = ("==",) + min_spec._spec[1:] + req.specifier = SpecifierSet(str(min_spec)) + return req + + +lines = [f"# Auto-generated by {script_name}", ""] + +# Write requirements +lines[1:-1] = [str(req) for req in requirements] +reqs.write_text("\n".join(lines)) + +# Write minimum requirements +lines[1:-1] = [str(to_min(req)) for req in requirements] +min_reqs.write_text("\n".join(lines)) diff --git a/MANIFEST.in b/MANIFEST.in index 1ade6ff7..71927a82 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,7 +1,9 @@ recursive-exclude templateflow/tests * recursive-exclude templateflow/conf/tests * recursive-exclude docs/ * + recursive-exclude .circleci/ * recursive-exclude .github/ * +recursive-exclude .maint/ * -exclude .gitignore .gitattributes .git_archival.txt .travis.yml .zenodo.json codecov.yml update_changes.sh +exclude .gitignore .gitattributes .git_archival.txt .travis.yml .zenodo.json codecov.yml