Skip to content

Commit d5c3f35

Browse files
committed
ci: rework minimum requirements check
1 parent 6ca1f19 commit d5c3f35

File tree

5 files changed

+41
-68
lines changed

5 files changed

+41
-68
lines changed

.github/setup/action.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@ inputs:
44
python-version:
55
description: Python version to set up w/ conda
66
required: True
7-
pip-cache-hash:
8-
description: The hash used for the pip cache
9-
required: False
10-
default: ${{ hashFiles('setup.cfg', 'requirements-dev.txt') }}
117
runs:
128
using: composite
139
steps:
@@ -21,7 +17,7 @@ runs:
2117
uses: actions/cache@v2
2218
with:
2319
path: ~/.cache/pip
24-
key: ${{ runner.os }}-pip-${{ inputs.pip-cache-hash }}
20+
key: ${{ runner.os }}-pip-${{ hashFiles('setup.cfg', 'requirements-dev.txt') }}
2521
restore-keys: ${{ runner.os }}-pip-
2622
- name: Set up pre-commit cache
2723
uses: actions/cache@v2

.github/workflows/continuous-integration.yml

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,12 @@ jobs:
6363
- uses: ./.github/setup
6464
with:
6565
python-version: ${{ matrix.python-version }}
66-
pip-cache-hash: ${{ hashFiles('requirements-min.txt', 'requirements-dev.txt') }}
67-
- name: Install minimum requirements
68-
run: pip install -r requirements-min.txt
69-
- name: Install the package
70-
run: pip install .
7166
- name: Install development dependencies
7267
run: pip install -r requirements-dev.txt
73-
- name: Check minimum requirements
74-
run: scripts/check_minimum_requirements
68+
- name: Install the minimum requirements
69+
run: scripts/install-min-requirements
70+
- name: Install the package
71+
run: pip install .
7572
- name: Test
7673
run: scripts/test
7774
pre-release-versions:

requirements-min.txt

Lines changed: 0 additions & 13 deletions
This file was deleted.

scripts/check_minimum_requirements

Lines changed: 0 additions & 43 deletions
This file was deleted.

scripts/install-min-requirements

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/usr/bin/env python3
2+
3+
"""Installs the minimum version of all stactools dependencies, with pip.
4+
5+
Assumptions:
6+
- You've installed the development dependencies: `pip install -r requirements-dev.txt`
7+
- All of the dependencies in setup.cfg are specified with `>=`
8+
9+
For more context on the approach and rationale behind testing against minimum
10+
requirements, see
11+
https://www.gadom.ski/2022/02/18/dependency-protection-with-python-and-github-actions.html.
12+
13+
"""
14+
15+
import subprocess
16+
from configparser import ConfigParser
17+
from pathlib import Path
18+
19+
from packaging.requirements import Requirement
20+
21+
root = Path(__file__).parents[1]
22+
setup_cfg = ConfigParser()
23+
setup_cfg.read(root / "setup.cfg")
24+
requirements = []
25+
for install_requires in filter(
26+
bool,
27+
(i.strip() for i in setup_cfg["options"]["install_requires"].splitlines()),
28+
):
29+
requirement = Requirement(install_requires)
30+
assert len(requirement.specifier) == 1
31+
specifier = list(requirement.specifier)[0]
32+
assert specifier.operator == ">="
33+
install_requires = install_requires.replace(">=", "==")
34+
requirements.append(install_requires)
35+
36+
subprocess.run(["pip", "install", *requirements])

0 commit comments

Comments
 (0)