aiogram-cmds 0.2.0__tar.gz → 0.3.0__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.
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.github/workflows/ci.yml +2 -2
- aiogram_cmds-0.3.0/.github/workflows/native.yml +88 -0
- aiogram_cmds-0.3.0/.github/workflows/publish-native.yml +65 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.gitignore +4 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/CHANGELOG.md +12 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/PKG-INFO +13 -1
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/README.md +7 -0
- aiogram_cmds-0.3.0/benchmarks/pyperf_suite.py +24 -0
- aiogram_cmds-0.3.0/benchmarks/run.py +474 -0
- aiogram_cmds-0.3.0/docs/compiled-profiles.md +79 -0
- aiogram_cmds-0.3.0/examples/compiled_profiles.py +28 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/mkdocs.yml +1 -0
- aiogram_cmds-0.3.0/native/BENCHMARKS.md +18 -0
- aiogram_cmds-0.3.0/native/Cargo.lock +758 -0
- aiogram_cmds-0.3.0/native/Cargo.toml +23 -0
- aiogram_cmds-0.3.0/native/LICENSE +21 -0
- aiogram_cmds-0.3.0/native/README.md +16 -0
- aiogram_cmds-0.3.0/native/benches/core.rs +34 -0
- aiogram_cmds-0.3.0/native/pyproject.toml +17 -0
- aiogram_cmds-0.3.0/native/src/lib.rs +183 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/pyproject.toml +9 -1
- aiogram_cmds-0.3.0/reports/implementation/0.3.0-performance-rust.md +81 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/__init__.py +15 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/apply.py +14 -57
- aiogram_cmds-0.3.0/src/aiogram_cmds/compiled.py +302 -0
- aiogram_cmds-0.3.0/src/aiogram_cmds/compiled_delivery.py +59 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/delivery.py +23 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/dynamic.py +6 -7
- aiogram_cmds-0.3.0/src/aiogram_cmds/engines.py +68 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/manager.py +73 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/registry.py +2 -2
- aiogram_cmds-0.3.0/src/aiogram_cmds/scopes.py +63 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/version.py +1 -1
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/integration/test_examples.py +3 -1
- aiogram_cmds-0.3.0/tests/unit/test_compiled.py +310 -0
- aiogram_cmds-0.3.0/tools/smoke_native.py +16 -0
- aiogram_cmds-0.3.0/tools/verify_native_artifacts.py +285 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/uv.lock +451 -91
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.cursorignore +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.gitattributes +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.github/CODEOWNERS +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.github/ISSUE_TEMPLATE/documentation_issue.yml +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.github/ISSUE_TEMPLATE/performance_issue.yml +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.github/ISSUE_TEMPLATE/question_help.yml +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.github/dependabot.yml +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.github/workflows/docs.yml +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.github/workflows/pr-management.yml +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/.github/workflows/release.yml +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/CHANGES/README.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/CODE_OF_CONDUCT.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/CONTRIBUTING.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/DEPLOYMENT.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/LICENSE +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/SECURITY.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/ARCHITECTURE.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/ROADMAP.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/TESTING.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/api/configuration.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/api/core.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/api/translator.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/command-registration-guide.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/configuration.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/deployment-guide.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/faq.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/i18n.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/index.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/installation.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/migration-0.2.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/performance.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/quickstart.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/release.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/releasing.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/troubleshooting.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/tutorials/advanced-profiles.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/tutorials/basic-setup.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/tutorials/dynamic-commands.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/tutorials/i18n-integration.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/docs/verification.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/examples/README.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/examples/application_profiles.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/examples/basic_bot.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/examples/dynamic_bot.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/examples/i18n_bot.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/examples/locales/en/LC_MESSAGES/messages.po +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/examples/locales/es/LC_MESSAGES/messages.po +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/examples/locales/ru/LC_MESSAGES/messages.po +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/examples/profile_based_bot.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/reports/README.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/reports/application-profiles-0.2.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/reports/shared-repository-conventions.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/auto_setup.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/builder.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/builders_configured.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/customize.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/policy.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/py.typed +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/setters.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/settings.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/src/aiogram_cmds/translator.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/conftest.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/integration/conftest.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/integration/test_full_workflow.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/perf/conftest.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/perf/test_benchmarks.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/unit/test_adapter_contracts.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/unit/test_apply.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/unit/test_auto_setup.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/unit/test_builder.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/unit/test_delivery.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/unit/test_manager.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/unit/test_manager_failures.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/unit/test_package_metadata.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/unit/test_policy.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/unit/test_registry.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/unit/test_setters.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/unit/test_settings.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tests/unit/test_translator.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tools/README.md +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tools/check_version_tag.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tools/deploy.ps1 +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tools/deploy.sh +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tools/gen_tree.py +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tools/i18n/compile.ps1 +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tools/i18n/extract.ps1 +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tools/i18n/init.ps1 +0 -0
- {aiogram_cmds-0.2.0 → aiogram_cmds-0.3.0}/tools/i18n/update.ps1 +0 -0
|
@@ -39,7 +39,7 @@ jobs:
|
|
|
39
39
|
strategy:
|
|
40
40
|
fail-fast: false
|
|
41
41
|
matrix:
|
|
42
|
-
python: ['3.10', '3.11', '3.12', '3.13']
|
|
42
|
+
python: ['3.10', '3.11', '3.12', '3.13', '3.14']
|
|
43
43
|
steps:
|
|
44
44
|
- uses: actions/checkout@v6
|
|
45
45
|
- uses: astral-sh/setup-uv@v7
|
|
@@ -138,7 +138,7 @@ jobs:
|
|
|
138
138
|
for artifact in dist/*.whl dist/*.tar.gz; do
|
|
139
139
|
target=$(mktemp -d)
|
|
140
140
|
uv venv "$target/env" --python '${{ matrix.python }}'
|
|
141
|
-
uv pip install --python "$target/env/bin/python" "$artifact" '${{ matrix.aiogram }}' pytest '${{ matrix.asyncio }}' pytest-mock babel tomli
|
|
141
|
+
uv pip install --python "$target/env/bin/python" "$artifact" '${{ matrix.aiogram }}' pytest '${{ matrix.asyncio }}' pytest-mock babel tomli hypothesis
|
|
142
142
|
uv pip check --python "$target/env/bin/python"
|
|
143
143
|
cp -R tests examples "$target/"
|
|
144
144
|
cp pyproject.toml "$target/"
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
name: Native candidate
|
|
2
|
+
on:
|
|
3
|
+
pull_request:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
permissions:
|
|
6
|
+
contents: read
|
|
7
|
+
concurrency:
|
|
8
|
+
group: native-${{ github.ref }}
|
|
9
|
+
cancel-in-progress: true
|
|
10
|
+
jobs:
|
|
11
|
+
wheels:
|
|
12
|
+
strategy:
|
|
13
|
+
fail-fast: false
|
|
14
|
+
max-parallel: 5
|
|
15
|
+
matrix:
|
|
16
|
+
include:
|
|
17
|
+
- {os: ubuntu-latest, target: x86_64, manylinux: '2014'}
|
|
18
|
+
- {os: ubuntu-24.04-arm, target: aarch64, manylinux: '2014'}
|
|
19
|
+
- {os: ubuntu-latest, target: x86_64-unknown-linux-musl, manylinux: musllinux_1_2}
|
|
20
|
+
- {os: ubuntu-24.04-arm, target: aarch64-unknown-linux-musl, manylinux: musllinux_1_2}
|
|
21
|
+
- {os: macos-15-intel, target: x86_64, manylinux: auto}
|
|
22
|
+
- {os: macos-latest, target: aarch64, manylinux: auto}
|
|
23
|
+
- {os: windows-latest, target: x86_64, manylinux: auto}
|
|
24
|
+
runs-on: ${{ matrix.os }}
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v6
|
|
27
|
+
- uses: PyO3/maturin-action@v1
|
|
28
|
+
with:
|
|
29
|
+
target: ${{ matrix.target }}
|
|
30
|
+
manylinux: ${{ matrix.manylinux }}
|
|
31
|
+
args: --release --locked --manifest-path native/Cargo.toml --out native-dist
|
|
32
|
+
- if: matrix.manylinux == 'musllinux_1_2'
|
|
33
|
+
shell: bash
|
|
34
|
+
run: |
|
|
35
|
+
for version in 3.10 3.11 3.12 3.13 3.14; do
|
|
36
|
+
docker run --rm -v "$PWD:/work" -w /work "python:$version-alpine" sh -c 'pip install native-dist/*.whl && python tools/smoke_native.py'
|
|
37
|
+
done
|
|
38
|
+
- uses: actions/upload-artifact@v6
|
|
39
|
+
with:
|
|
40
|
+
name: native-${{ matrix.os }}-${{ matrix.target }}
|
|
41
|
+
path: native-dist/*.whl
|
|
42
|
+
runtime:
|
|
43
|
+
needs: wheels
|
|
44
|
+
runs-on: ${{ matrix.os }}
|
|
45
|
+
strategy:
|
|
46
|
+
fail-fast: false
|
|
47
|
+
max-parallel: 5
|
|
48
|
+
matrix:
|
|
49
|
+
python: ['3.10', '3.11', '3.12', '3.13', '3.14']
|
|
50
|
+
os: [ubuntu-latest, ubuntu-24.04-arm, macos-15-intel, macos-latest, windows-latest]
|
|
51
|
+
include:
|
|
52
|
+
- {os: ubuntu-latest, target: x86_64}
|
|
53
|
+
- {os: ubuntu-24.04-arm, target: aarch64}
|
|
54
|
+
- {os: macos-15-intel, target: x86_64}
|
|
55
|
+
- {os: macos-latest, target: aarch64}
|
|
56
|
+
- {os: windows-latest, target: x86_64}
|
|
57
|
+
steps:
|
|
58
|
+
- uses: actions/checkout@v6
|
|
59
|
+
- uses: astral-sh/setup-uv@v7
|
|
60
|
+
with:
|
|
61
|
+
python-version: ${{ matrix.python }}
|
|
62
|
+
- uses: actions/download-artifact@v6
|
|
63
|
+
with:
|
|
64
|
+
name: native-${{ matrix.os }}-${{ matrix.target }}
|
|
65
|
+
path: native-dist
|
|
66
|
+
- run: uv sync --frozen --all-extras --all-groups
|
|
67
|
+
- run: uv pip install native-dist/*.whl
|
|
68
|
+
shell: bash
|
|
69
|
+
- run: uv run --no-sync python tools/smoke_native.py
|
|
70
|
+
- run: uv run --no-sync pytest tests/unit tests/integration --cov=aiogram_cmds --cov-fail-under=80
|
|
71
|
+
rust:
|
|
72
|
+
runs-on: ubuntu-latest
|
|
73
|
+
steps:
|
|
74
|
+
- uses: actions/checkout@v6
|
|
75
|
+
- run: cargo test --locked --manifest-path native/Cargo.toml
|
|
76
|
+
- run: cargo clippy --locked --manifest-path native/Cargo.toml --all-targets -- -D warnings
|
|
77
|
+
source:
|
|
78
|
+
runs-on: ubuntu-latest
|
|
79
|
+
steps:
|
|
80
|
+
- uses: actions/checkout@v6
|
|
81
|
+
- uses: PyO3/maturin-action@v1
|
|
82
|
+
with:
|
|
83
|
+
command: sdist
|
|
84
|
+
args: --manifest-path native/Cargo.toml --out native-dist
|
|
85
|
+
- uses: actions/upload-artifact@v6
|
|
86
|
+
with:
|
|
87
|
+
name: native-source
|
|
88
|
+
path: native-dist/*.tar.gz
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
name: Publish verified native companion
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
manifest_sha256:
|
|
7
|
+
description: SHA256 of the independently reviewed native release SHA256SUMS
|
|
8
|
+
required: true
|
|
9
|
+
type: string
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
|
|
14
|
+
concurrency:
|
|
15
|
+
group: publish-native-${{ github.ref }}
|
|
16
|
+
cancel-in-progress: false
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
verify:
|
|
20
|
+
if: github.ref_type == 'tag' && startsWith(github.ref_name, 'native-v')
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
timeout-minutes: 10
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v6
|
|
25
|
+
with:
|
|
26
|
+
persist-credentials: false
|
|
27
|
+
- uses: astral-sh/setup-uv@v7
|
|
28
|
+
with:
|
|
29
|
+
python-version: '3.12'
|
|
30
|
+
- name: Download exact reviewed native artifacts
|
|
31
|
+
env:
|
|
32
|
+
GH_TOKEN: ${{ github.token }}
|
|
33
|
+
run: gh release download "$GITHUB_REF_NAME" --pattern '*.whl' --pattern '*.tar.gz' --pattern SHA256SUMS --dir native-dist
|
|
34
|
+
- name: Validate exact identity, versions, checksums and complete wheel matrix
|
|
35
|
+
env:
|
|
36
|
+
MANIFEST_SHA256: ${{ inputs.manifest_sha256 }}
|
|
37
|
+
run: >-
|
|
38
|
+
uv run --no-project python tools/verify_native_artifacts.py
|
|
39
|
+
--directory native-dist --tag "$GITHUB_REF_NAME"
|
|
40
|
+
--manifest-sha256 "$MANIFEST_SHA256"
|
|
41
|
+
- run: uvx twine check native-dist/*.whl native-dist/*.tar.gz
|
|
42
|
+
- run: uvx abi3audit --strict native-dist/*.whl
|
|
43
|
+
- uses: actions/upload-artifact@v6
|
|
44
|
+
with:
|
|
45
|
+
name: verified-native-distributions
|
|
46
|
+
path: |
|
|
47
|
+
native-dist/*.whl
|
|
48
|
+
native-dist/*.tar.gz
|
|
49
|
+
if-no-files-found: error
|
|
50
|
+
publish:
|
|
51
|
+
needs: verify
|
|
52
|
+
runs-on: ubuntu-latest
|
|
53
|
+
timeout-minutes: 10
|
|
54
|
+
environment: pypi
|
|
55
|
+
permissions:
|
|
56
|
+
id-token: write
|
|
57
|
+
steps:
|
|
58
|
+
- uses: actions/download-artifact@v7
|
|
59
|
+
with:
|
|
60
|
+
name: verified-native-distributions
|
|
61
|
+
path: native-dist
|
|
62
|
+
- name: Publish verified companion using Trusted Publishing
|
|
63
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
64
|
+
with:
|
|
65
|
+
packages-dir: native-dist/
|
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- towncrier release notes start -->
|
|
4
4
|
|
|
5
|
+
## [0.3.0] - Unreleased
|
|
6
|
+
|
|
7
|
+
- Add explicitly revisioned immutable compiled command profiles and resolved batch
|
|
8
|
+
payloads. Preserve dynamic translator evaluation for existing live APIs.
|
|
9
|
+
- Optimize Python profile resolution and reuse canonical compiled command JSON.
|
|
10
|
+
- Add an explicit optional Rust engine candidate with ABI validation, independent
|
|
11
|
+
native packaging and parity tests. Python remains the default; companion
|
|
12
|
+
publication was withheld after the serial performance gate failed. No native
|
|
13
|
+
tag or dependency extra is released; the candidate remains buildable source.
|
|
14
|
+
- Add installed-package CPU/latency evidence, pyperf and Criterion benchmarks,
|
|
15
|
+
and Python 3.14 / native platform CI.
|
|
16
|
+
|
|
5
17
|
## [0.2.0] - 2026-11-10
|
|
6
18
|
|
|
7
19
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: aiogram-cmds
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Command management library for aiogram v3
|
|
5
5
|
Project-URL: Homepage, https://github.com/ArmanAvanesyan/aiogram-cmds
|
|
6
6
|
Project-URL: Repository, https://github.com/ArmanAvanesyan/aiogram-cmds
|
|
@@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
21
|
Classifier: Topic :: Communications :: Chat
|
|
21
22
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
23
|
Requires-Python: >=3.10
|
|
@@ -28,8 +29,12 @@ Requires-Dist: babel>=2.16; extra == 'dev'
|
|
|
28
29
|
Requires-Dist: bandit>=1.7.0; extra == 'dev'
|
|
29
30
|
Requires-Dist: black>=23.0.0; extra == 'dev'
|
|
30
31
|
Requires-Dist: build>=1.0.0; extra == 'dev'
|
|
32
|
+
Requires-Dist: hypothesis>=6; extra == 'dev'
|
|
31
33
|
Requires-Dist: isort>=5.12.0; extra == 'dev'
|
|
34
|
+
Requires-Dist: orjson>=3.10; extra == 'dev'
|
|
32
35
|
Requires-Dist: pip-audit>=2.9.0; (python_version >= '3.11') and extra == 'dev'
|
|
36
|
+
Requires-Dist: psutil>=6; extra == 'dev'
|
|
37
|
+
Requires-Dist: pyperf>=2.9; extra == 'dev'
|
|
33
38
|
Requires-Dist: pyright>=1.1.0; extra == 'dev'
|
|
34
39
|
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
|
|
35
40
|
Requires-Dist: pytest-benchmark>=4.0.0; extra == 'dev'
|
|
@@ -312,3 +317,10 @@ locale/menu slots, default-language fallback, explicit language cleanup,
|
|
|
312
317
|
confirmed payload fingerprints and partial batch outcomes. Run
|
|
313
318
|
`uv run python examples/application_profiles.py --dry-run` for a network-free
|
|
314
319
|
example. The library never configures application logging.
|
|
320
|
+
|
|
321
|
+
Compiled immutable profiles and explicit optional engines are described in [performance guidance](docs/compiled-profiles.md). Python remains the default; native publication is benchmark-gated.
|
|
322
|
+
|
|
323
|
+
The 0.3.0 native candidate **did not pass its release performance gate**. Native
|
|
324
|
+
publication, native tags and a dependency extra are withheld. Rust code remains
|
|
325
|
+
available to build from source; the Python 0.3.0 distribution can release
|
|
326
|
+
independently. Use compiled Python profiles for explicit snapshot reuse.
|
|
@@ -267,3 +267,10 @@ locale/menu slots, default-language fallback, explicit language cleanup,
|
|
|
267
267
|
confirmed payload fingerprints and partial batch outcomes. Run
|
|
268
268
|
`uv run python examples/application_profiles.py --dry-run` for a network-free
|
|
269
269
|
example. The library never configures application logging.
|
|
270
|
+
|
|
271
|
+
Compiled immutable profiles and explicit optional engines are described in [performance guidance](docs/compiled-profiles.md). Python remains the default; native publication is benchmark-gated.
|
|
272
|
+
|
|
273
|
+
The 0.3.0 native candidate **did not pass its release performance gate**. Native
|
|
274
|
+
publication, native tags and a dependency extra are withheld. Rust code remains
|
|
275
|
+
available to build from source; the Python 0.3.0 distribution can release
|
|
276
|
+
independently. Use compiled Python profiles for explicit snapshot reuse.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""Calibrated subprocess pyperf Runner suite against the installed distribution."""
|
|
2
|
+
|
|
3
|
+
import pyperf
|
|
4
|
+
from run import workloads
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def command_line(command, args):
|
|
8
|
+
command.extend(["--engine", args.engine, "--workload", args.workload])
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
runner = pyperf.Runner(add_cmdline_args=command_line)
|
|
12
|
+
runner.argparser.add_argument("--engine", choices=["python", "rust"], default="python")
|
|
13
|
+
runner.argparser.add_argument(
|
|
14
|
+
"--workload", default="", help="Optional workload name substring"
|
|
15
|
+
)
|
|
16
|
+
args = runner.parse_args()
|
|
17
|
+
runner.metadata["engine"] = args.engine
|
|
18
|
+
runner.metadata["seed"] = 1729
|
|
19
|
+
for name, function, _loops, _counters, _new_only in workloads(args.engine, False):
|
|
20
|
+
if "fake_telegram" not in name and args.workload in name:
|
|
21
|
+
if "confirmation_hit" in name:
|
|
22
|
+
runner.bench_async_func(name, function)
|
|
23
|
+
else:
|
|
24
|
+
runner.bench_func(name, function)
|