django-dynamic-admin-forms 3.2.12__tar.gz → 3.2.13__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.ambient-package-update/metadata.py +53 -53
  2. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.editorconfig +17 -17
  3. django_dynamic_admin_forms-3.2.13/.github/workflows/ci.yml +11 -0
  4. django_dynamic_admin_forms-3.2.12/.github/workflows/ci.yml → django_dynamic_admin_forms-3.2.13/.github/workflows/quality-gate.yml +91 -94
  5. django_dynamic_admin_forms-3.2.13/.github/workflows/release.yml +115 -0
  6. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.gitignore +160 -160
  7. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.pre-commit-config.yaml +59 -59
  8. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.readthedocs.yaml +31 -31
  9. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/CHANGES.md +149 -146
  10. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/CONTRIBUTING.md +75 -75
  11. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/LICENSE.md +21 -21
  12. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/MANIFEST.in +4 -4
  13. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/PKG-INFO +27 -36
  14. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/README.md +214 -224
  15. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/SECURITY.md +18 -18
  16. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/django_dynamic_admin_forms/__init__.py +3 -3
  17. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/django_dynamic_admin_forms/admin.py +80 -80
  18. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/django_dynamic_admin_forms/templates/admin/change_form.html +37 -37
  19. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/django_dynamic_admin_forms/urls.py +8 -8
  20. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/docs/Makefile +20 -20
  21. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/docs/conf.py +81 -81
  22. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/docs/features/changelog.rst +1 -1
  23. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/docs/index.rst +7 -7
  24. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/docs/make.bat +35 -35
  25. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/fixtures/fixtures-dev.json +474 -474
  26. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/manage.py +23 -23
  27. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/pyproject.toml +275 -271
  28. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/scripts/unix/install_requirements.sh +3 -3
  29. django_dynamic_admin_forms-3.2.13/scripts/unix/publish_to_pypi.sh +4 -0
  30. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/scripts/windows/install_requirements.ps1 +2 -2
  31. django_dynamic_admin_forms-3.2.13/scripts/windows/publish_to_pypi.ps1 +3 -0
  32. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/settings.py +86 -86
  33. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/admin.py +76 -76
  34. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/migrations/0004_skill_customer_skills.py +25 -25
  35. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/models.py +47 -47
  36. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/urls.py +23 -23
  37. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/tests/test_admin_generic.py +69 -69
  38. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/tests/test_admin_unit.py +140 -140
  39. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/uv.lock +1244 -1007
  40. django_dynamic_admin_forms-3.2.12/scripts/unix/publish_to_pypi.sh +0 -4
  41. django_dynamic_admin_forms-3.2.12/scripts/windows/publish_to_pypi.ps1 +0 -3
  42. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.ambient-package-update/templates/snippets/content.tpl +0 -0
  43. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.ambient-package-update/templates/snippets/installation.tpl +0 -0
  44. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.python-version +0 -0
  45. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/django_dynamic_admin_forms/apps.py +0 -0
  46. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/django_dynamic_admin_forms/static/js/dynamic_admin.js +0 -0
  47. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/docs/demo.gif +0 -0
  48. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/cypress/integration/dynamic-select.spec.js +0 -0
  49. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/cypress/plugins/index.js +0 -0
  50. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/cypress/support/commands.js +0 -0
  51. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/cypress/support/index.js +0 -0
  52. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/cypress/support/paths.js +0 -0
  53. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/cypress.json +0 -0
  54. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/package.json +0 -0
  55. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/yarn.lock +0 -0
  56. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/__init__.py +0 -0
  57. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/apps.py +0 -0
  58. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/migrations/0001_initial.py +0 -0
  59. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/migrations/0002_extend_example.py +0 -0
  60. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/migrations/0003_example_file_field.py +0 -0
  61. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/migrations/__init__.py +0 -0
  62. {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/tests/__init__.py +0 -0
@@ -1,53 +1,53 @@
1
- from ambient_package_update.metadata.author import PackageAuthor
2
- from ambient_package_update.metadata.constants import (
3
- DEV_DEPENDENCIES,
4
- SUPPORTED_DJANGO_VERSIONS,
5
- SUPPORTED_PYTHON_VERSIONS,
6
- )
7
- from ambient_package_update.metadata.maintainer import PackageMaintainer
8
- from ambient_package_update.metadata.package import PackageMetadata
9
- from ambient_package_update.metadata.readme import ReadmeContent
10
- from ambient_package_update.metadata.ruff_ignored_inspection import RuffIgnoredInspection
11
-
12
- METADATA = PackageMetadata(
13
- package_name="django-dynamic-admin-forms",
14
- github_package_group="ambient-innovation",
15
- github_package_name="django_dynamic_admin",
16
- licenser="Ambient Innovation: GmbH",
17
- authors=[
18
- PackageAuthor(
19
- name="Ambient Digital",
20
- email="hello@ambient.digital",
21
- ),
22
- PackageAuthor(
23
- name="Fabian Binz",
24
- email="fabian.binz@ambient.digital",
25
- ),
26
- ],
27
- maintainer=PackageMaintainer(name="Ambient Digital", url="https://ambient.digital/", email="hello@ambient.digital"),
28
- license_year=2022,
29
- development_status="5 - Production/Stable",
30
- has_migrations=False,
31
- main_branch="main",
32
- claim="Add simple dynamic interaction to the otherwise static django admin.",
33
- readme_content=ReadmeContent(
34
- tagline="Add simple interactions to the otherwise static django admin.",
35
- ),
36
- supported_django_versions=SUPPORTED_DJANGO_VERSIONS,
37
- supported_python_versions=SUPPORTED_PYTHON_VERSIONS,
38
- dependencies=[
39
- f"Django>={SUPPORTED_DJANGO_VERSIONS[0]}",
40
- ],
41
- optional_dependencies={
42
- "dev": [
43
- *DEV_DEPENDENCIES,
44
- "unittest-parametrize~=1.4",
45
- ],
46
- },
47
- ruff_ignore_list=[
48
- RuffIgnoredInspection(
49
- key="RUF012", comment="Mutable class attributes should be annotated with `typing.ClassVar`"
50
- ),
51
- RuffIgnoredInspection(key="TRY003", comment="Avoid specifying long messages outside the exception class"),
52
- ],
53
- )
1
+ from ambient_package_update.metadata.author import PackageAuthor
2
+ from ambient_package_update.metadata.constants import (
3
+ DEV_DEPENDENCIES,
4
+ SUPPORTED_DJANGO_VERSIONS,
5
+ SUPPORTED_PYTHON_VERSIONS,
6
+ )
7
+ from ambient_package_update.metadata.maintainer import PackageMaintainer
8
+ from ambient_package_update.metadata.package import PackageMetadata
9
+ from ambient_package_update.metadata.readme import ReadmeContent
10
+ from ambient_package_update.metadata.ruff_ignored_inspection import RuffIgnoredInspection
11
+
12
+ METADATA = PackageMetadata(
13
+ package_name="django-dynamic-admin-forms",
14
+ github_package_group="ambient-innovation",
15
+ github_package_name="django_dynamic_admin",
16
+ licenser="Ambient Innovation: GmbH",
17
+ authors=[
18
+ PackageAuthor(
19
+ name="Ambient Digital",
20
+ email="hello@ambient.digital",
21
+ ),
22
+ PackageAuthor(
23
+ name="Fabian Binz",
24
+ email="fabian.binz@ambient.digital",
25
+ ),
26
+ ],
27
+ maintainer=PackageMaintainer(name="Ambient Digital", url="https://ambient.digital/", email="hello@ambient.digital"),
28
+ license_year=2022,
29
+ development_status="5 - Production/Stable",
30
+ has_migrations=False,
31
+ main_branch="main",
32
+ claim="Add simple dynamic interaction to the otherwise static django admin.",
33
+ readme_content=ReadmeContent(
34
+ tagline="Add simple interactions to the otherwise static django admin.",
35
+ ),
36
+ supported_django_versions=SUPPORTED_DJANGO_VERSIONS,
37
+ supported_python_versions=SUPPORTED_PYTHON_VERSIONS,
38
+ dependencies=[
39
+ f"Django>={SUPPORTED_DJANGO_VERSIONS[0]}",
40
+ ],
41
+ optional_dependencies={
42
+ "dev": [
43
+ *DEV_DEPENDENCIES,
44
+ "unittest-parametrize~=1.4",
45
+ ],
46
+ },
47
+ ruff_ignore_list=[
48
+ RuffIgnoredInspection(
49
+ key="RUF012", comment="Mutable class attributes should be annotated with `typing.ClassVar`"
50
+ ),
51
+ RuffIgnoredInspection(key="TRY003", comment="Avoid specifying long messages outside the exception class"),
52
+ ],
53
+ )
@@ -1,17 +1,17 @@
1
- # http://editorconfig.org
2
-
3
- root = true
4
-
5
- [*]
6
- charset = utf-8
7
- end_of_line = lf
8
- insert_final_newline = true
9
- trim_trailing_whitespace = true
10
-
11
- [*.{py,rst,ini}]
12
- indent_style = space
13
- indent_size = 4
14
-
15
- [*.yml]
16
- indent_style = space
17
- indent_size = 2
1
+ # http://editorconfig.org
2
+
3
+ root = true
4
+
5
+ [*]
6
+ charset = utf-8
7
+ end_of_line = lf
8
+ insert_final_newline = true
9
+ trim_trailing_whitespace = true
10
+
11
+ [*.{py,rst,ini}]
12
+ indent_style = space
13
+ indent_size = 4
14
+
15
+ [*.yml]
16
+ indent_style = space
17
+ indent_size = 2
@@ -0,0 +1,11 @@
1
+ name: Unit tests
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+
9
+ jobs:
10
+ ci:
11
+ uses: ./.github/workflows/quality-gate.yml
@@ -1,94 +1,91 @@
1
- name: Unit tests
2
-
3
- on:
4
- push:
5
- branches:
6
- - main
7
- pull_request:
8
-
9
- jobs:
10
- linting:
11
- runs-on: ubuntu-24.04
12
- steps:
13
- - uses: actions/checkout@v4
14
-
15
- - name: Set up Python 3.13
16
- uses: actions/setup-python@v5
17
- with:
18
- python-version: "3.13"
19
-
20
- - name: Install required packages
21
- run: pip install pre-commit
22
-
23
- - name: Run pre-commit hooks
24
- run: pre-commit run --all-files
25
-
26
- tests:
27
- name: Python ${{ matrix.python-version }}, django ${{ matrix.django-version }}
28
- runs-on: ubuntu-24.04
29
- strategy:
30
- matrix:
31
- python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', ]
32
- django-version: ['42', '52', '60', ]
33
-
34
- exclude:
35
- - python-version: '3.11'
36
- django-version: 60
37
- - python-version: '3.10'
38
- django-version: 60
39
- - python-version: '3.9'
40
- django-version: 52
41
- - python-version: "3.13"
42
- django-version: 42
43
-
44
- steps:
45
- - uses: actions/checkout@v4
46
- - name: setup python
47
- uses: actions/setup-python@v5
48
- with:
49
- python-version: ${{ matrix.python-version }}
50
- - name: Install uv
51
- uses: astral-sh/setup-uv@v5
52
- - name: Install tox
53
- run: uv pip install --system tox tox-uv
54
- - name: Run Tests
55
- env:
56
- TOXENV: django${{ matrix.django-version }}
57
- run: tox
58
- - name: Upload coverage data
59
- uses: actions/upload-artifact@v4
60
- with:
61
- name: coverage-data-${{ matrix.python-version }}-${{ matrix.django-version }}
62
- path: '${{ github.workspace }}/.coverage'
63
- include-hidden-files: true
64
- if-no-files-found: error
65
-
66
- coverage:
67
- name: Coverage
68
- runs-on: ubuntu-24.04
69
- needs: tests
70
- steps:
71
- - uses: actions/checkout@v4
72
-
73
- - uses: actions/setup-python@v5
74
- with:
75
- python-version: '3.13'
76
-
77
- - name: Install dependencies
78
- run: python -m pip install --upgrade coverage[toml]
79
-
80
- - name: Download data
81
- uses: actions/download-artifact@v4
82
- with:
83
- path: ${{ github.workspace }}/coverage-reports
84
- pattern: coverage-data-*
85
- merge-multiple: false
86
-
87
- - name: Combine coverage and fail if it's <100.0%
88
- run: |
89
- python -m coverage combine coverage-reports/*/.coverage
90
- python -m coverage xml
91
- python -m coverage html --skip-covered --skip-empty
92
- python -m coverage report --fail-under=100.0
93
- echo "## Coverage summary" >> $GITHUB_STEP_SUMMARY
94
- python -m coverage report --format=markdown >> $GITHUB_STEP_SUMMARY
1
+ name: CI jobs
2
+
3
+ on:
4
+ workflow_call:
5
+
6
+ jobs:
7
+ linting:
8
+ runs-on: ubuntu-24.04
9
+ steps:
10
+ - uses: actions/checkout@v6
11
+
12
+ - name: Set up Python 3.13
13
+ uses: actions/setup-python@v6
14
+ with:
15
+ python-version: "3.13"
16
+
17
+ - name: Install required packages
18
+ run: pip install pre-commit
19
+
20
+ - name: Run pre-commit hooks
21
+ run: pre-commit run --all-files
22
+
23
+ tests:
24
+ name: Python ${{ matrix.python-version }}, django ${{ matrix.django-version }}
25
+ runs-on: ubuntu-24.04
26
+ strategy:
27
+ matrix:
28
+ python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', ]
29
+ django-version: ['42', '52', '60', ]
30
+
31
+ exclude:
32
+ - python-version: '3.11'
33
+ django-version: 60
34
+ - python-version: '3.10'
35
+ django-version: 60
36
+ - python-version: '3.9'
37
+ django-version: 52
38
+ - python-version: "3.13"
39
+ django-version: 42
40
+
41
+ steps:
42
+ - uses: actions/checkout@v6
43
+ - name: setup python
44
+ uses: actions/setup-python@v6
45
+ with:
46
+ python-version: ${{ matrix.python-version }}
47
+ - name: Install uv
48
+ uses: astral-sh/setup-uv@v8.0.0
49
+ - name: Install tox
50
+ run: uv pip install --system tox tox-uv
51
+ - name: Run Tests
52
+ env:
53
+ TOXENV: django${{ matrix.django-version }}
54
+ run: tox
55
+ - name: Upload coverage data
56
+ uses: actions/upload-artifact@v7
57
+ with:
58
+ name: coverage-data-${{ matrix.python-version }}-${{ matrix.django-version }}
59
+ path: '${{ github.workspace }}/.coverage'
60
+ include-hidden-files: true
61
+ if-no-files-found: error
62
+
63
+ coverage:
64
+ name: Coverage
65
+ runs-on: ubuntu-24.04
66
+ needs: tests
67
+ steps:
68
+ - uses: actions/checkout@v6
69
+
70
+ - uses: actions/setup-python@v6
71
+ with:
72
+ python-version: '3.13'
73
+
74
+ - name: Install dependencies
75
+ run: python -m pip install --upgrade coverage[toml]
76
+
77
+ - name: Download data
78
+ uses: actions/download-artifact@v8
79
+ with:
80
+ path: ${{ github.workspace }}/coverage-reports
81
+ pattern: coverage-data-*
82
+ merge-multiple: false
83
+
84
+ - name: Combine coverage and fail if it's <100.0%
85
+ run: |
86
+ python -m coverage combine coverage-reports/*/.coverage
87
+ python -m coverage xml
88
+ python -m coverage html --skip-covered --skip-empty
89
+ python -m coverage report --fail-under=100.0
90
+ echo "## Coverage summary" >> $GITHUB_STEP_SUMMARY
91
+ python -m coverage report --format=markdown >> $GITHUB_STEP_SUMMARY
@@ -0,0 +1,115 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ # Restrictive default — each job declares only what it needs
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ ci:
14
+ uses: ./.github/workflows/quality-gate.yml
15
+
16
+ build:
17
+ name: Build distribution packages
18
+ runs-on: ubuntu-24.04
19
+ needs: ci
20
+ permissions:
21
+ contents: read
22
+ steps:
23
+ - uses: actions/checkout@v6
24
+
25
+ - name: Set up Python 3.13
26
+ uses: actions/setup-python@v6
27
+ with:
28
+ python-version: "3.13"
29
+
30
+ - name: Install uv
31
+ uses: astral-sh/setup-uv@v8.0.0
32
+
33
+ - name: Build packages
34
+ run: uv build
35
+
36
+ - name: Upload distribution packages
37
+ uses: actions/upload-artifact@v7
38
+ with:
39
+ name: dist
40
+ path: dist/
41
+ if-no-files-found: error
42
+
43
+ sign:
44
+ name: Sign distribution packages
45
+ runs-on: ubuntu-24.04
46
+ needs: build
47
+ permissions:
48
+ id-token: write # required for Sigstore OIDC signing
49
+ contents: read
50
+ steps:
51
+ - name: Download distribution packages
52
+ uses: actions/download-artifact@v8
53
+ with:
54
+ name: dist
55
+ path: dist/
56
+
57
+ - name: Sign packages with Sigstore
58
+ uses: sigstore/gh-action-sigstore-python@v3.3.0
59
+ with:
60
+ inputs: >-
61
+ ./dist/*.tar.gz
62
+ ./dist/*.whl
63
+
64
+ - name: Upload signed distribution packages
65
+ uses: actions/upload-artifact@v7
66
+ with:
67
+ name: dist-signed
68
+ path: dist/
69
+ if-no-files-found: error
70
+
71
+ github-release:
72
+ name: Create GitHub Release
73
+ runs-on: ubuntu-24.04
74
+ needs: sign
75
+ permissions:
76
+ contents: write # required to create GitHub releases
77
+ steps:
78
+ - name: Download signed distribution packages
79
+ uses: actions/download-artifact@v8
80
+ with:
81
+ name: dist-signed
82
+ path: dist/
83
+
84
+ - name: Create GitHub Release
85
+ env:
86
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
87
+ run: |
88
+ shopt -s failglob
89
+ gh release create "${{ github.ref_name }}" \
90
+ --repo "${{ github.repository }}" \
91
+ --generate-notes \
92
+ dist/*
93
+
94
+ publish-pypi:
95
+ name: Publish to PyPI
96
+ runs-on: ubuntu-24.04
97
+ needs: sign
98
+ environment: pypi
99
+ permissions:
100
+ id-token: write # required for PyPI Trusted Publisher OIDC auth
101
+ contents: read
102
+ steps:
103
+ - name: Download signed distribution packages
104
+ uses: actions/download-artifact@v8
105
+ with:
106
+ name: dist-signed
107
+ path: dist/
108
+
109
+ - name: Remove Sigstore bundles (PyPI only accepts .whl and .tar.gz)
110
+ run: rm dist/*.sigstore.json
111
+
112
+ - name: Publish to PyPI
113
+ uses: pypa/gh-action-pypi-publish@release/v1
114
+ # Sigstore attestations are generated and uploaded to PyPI automatically
115
+ # when using Trusted Publishing — no extra configuration needed.