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.
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.ambient-package-update/metadata.py +53 -53
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.editorconfig +17 -17
- django_dynamic_admin_forms-3.2.13/.github/workflows/ci.yml +11 -0
- 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
- django_dynamic_admin_forms-3.2.13/.github/workflows/release.yml +115 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.gitignore +160 -160
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.pre-commit-config.yaml +59 -59
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.readthedocs.yaml +31 -31
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/CHANGES.md +149 -146
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/CONTRIBUTING.md +75 -75
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/LICENSE.md +21 -21
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/MANIFEST.in +4 -4
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/PKG-INFO +27 -36
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/README.md +214 -224
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/SECURITY.md +18 -18
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/django_dynamic_admin_forms/__init__.py +3 -3
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/django_dynamic_admin_forms/admin.py +80 -80
- {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
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/django_dynamic_admin_forms/urls.py +8 -8
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/docs/Makefile +20 -20
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/docs/conf.py +81 -81
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/docs/features/changelog.rst +1 -1
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/docs/index.rst +7 -7
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/docs/make.bat +35 -35
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/fixtures/fixtures-dev.json +474 -474
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/manage.py +23 -23
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/pyproject.toml +275 -271
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/scripts/unix/install_requirements.sh +3 -3
- django_dynamic_admin_forms-3.2.13/scripts/unix/publish_to_pypi.sh +4 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/scripts/windows/install_requirements.ps1 +2 -2
- django_dynamic_admin_forms-3.2.13/scripts/windows/publish_to_pypi.ps1 +3 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/settings.py +86 -86
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/admin.py +76 -76
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/migrations/0004_skill_customer_skills.py +25 -25
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/models.py +47 -47
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/urls.py +23 -23
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/tests/test_admin_generic.py +69 -69
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/tests/test_admin_unit.py +140 -140
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/uv.lock +1244 -1007
- django_dynamic_admin_forms-3.2.12/scripts/unix/publish_to_pypi.sh +0 -4
- django_dynamic_admin_forms-3.2.12/scripts/windows/publish_to_pypi.ps1 +0 -3
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.ambient-package-update/templates/snippets/content.tpl +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.ambient-package-update/templates/snippets/installation.tpl +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/.python-version +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/django_dynamic_admin_forms/apps.py +0 -0
- {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
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/docs/demo.gif +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/cypress/integration/dynamic-select.spec.js +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/cypress/plugins/index.js +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/cypress/support/commands.js +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/cypress/support/index.js +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/cypress/support/paths.js +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/cypress.json +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/package.json +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/e2e/yarn.lock +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/__init__.py +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/apps.py +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/migrations/0001_initial.py +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/migrations/0002_extend_example.py +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/migrations/0003_example_file_field.py +0 -0
- {django_dynamic_admin_forms-3.2.12 → django_dynamic_admin_forms-3.2.13}/testapp/migrations/__init__.py +0 -0
- {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
|
|
@@ -1,94 +1,91 @@
|
|
|
1
|
-
name:
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
- name:
|
|
21
|
-
run:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
- name:
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
python -m coverage
|
|
90
|
-
|
|
91
|
-
python -m coverage
|
|
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.
|