Improve dependencies versioning and ci #2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: In pull request | |
on: | |
pull_request: | |
branches: | |
- main | |
jobs: | |
check_python_linting: | |
name: Ruff Linting & Formatting | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: chartboost/ruff-action@v1 | |
with: | |
src: "./" | |
version: 0.9.1 | |
- uses: chartboost/ruff-action@v1 | |
with: | |
src: "./" | |
version: 0.9.1 | |
args: 'format --check' | |
test_compatibility: | |
name: Test Package Compatibility | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-latest | |
python-version: "3.9" | |
dependency-set: minimum | |
- os: macos-13 # macos-latest doesn't work with python 3.10 | |
# https://github.com/actions/setup-python/issues/855 | |
python-version: "3.9" | |
dependency-set: minimum | |
- os: ubuntu-latest | |
python-version: "3.12" | |
dependency-set: maximum | |
- os: macos-latest | |
python-version: "3.12" | |
dependency-set: maximum | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
architecture: x64 | |
- name: Install pip-tools | |
run: python -m pip install pip-tools | |
- name: Generate requirements file for minimum dependencies | |
if: matrix.dependency-set == 'minimum' | |
run: | | |
python << EOF | |
import re | |
with open('pyproject.toml', 'r') as f: | |
content = f.read() | |
# Find dependencies section using regex | |
deps_match = re.search(r'dependencies\s*=\s*\[(.*?)\]', content, re.DOTALL) | |
if deps_match: | |
deps = [d.strip(' "\'') for d in deps_match.group(1).strip().split('\n') if d.strip()] | |
min_reqs = [] | |
for dep in deps: | |
match = re.match(r'([^>=<\s]+)\s*>=\s*([^,]+)', dep) | |
if match: | |
package, min_ver = match.groups() | |
min_reqs.append(f"{package}=={min_ver}") | |
with open('requirements.txt', 'w') as f: | |
f.write('\n'.join(min_reqs)) | |
EOF | |
- name: Generate requirements file for maximum dependencies | |
if: matrix.dependency-set == 'maximum' | |
run: | | |
python << EOF | |
import re | |
with open('pyproject.toml', 'r') as f: | |
content = f.read() | |
# Find dependencies section using regex | |
deps_match = re.search(r'dependencies\s*=\s*\[(.*?)\]', content, re.DOTALL) | |
if deps_match: | |
deps = [d.strip(' "\'') for d in deps_match.group(1).strip().split('\n') if d.strip()] | |
max_reqs = [] | |
for dep in deps: | |
# Extract the upper bound version if it exists | |
match = re.search(r'([^>=<\s]+)\s*.*<=\s*([^,\s]+)', dep) | |
if match: | |
package, max_ver = match.groups() | |
# Remove any remaining quotes from the version | |
max_ver = max_ver.strip('"\'') | |
max_reqs.append(f"{package}=={max_ver}") | |
else: | |
# If no upper bound, just use the package name | |
package = re.match(r'([^>=<\s]+)', dep).group(1) | |
max_reqs.append(package) | |
with open('requirements.txt', 'w') as f: | |
f.write('\n'.join(max_reqs)) | |
EOF | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install ".[dev]" | |
- name: Initialize submodules | |
run: git submodule update --init --recursive | |
- name: Run Tests | |
run: | | |
pytest tests/ |