Skip to content
This repository was archived by the owner on Jun 2, 2026. It is now read-only.

Commit 2316fa1

Browse files
authored
fix CLI entrypoint (#66)
1 parent 7fb1469 commit 2316fa1

8 files changed

Lines changed: 33 additions & 32 deletions

File tree

.github/change_version.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66

77
VERSION_PY = Path(__file__).parent.parent / 'defectdojo_api_generated' / '__init__.py'
88
VERSION_RE = re.compile(r"__version__ = '(.*?)'")
9-
CLI_VERSION_PY = (
10-
Path(__file__).parent.parent / 'packages' / 'cli' / 'src' / 'defectdojo_api_generated_cli' / '__init__.py'
11-
)
129
CLI_DEPENDENCY_PYPROJECT = Path(__file__).parent.parent / 'packages' / 'cli' / 'pyproject.toml'
10+
CLI_VERSION_RE = re.compile(r'(^version = ")([^"]+)(")', re.MULTILINE)
1311
CLI_DEPENDENCY_RE = re.compile(r'("defectdojo-api-generated==)([^"]+)(")')
1412

1513

@@ -27,9 +25,8 @@ def main():
2725

2826
if args.set:
2927
VERSION_PY.write_text(VERSION_RE.sub(f"__version__ = '{args.set}'", data))
30-
cli_version_data = CLI_VERSION_PY.read_text()
31-
CLI_VERSION_PY.write_text(VERSION_RE.sub(f"__version__ = '{args.set}'", cli_version_data))
3228
cli_pyproject_data = CLI_DEPENDENCY_PYPROJECT.read_text()
29+
cli_pyproject_data = CLI_VERSION_RE.sub(rf'\g<1>{args.set}\g<3>', cli_pyproject_data)
3330
CLI_DEPENDENCY_PYPROJECT.write_text(CLI_DEPENDENCY_RE.sub(rf'\g<1>{args.set}\g<3>', cli_pyproject_data))
3431
print(f'New version: {args.set}')
3532

.github/workflows/publish.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,19 @@ jobs:
7979
pip install${INDEX} defectdojo-api-generated-cli==${{ inputs.version }}
8080
\`\`\`
8181
EOF
82+
if [ "${{ inputs.repository }}" != "pypi" ]; then
83+
cat <<EOF >> ${GITHUB_STEP_SUMMARY}
84+
Run with \`uvx\`
85+
\`\`\`
86+
uvx --with 'defectdojo-api-generated @ https://test-files.pythonhosted.org/packages/source/d/defectdojo-api-generated/defectdojo_api_generated-${{ inputs.version }}.tar.gz' \\
87+
'defectdojo-api-generated-cli @ https://test-files.pythonhosted.org/packages/source/d/defectdojo-api-generated-cli/defectdojo_api_generated_cli-${{ inputs.version }}.tar.gz'
88+
\`\`\`
89+
EOF
90+
else
91+
cat <<EOF >> ${GITHUB_STEP_SUMMARY}
92+
Run with \`uvx\`
93+
\`\`\`
94+
uvx defectdojo-api-generated-cli==${{ inputs.version }}
95+
\`\`\`
96+
EOF
97+
fi

Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ test-e2e:
3636
uv run pytest tests/integration
3737

3838
testpub:
39-
rm -fr dist
39+
rm -rf dist packages/cli/dist
4040
uv run pyproject-build
41-
uv run twine upload --repository testpypi dist/*
41+
uv run pyproject-build packages/cli
42+
uv run twine upload --repository testpypi dist/* packages/cli/dist/*
4243

4344
schema:
4445
uv run ./support/openapi/fetch_openapi.py --output ./support/openapi/openapi-new.json

packages/cli/pyproject.toml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,11 @@ dependencies = [
1515
]
1616

1717
[project.scripts]
18-
dojo = "defectdojo_api_generated_cli.__main__:main"
19-
defectdojo-api-generated = "defectdojo_api_generated_cli.__main__:main"
18+
dojo = "defectdojo_api_generated.cli.__main__:main"
19+
defectdojo-api-generated-cli = "defectdojo_api_generated.cli.__main__:main"
2020

2121
[project.urls]
2222
Homepage = "https://github.com/fopina/defectdojo-api-generated"
2323

2424
[tool.uv.sources]
2525
defectdojo-api-generated = { path = "../.." }
26-
27-
[tool.setuptools.packages.find]
28-
where = ["src"]
29-
include = ["defectdojo_api_generated_cli"]

packages/cli/src/defectdojo_api_generated_cli/__init__.py

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

packages/cli/src/defectdojo_api_generated_cli/__main__.py

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

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ Homepage = "https://github.com/fopina/defectdojo-api-generated"
3737
[tool.setuptools.packages.find]
3838
include = ["defectdojo_api_generated", "defectdojo_api_generated.*"]
3939

40+
[tool.setuptools.package-data]
41+
"defectdojo_api_generated.cli" = ["config.example.toml"]
42+
4043
[tool.setuptools.dynamic]
4144
version = {attr = "defectdojo_api_generated.__version__"}
4245

tests/unit/test_packaging.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import pathlib
2-
import re
32
import unittest
43

54
try:
@@ -18,25 +17,23 @@ def test_library_package_has_no_console_scripts(self):
1817

1918
self.assertNotIn('scripts', pyproject['project'])
2019

21-
def test_cli_wrapper_package_owns_console_scripts(self):
20+
def test_cli_distribution_points_console_scripts_to_library_entrypoint(self):
2221
pyproject = tomllib.loads((ROOT / 'packages' / 'cli' / 'pyproject.toml').read_text())
2322

2423
self.assertEqual(
2524
pyproject['project']['scripts'],
2625
{
27-
'dojo': 'defectdojo_api_generated_cli.__main__:main',
28-
'defectdojo-api-generated': 'defectdojo_api_generated_cli.__main__:main',
26+
'dojo': 'defectdojo_api_generated.cli.__main__:main',
27+
'defectdojo-api-generated-cli': 'defectdojo_api_generated.cli.__main__:main',
2928
},
3029
)
3130

32-
def test_cli_wrapper_version_matches_library_version(self):
33-
wrapper_init = (ROOT / 'packages' / 'cli' / 'src' / 'defectdojo_api_generated_cli' / '__init__.py').read_text()
34-
match = re.search(r"__version__ = '([^']+)'", wrapper_init)
31+
def test_cli_distribution_version_matches_library_version(self):
32+
pyproject = tomllib.loads((ROOT / 'packages' / 'cli' / 'pyproject.toml').read_text())
3533

36-
self.assertIsNotNone(match)
37-
self.assertEqual(match.group(1), defectdojo_api_generated.__version__)
34+
self.assertEqual(pyproject['project']['version'], defectdojo_api_generated.__version__)
3835

39-
def test_cli_wrapper_dependency_matches_library_version(self):
36+
def test_cli_distribution_dependency_matches_library_version(self):
4037
pyproject = tomllib.loads((ROOT / 'packages' / 'cli' / 'pyproject.toml').read_text())
4138

4239
self.assertIn(

0 commit comments

Comments
 (0)