Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/prepare_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,12 @@ jobs:
python -m pip install --upgrade pip
python -m pip install requests==2.31.0
python -m pip install bandit==1.7.7
python -m pip install packaging
python -m pip install .[test]

- name: Check for prerelease dependencies
run: python scripts/check_for_prereleases.py

- name: Generate release notes
env:
GH_ACCESS_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }}
Expand Down
34 changes: 34 additions & 0 deletions scripts/check_for_prereleases.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
"""Script that checks project requirements for pre-release versions."""

from pathlib import Path

import tomllib
from packaging.requirements import Requirement


def get_dev_dependencies(dependency_list):
"""Return list of dependencies with prerelease specifiers."""
prereleases = []
for dependency in dependency_list:
requirement = Requirement(dependency)
if requirement.specifier.prereleases or requirement.url:
prereleases.append(dependency)

return prereleases


if __name__ == '__main__':
folder = Path(__file__).parent
toml_path = folder.joinpath('..', 'pyproject.toml')

with open(toml_path, 'rb') as f:
pyproject = tomllib.load(f)

dependencies = pyproject['project']['dependencies']
optional_dependencies = pyproject['project'].get('optional-dependencies', {})
for dependency_list in optional_dependencies.values():
dependencies.extend(dependency_list)
dev_deps = get_dev_dependencies(dependencies)

if dev_deps:
raise RuntimeError(f'Found dev dependencies: {", ".join(dev_deps)}')
37 changes: 37 additions & 0 deletions tests/test_scripts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from scripts.check_for_prereleases import get_dev_dependencies


def test_get_dev_dependencies():
"""Test get_dev_dependencies ignores regular releases."""
# Setup
dependencies = ['rdt>=1.1.1', 'sdv>=1.0.2']

# Run
dev_dependencies = get_dev_dependencies(dependency_list=dependencies)

# Assert
assert len(dev_dependencies) == 0


def test_get_dev_dependencies_prereleases():
"""Test get_dev_dependencies detects prereleases."""
# Setup
dependencies = ['rdt>=1.1.1.dev0', 'sdv>=1.0.2.rc1']

# Run
dev_dependencies = get_dev_dependencies(dependency_list=dependencies)

# Assert
assert dev_dependencies == dependencies


def test_get_dev_dependencies_url():
"""Test get_dev_dependencies detects url requirements."""
# Setup
dependencies = ['rdt>=1.1.1', 'sdv @ git+https://github.com/sdv-dev/sdv.git@main']

# Run
dev_dependencies = get_dev_dependencies(dependency_list=dependencies)

# Assert
assert dev_dependencies == ['sdv @ git+https://github.com/sdv-dev/sdv.git@main']
Loading