dotenvmodel 0.5.0__tar.gz → 0.5.2__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.
- dotenvmodel-0.5.2/.github/workflows/publish.yml +125 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/.github/workflows/release-please.yml +0 -2
- dotenvmodel-0.5.2/.release-please-manifest.json +3 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/CHANGELOG.md +14 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/PKG-INFO +1 -1
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/__init__.py +1 -1
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/pyproject.toml +1 -1
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/release-please-config.json +2 -2
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/uv.lock +1 -1
- dotenvmodel-0.5.0/.github/workflows/publish.yml +0 -46
- dotenvmodel-0.5.0/.release-please-manifest.json +0 -3
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/.github/CODEOWNERS +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/.github/dependabot.yml +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/.github/pull_request_template.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/.github/workflows/ci.yml +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/.github/workflows/docs.yml +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/.gitignore +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/.python-version +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/CODE_OF_CONDUCT.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/CONTRIBUTING.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/LICENSE +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/Makefile +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/README.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/SECURITY.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/api-reference/coercion.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/api-reference/config.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/api-reference/constants.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/api-reference/describe-formatters.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/api-reference/describe-renderers.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/api-reference/describe.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/api-reference/dotenvmodel.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/api-reference/exceptions.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/api-reference/fields.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/api-reference/loading.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/api-reference/logging-config.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/api-reference/metaclass.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/api-reference/types.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/api-reference/validation.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/changelog.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/examples/complete-app.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/getting-started/installation.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/getting-started/quick-start.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/guides/configuration-docs.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/guides/error-handling.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/guides/fields.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/guides/loading.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/guides/logging.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/guides/prefixes.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/guides/types.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/guides/validation.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/docs/index.md +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/_constants.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/_redaction.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/coercion.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/config.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/describe/__init__.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/describe/formatters.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/describe/renderers.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/exceptions.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/fields.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/loading.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/logging_config.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/metaclass.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/py.typed +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/types.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/dotenvmodel/validation.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/examples/advanced_types.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/examples/basic_usage.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/examples/describe_documentation.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/examples/generate_env_example.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/examples/logging_example.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/mkdocs.yml +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/__init__.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/conftest.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_basic.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_coercion.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_collection_validators.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_defaults_coercion.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_describe.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_edge_adoption.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_edge_datetime.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_edge_describe_output.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_edge_enum.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_edge_field_options.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_edge_numbers.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_edge_path_options.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_edge_strings.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_empty_collection_items.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_empty_strings.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_enum.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_errors.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_field_constraints.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_future_annotations.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_inheritance.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_json.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_json_and_optional.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_loading.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_logging_config.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_nested_config.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_post_load.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_prefix.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_reload.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_secret_redaction.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_secretstr_security.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_string_affixes.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_strip.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_strip_integration.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_types.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_union_types.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_url_dsn.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_url_password_decoding.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_url_unquote.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_urls.py +0 -0
- {dotenvmodel-0.5.0 → dotenvmodel-0.5.2}/tests/test_validator.py +0 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
workflow_call:
|
|
8
|
+
inputs:
|
|
9
|
+
release_created:
|
|
10
|
+
required: true
|
|
11
|
+
type: boolean
|
|
12
|
+
tag_name:
|
|
13
|
+
required: true
|
|
14
|
+
type: string
|
|
15
|
+
workflow_dispatch:
|
|
16
|
+
inputs:
|
|
17
|
+
tag_name:
|
|
18
|
+
description: Existing tag to build and publish (e.g. v0.2.0)
|
|
19
|
+
required: true
|
|
20
|
+
type: string
|
|
21
|
+
|
|
22
|
+
permissions:
|
|
23
|
+
contents: read
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
build:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
if: ${{ github.event_name != 'workflow_call' || inputs.release_created }}
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v7
|
|
31
|
+
with:
|
|
32
|
+
ref: ${{ inputs.tag_name || github.ref }}
|
|
33
|
+
|
|
34
|
+
- name: Install uv
|
|
35
|
+
uses: astral-sh/setup-uv@v8.3.2
|
|
36
|
+
with:
|
|
37
|
+
enable-cache: true
|
|
38
|
+
|
|
39
|
+
- name: Set up Python
|
|
40
|
+
run: uv python install 3.12
|
|
41
|
+
|
|
42
|
+
- name: Verify tag matches pyproject.toml version
|
|
43
|
+
env:
|
|
44
|
+
TAG_NAME: ${{ inputs.tag_name || github.ref_name }}
|
|
45
|
+
run: |
|
|
46
|
+
set -euo pipefail
|
|
47
|
+
tag="${TAG_NAME#v}"
|
|
48
|
+
version="$(uv run python -c 'import importlib.metadata; print(importlib.metadata.version("dotenvmodel"))')"
|
|
49
|
+
echo "Tag: ${tag}"
|
|
50
|
+
echo "pyproject.toml version: ${version}"
|
|
51
|
+
if [ "${tag}" != "${version}" ]; then
|
|
52
|
+
echo "::error::Git tag ${tag} does not match pyproject.toml version ${version}"
|
|
53
|
+
exit 1
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
- name: Build sdist and wheel
|
|
57
|
+
run: uv build
|
|
58
|
+
|
|
59
|
+
- name: Assert wheel ships required non-code artifacts
|
|
60
|
+
run: |
|
|
61
|
+
set -euo pipefail
|
|
62
|
+
listing="$(uv run python -m zipfile -l dist/*.whl)"
|
|
63
|
+
echo "$listing" | grep -q "dotenvmodel/py.typed"
|
|
64
|
+
|
|
65
|
+
- name: Test installation from wheel
|
|
66
|
+
run: |
|
|
67
|
+
uv venv test-env
|
|
68
|
+
uv pip install --python test-env/bin/python dist/*.whl
|
|
69
|
+
cd /tmp && $GITHUB_WORKSPACE/test-env/bin/python -c "import dotenvmodel; print(dotenvmodel.__version__)"
|
|
70
|
+
|
|
71
|
+
- name: Upload build artifacts
|
|
72
|
+
uses: actions/upload-artifact@v7.0.1
|
|
73
|
+
with:
|
|
74
|
+
name: release-dist
|
|
75
|
+
path: dist/
|
|
76
|
+
retention-days: 7
|
|
77
|
+
|
|
78
|
+
publish:
|
|
79
|
+
needs: [build]
|
|
80
|
+
runs-on: ubuntu-latest
|
|
81
|
+
environment:
|
|
82
|
+
name: pypi
|
|
83
|
+
url: https://pypi.org/project/dotenvmodel/
|
|
84
|
+
permissions:
|
|
85
|
+
id-token: write
|
|
86
|
+
steps:
|
|
87
|
+
- name: Download build artifacts
|
|
88
|
+
uses: actions/download-artifact@v8.0.1
|
|
89
|
+
with:
|
|
90
|
+
name: release-dist
|
|
91
|
+
path: dist/
|
|
92
|
+
|
|
93
|
+
- name: Publish to PyPI
|
|
94
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
95
|
+
with:
|
|
96
|
+
# Attestations are only valid when publish.yml is the top-level
|
|
97
|
+
# workflow: the Sigstore certificate's Build Config URI records the
|
|
98
|
+
# top-level workflow, and PyPI verifies it against the trusted
|
|
99
|
+
# publisher (publish.yml). Via workflow_call from release-please.yml
|
|
100
|
+
# the certificate says release-please.yml instead, which PyPI
|
|
101
|
+
# rejects with a 400 (attestations under reusable workflows are
|
|
102
|
+
# unsupported). The OIDC token validates on both paths because PyPI
|
|
103
|
+
# matches it against job_workflow_ref (publish.yml).
|
|
104
|
+
attestations: ${{ github.event_name != 'workflow_call' }}
|
|
105
|
+
|
|
106
|
+
# Trusted Publishing (OIDC): no API token is stored in this repo.
|
|
107
|
+
# The PyPI trusted publisher is configured for:
|
|
108
|
+
# Repository: AZX-PBC-OSS/dotenvmodel
|
|
109
|
+
# Workflow: publish.yml
|
|
110
|
+
# Environment: (Any)
|
|
111
|
+
# This workflow is invoked three ways:
|
|
112
|
+
# 1. Direct push of a v* tag (manual fallback path).
|
|
113
|
+
# 2. workflow_call from release-please.yml after release-please creates a
|
|
114
|
+
# release (tags made with GITHUB_TOKEN don't trigger push workflows, so
|
|
115
|
+
# release-please.yml calls this workflow explicitly).
|
|
116
|
+
# 3. workflow_dispatch with an existing tag name (manual republish, e.g.
|
|
117
|
+
# recovering a failed automated publish).
|
|
118
|
+
# The PyPI publisher stays valid for all paths because it targets
|
|
119
|
+
# publish.yml — the file containing the publish job. For reusable-workflow
|
|
120
|
+
# calls, PyPI matches the OIDC token against the called workflow's filename
|
|
121
|
+
# (job_workflow_ref), which is still this one. Sigstore attestations are the
|
|
122
|
+
# exception: their certificate records the TOP-LEVEL workflow, so they are
|
|
123
|
+
# only enabled when publish.yml runs top-level (paths 1 and 3); see the
|
|
124
|
+
# attestations input on the publish step.
|
|
125
|
+
# See https://docs.pypi.org/trusted-publishers/ for setup details.
|
|
@@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.5.2](https://github.com/AZX-PBC-OSS/dotenvmodel/compare/v0.5.1...v0.5.2) (2026-07-22)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Continuous Integration
|
|
12
|
+
|
|
13
|
+
* standardize publish workflow on org template (pypa action, conditional attestations) ([#42](https://github.com/AZX-PBC-OSS/dotenvmodel/issues/42)) ([32960d4](https://github.com/AZX-PBC-OSS/dotenvmodel/commit/32960d404867e044b9287644319de805459e15df))
|
|
14
|
+
|
|
15
|
+
## [0.5.1](https://github.com/AZX-PBC-OSS/dotenvmodel/compare/v0.5.0...v0.5.1) (2026-07-22)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Continuous Integration
|
|
19
|
+
|
|
20
|
+
* activate release-please manifest mode; fix stale version seeds ([#40](https://github.com/AZX-PBC-OSS/dotenvmodel/issues/40)) ([91fb40a](https://github.com/AZX-PBC-OSS/dotenvmodel/commit/91fb40acb5a176b8dcb8a269c008f4ca7c5c7219))
|
|
21
|
+
|
|
8
22
|
## [0.5.0](https://github.com/AZX-PBC-OSS/dotenvmodel/compare/v0.4.0...v0.5.0) (2026-07-21)
|
|
9
23
|
|
|
10
24
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dotenvmodel
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.2
|
|
4
4
|
Summary: Type-safe environment configuration with automatic .env file loading
|
|
5
5
|
Project-URL: Homepage, https://github.com/AZX-PBC-OSS/dotenvmodel
|
|
6
6
|
Project-URL: Repository, https://github.com/AZX-PBC-OSS/dotenvmodel
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"release-type": "python",
|
|
3
3
|
"package-name": "dotenvmodel",
|
|
4
|
+
"include-component-in-tag": false,
|
|
4
5
|
"packages": {
|
|
5
6
|
".": {
|
|
6
7
|
"component": "dotenvmodel",
|
|
@@ -9,8 +10,7 @@
|
|
|
9
10
|
"extra-files": [
|
|
10
11
|
{
|
|
11
12
|
"type": "generic",
|
|
12
|
-
"path": "dotenvmodel/__init__.py"
|
|
13
|
-
"jsonpath": "$.__version__"
|
|
13
|
+
"path": "dotenvmodel/__init__.py"
|
|
14
14
|
}
|
|
15
15
|
]
|
|
16
16
|
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
name: Publish to PyPI
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
workflow_call:
|
|
5
|
-
inputs:
|
|
6
|
-
release_created:
|
|
7
|
-
required: true
|
|
8
|
-
type: boolean
|
|
9
|
-
tag_name:
|
|
10
|
-
required: true
|
|
11
|
-
type: string
|
|
12
|
-
release:
|
|
13
|
-
types: [published]
|
|
14
|
-
workflow_dispatch:
|
|
15
|
-
|
|
16
|
-
permissions:
|
|
17
|
-
id-token: write
|
|
18
|
-
contents: read
|
|
19
|
-
|
|
20
|
-
jobs:
|
|
21
|
-
publish:
|
|
22
|
-
runs-on: ubuntu-latest
|
|
23
|
-
if: inputs.release_created || github.event_name == 'release' || github.event_name == 'workflow_dispatch'
|
|
24
|
-
|
|
25
|
-
steps:
|
|
26
|
-
- uses: actions/checkout@v7
|
|
27
|
-
|
|
28
|
-
- name: Install uv
|
|
29
|
-
uses: astral-sh/setup-uv@v7
|
|
30
|
-
with:
|
|
31
|
-
version: "latest"
|
|
32
|
-
|
|
33
|
-
- name: Set up Python
|
|
34
|
-
run: uv python install
|
|
35
|
-
|
|
36
|
-
- name: Install dependencies
|
|
37
|
-
run: uv sync --all-extras --group dev
|
|
38
|
-
|
|
39
|
-
- name: Run tests
|
|
40
|
-
run: uv run pytest tests/ -v
|
|
41
|
-
|
|
42
|
-
- name: Build package
|
|
43
|
-
run: uv build
|
|
44
|
-
|
|
45
|
-
- name: Publish to PyPI
|
|
46
|
-
run: uv publish
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|