diff --git a/.github/change_version.py b/.github/change_version.py index 9a322a1..3d34d8c 100755 --- a/.github/change_version.py +++ b/.github/change_version.py @@ -6,10 +6,8 @@ VERSION_PY = Path(__file__).parent.parent / 'defectdojo_api_generated' / '__init__.py' VERSION_RE = re.compile(r"__version__ = '(.*?)'") -CLI_VERSION_PY = ( - Path(__file__).parent.parent / 'packages' / 'cli' / 'src' / 'defectdojo_api_generated_cli' / '__init__.py' -) CLI_DEPENDENCY_PYPROJECT = Path(__file__).parent.parent / 'packages' / 'cli' / 'pyproject.toml' +CLI_VERSION_RE = re.compile(r'(^version = ")([^"]+)(")', re.MULTILINE) CLI_DEPENDENCY_RE = re.compile(r'("defectdojo-api-generated==)([^"]+)(")') @@ -27,9 +25,8 @@ def main(): if args.set: VERSION_PY.write_text(VERSION_RE.sub(f"__version__ = '{args.set}'", data)) - cli_version_data = CLI_VERSION_PY.read_text() - CLI_VERSION_PY.write_text(VERSION_RE.sub(f"__version__ = '{args.set}'", cli_version_data)) cli_pyproject_data = CLI_DEPENDENCY_PYPROJECT.read_text() + cli_pyproject_data = CLI_VERSION_RE.sub(rf'\g<1>{args.set}\g<3>', cli_pyproject_data) CLI_DEPENDENCY_PYPROJECT.write_text(CLI_DEPENDENCY_RE.sub(rf'\g<1>{args.set}\g<3>', cli_pyproject_data)) print(f'New version: {args.set}') diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 227ee5b..3e1cc48 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -79,3 +79,19 @@ jobs: pip install${INDEX} defectdojo-api-generated-cli==${{ inputs.version }} \`\`\` EOF + if [ "${{ inputs.repository }}" != "pypi" ]; then + cat <> ${GITHUB_STEP_SUMMARY} + Run with \`uvx\` + \`\`\` + uvx --with 'defectdojo-api-generated @ https://test-files.pythonhosted.org/packages/source/d/defectdojo-api-generated/defectdojo_api_generated-${{ inputs.version }}.tar.gz' \\ + 'defectdojo-api-generated-cli @ https://test-files.pythonhosted.org/packages/source/d/defectdojo-api-generated-cli/defectdojo_api_generated_cli-${{ inputs.version }}.tar.gz' + \`\`\` + EOF + else + cat <> ${GITHUB_STEP_SUMMARY} + Run with \`uvx\` + \`\`\` + uvx defectdojo-api-generated-cli==${{ inputs.version }} + \`\`\` + EOF + fi diff --git a/Makefile b/Makefile index 29323c1..eb2878f 100644 --- a/Makefile +++ b/Makefile @@ -36,9 +36,10 @@ test-e2e: uv run pytest tests/integration testpub: - rm -fr dist + rm -rf dist packages/cli/dist uv run pyproject-build - uv run twine upload --repository testpypi dist/* + uv run pyproject-build packages/cli + uv run twine upload --repository testpypi dist/* packages/cli/dist/* schema: uv run ./support/openapi/fetch_openapi.py --output ./support/openapi/openapi-new.json diff --git a/packages/cli/pyproject.toml b/packages/cli/pyproject.toml index b97e99f..7aaae87 100644 --- a/packages/cli/pyproject.toml +++ b/packages/cli/pyproject.toml @@ -15,15 +15,11 @@ dependencies = [ ] [project.scripts] -dojo = "defectdojo_api_generated_cli.__main__:main" -defectdojo-api-generated = "defectdojo_api_generated_cli.__main__:main" +dojo = "defectdojo_api_generated.cli.__main__:main" +defectdojo-api-generated-cli = "defectdojo_api_generated.cli.__main__:main" [project.urls] Homepage = "https://github.com/fopina/defectdojo-api-generated" [tool.uv.sources] defectdojo-api-generated = { path = "../.." } - -[tool.setuptools.packages.find] -where = ["src"] -include = ["defectdojo_api_generated_cli"] diff --git a/packages/cli/src/defectdojo_api_generated_cli/__init__.py b/packages/cli/src/defectdojo_api_generated_cli/__init__.py deleted file mode 100644 index d661f43..0000000 --- a/packages/cli/src/defectdojo_api_generated_cli/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -"""Thin wrapper distribution for the DefectDojo CLI.""" - -__version__ = '1.0.0' diff --git a/packages/cli/src/defectdojo_api_generated_cli/__main__.py b/packages/cli/src/defectdojo_api_generated_cli/__main__.py deleted file mode 100644 index b1160ae..0000000 --- a/packages/cli/src/defectdojo_api_generated_cli/__main__.py +++ /dev/null @@ -1,6 +0,0 @@ -"""Entrypoint owned by the separate CLI distribution.""" - -from defectdojo_api_generated.cli.__main__ import main - -if __name__ == '__main__': - main() diff --git a/pyproject.toml b/pyproject.toml index d731677..1c716bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,9 @@ Homepage = "https://github.com/fopina/defectdojo-api-generated" [tool.setuptools.packages.find] include = ["defectdojo_api_generated", "defectdojo_api_generated.*"] +[tool.setuptools.package-data] +"defectdojo_api_generated.cli" = ["config.example.toml"] + [tool.setuptools.dynamic] version = {attr = "defectdojo_api_generated.__version__"} diff --git a/tests/unit/test_packaging.py b/tests/unit/test_packaging.py index 76ed893..1bd3de2 100644 --- a/tests/unit/test_packaging.py +++ b/tests/unit/test_packaging.py @@ -1,5 +1,4 @@ import pathlib -import re import unittest try: @@ -18,25 +17,23 @@ def test_library_package_has_no_console_scripts(self): self.assertNotIn('scripts', pyproject['project']) - def test_cli_wrapper_package_owns_console_scripts(self): + def test_cli_distribution_points_console_scripts_to_library_entrypoint(self): pyproject = tomllib.loads((ROOT / 'packages' / 'cli' / 'pyproject.toml').read_text()) self.assertEqual( pyproject['project']['scripts'], { - 'dojo': 'defectdojo_api_generated_cli.__main__:main', - 'defectdojo-api-generated': 'defectdojo_api_generated_cli.__main__:main', + 'dojo': 'defectdojo_api_generated.cli.__main__:main', + 'defectdojo-api-generated-cli': 'defectdojo_api_generated.cli.__main__:main', }, ) - def test_cli_wrapper_version_matches_library_version(self): - wrapper_init = (ROOT / 'packages' / 'cli' / 'src' / 'defectdojo_api_generated_cli' / '__init__.py').read_text() - match = re.search(r"__version__ = '([^']+)'", wrapper_init) + def test_cli_distribution_version_matches_library_version(self): + pyproject = tomllib.loads((ROOT / 'packages' / 'cli' / 'pyproject.toml').read_text()) - self.assertIsNotNone(match) - self.assertEqual(match.group(1), defectdojo_api_generated.__version__) + self.assertEqual(pyproject['project']['version'], defectdojo_api_generated.__version__) - def test_cli_wrapper_dependency_matches_library_version(self): + def test_cli_distribution_dependency_matches_library_version(self): pyproject = tomllib.loads((ROOT / 'packages' / 'cli' / 'pyproject.toml').read_text()) self.assertIn(