pyvoy 1.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.
- pyvoy-1.3.0/.gitattributes +1 -0
- pyvoy-1.3.0/.github/workflows/bench.yaml +42 -0
- pyvoy-1.3.0/.github/workflows/ci.yaml +106 -0
- pyvoy-1.3.0/.github/workflows/codeql.yml +41 -0
- pyvoy-1.3.0/.github/workflows/docs.yaml +49 -0
- pyvoy-1.3.0/.github/workflows/release.yaml +120 -0
- pyvoy-1.3.0/.github/workflows/renovate.yaml +18 -0
- pyvoy-1.3.0/.gitignore +23 -0
- pyvoy-1.3.0/CODE_OF_CONDUCT.md +31 -0
- pyvoy-1.3.0/Cargo.lock +1871 -0
- pyvoy-1.3.0/Cargo.toml +36 -0
- pyvoy-1.3.0/LICENSE +21 -0
- pyvoy-1.3.0/PKG-INFO +205 -0
- pyvoy-1.3.0/README.md +169 -0
- pyvoy-1.3.0/bench/__init__.py +0 -0
- pyvoy-1.3.0/bench/_charts.py +53 -0
- pyvoy-1.3.0/bench/_results.py +60 -0
- pyvoy-1.3.0/bench/charts/asgi_h1_0000ms_throughput.png +0 -0
- pyvoy-1.3.0/bench/charts/asgi_h1_0010ms_throughput.png +0 -0
- pyvoy-1.3.0/bench/charts/asgi_h1_highms_throughput.png +0 -0
- pyvoy-1.3.0/bench/charts/asgi_h2_0000ms_throughput.png +0 -0
- pyvoy-1.3.0/bench/charts/asgi_h2_0010ms_throughput.png +0 -0
- pyvoy-1.3.0/bench/charts/asgi_h2_highms_throughput.png +0 -0
- pyvoy-1.3.0/bench/charts/wsgi_h1_0000ms_throughput.png +0 -0
- pyvoy-1.3.0/bench/charts/wsgi_h1_0010ms_throughput.png +0 -0
- pyvoy-1.3.0/bench/charts/wsgi_h1_highms_throughput.png +0 -0
- pyvoy-1.3.0/bench/charts/wsgi_h2_0000ms_throughput.png +0 -0
- pyvoy-1.3.0/bench/charts/wsgi_h2_0010ms_throughput.png +0 -0
- pyvoy-1.3.0/bench/charts/wsgi_h2_highms_throughput.png +0 -0
- pyvoy-1.3.0/bench/compression_app.py +41 -0
- pyvoy-1.3.0/bench/run_benchmark.py +814 -0
- pyvoy-1.3.0/bench/static_app.py +55 -0
- pyvoy-1.3.0/build.rs +5 -0
- pyvoy-1.3.0/codecov.yml +8 -0
- pyvoy-1.3.0/docs/api.md +3 -0
- pyvoy-1.3.0/docs/deployment.md +41 -0
- pyvoy-1.3.0/docs/design.md +59 -0
- pyvoy-1.3.0/docs/http-client.md +71 -0
- pyvoy-1.3.0/docs/img/favicon.png +0 -0
- pyvoy-1.3.0/docs/img/logo.png +0 -0
- pyvoy-1.3.0/docs/index.md +133 -0
- pyvoy-1.3.0/docs/settings.md +104 -0
- pyvoy-1.3.0/example/__init__.py +0 -0
- pyvoy-1.3.0/example/docker/Dockerfile +22 -0
- pyvoy-1.3.0/example/docker/__init__.py +0 -0
- pyvoy-1.3.0/example/docker/pyproject.toml +6 -0
- pyvoy-1.3.0/example/docker/server.py +16 -0
- pyvoy-1.3.0/example/docker/uv.lock +153 -0
- pyvoy-1.3.0/example/example.go +65 -0
- pyvoy-1.3.0/example/server.py +58 -0
- pyvoy-1.3.0/poe_tasks.toml +56 -0
- pyvoy-1.3.0/pyproject.toml +248 -0
- pyvoy-1.3.0/pyvoy/__init__.py +33 -0
- pyvoy-1.3.0/pyvoy/_cli.py +545 -0
- pyvoy-1.3.0/pyvoy/_debug.py +79 -0
- pyvoy-1.3.0/pyvoy/_glue.py +78 -0
- pyvoy-1.3.0/pyvoy/_server.py +1059 -0
- pyvoy-1.3.0/pyvoy/_trio.py +240 -0
- pyvoy-1.3.0/pyvoy/_watcher.py +89 -0
- pyvoy-1.3.0/pyvoy/asgi/__init__.py +0 -0
- pyvoy-1.3.0/pyvoy/asgi/httpclient.pyi +23 -0
- pyvoy-1.3.0/pyvoy/py.typed +0 -0
- pyvoy-1.3.0/pyvoy/wsgi/__init__.py +0 -0
- pyvoy-1.3.0/pyvoy/wsgi/httpclient.pyi +21 -0
- pyvoy-1.3.0/pyvoy.code-workspace +56 -0
- pyvoy-1.3.0/renovate.json +58 -0
- pyvoy-1.3.0/scripts/__init__.py +0 -0
- pyvoy-1.3.0/scripts/setup_it.py +52 -0
- pyvoy-1.3.0/src/asgi/filter.rs +513 -0
- pyvoy-1.3.0/src/asgi/mod.rs +15 -0
- pyvoy-1.3.0/src/asgi/python/mod.rs +913 -0
- pyvoy-1.3.0/src/asgi/shared/app.rs +125 -0
- pyvoy-1.3.0/src/asgi/shared/awaitable.rs +105 -0
- pyvoy-1.3.0/src/asgi/shared/eventloop.rs +276 -0
- pyvoy-1.3.0/src/asgi/shared/headers.rs +37 -0
- pyvoy-1.3.0/src/asgi/shared/lifespan.rs +382 -0
- pyvoy-1.3.0/src/asgi/shared/mod.rs +28 -0
- pyvoy-1.3.0/src/asgi/shared/scope.rs +89 -0
- pyvoy-1.3.0/src/asgi/transport.rs +834 -0
- pyvoy-1.3.0/src/asgi/websocket/executor.rs +817 -0
- pyvoy-1.3.0/src/asgi/websocket/mod.rs +610 -0
- pyvoy-1.3.0/src/asgi/websocket/stream.rs +153 -0
- pyvoy-1.3.0/src/envoy.rs +166 -0
- pyvoy-1.3.0/src/eventbridge.rs +109 -0
- pyvoy-1.3.0/src/headernames.rs +1100 -0
- pyvoy-1.3.0/src/lib.rs +261 -0
- pyvoy-1.3.0/src/ondrop.rs +18 -0
- pyvoy-1.3.0/src/types.rs +741 -0
- pyvoy-1.3.0/src/wsgi/filter.rs +590 -0
- pyvoy-1.3.0/src/wsgi/mod.rs +16 -0
- pyvoy-1.3.0/src/wsgi/pool.rs +134 -0
- pyvoy-1.3.0/src/wsgi/python.rs +740 -0
- pyvoy-1.3.0/src/wsgi/response.rs +146 -0
- pyvoy-1.3.0/src/wsgi/transport.rs +702 -0
- pyvoy-1.3.0/src/wsgi/types.rs +65 -0
- pyvoy-1.3.0/tests/__init__.py +0 -0
- pyvoy-1.3.0/tests/_util.py +48 -0
- pyvoy-1.3.0/tests/apps/__init__.py +0 -0
- pyvoy-1.3.0/tests/apps/asgi/__init__.py +0 -0
- pyvoy-1.3.0/tests/apps/asgi/asgi2.py +120 -0
- pyvoy-1.3.0/tests/apps/asgi/atexit_hook.py +37 -0
- pyvoy-1.3.0/tests/apps/asgi/echo_accept_encoding.py +27 -0
- pyvoy-1.3.0/tests/apps/asgi/httpclient/__init__.py +0 -0
- pyvoy-1.3.0/tests/apps/asgi/httpclient/kitchensink.py +162 -0
- pyvoy-1.3.0/tests/apps/asgi/httpclient/runner.py +142 -0
- pyvoy-1.3.0/tests/apps/asgi/kitchensink.py +1335 -0
- pyvoy-1.3.0/tests/apps/asgi/lifespan.py +291 -0
- pyvoy-1.3.0/tests/apps/httpclient/__init__.py +0 -0
- pyvoy-1.3.0/tests/apps/httpclient/cases/__init__.py +1 -0
- pyvoy-1.3.0/tests/apps/httpclient/cases/_util.py +52 -0
- pyvoy-1.3.0/tests/apps/httpclient/cases/client.py +783 -0
- pyvoy-1.3.0/tests/apps/httpclient/cases/errors.py +99 -0
- pyvoy-1.3.0/tests/apps/httpclient/cases/tls.py +33 -0
- pyvoy-1.3.0/tests/apps/httpclient/cases/validation.py +20 -0
- pyvoy-1.3.0/tests/apps/static/app.js +1 -0
- pyvoy-1.3.0/tests/apps/static/index.html +3 -0
- pyvoy-1.3.0/tests/apps/static/sub/nested.txt +1 -0
- pyvoy-1.3.0/tests/apps/websockets/__init__.py +0 -0
- pyvoy-1.3.0/tests/apps/websockets/echo.py +31 -0
- pyvoy-1.3.0/tests/apps/websockets/kitchensink.py +160 -0
- pyvoy-1.3.0/tests/apps/wsgi/__init__.py +0 -0
- pyvoy-1.3.0/tests/apps/wsgi/atexit_hook.py +22 -0
- pyvoy-1.3.0/tests/apps/wsgi/httpclient/__init__.py +0 -0
- pyvoy-1.3.0/tests/apps/wsgi/httpclient/runner.py +131 -0
- pyvoy-1.3.0/tests/apps/wsgi/kitchensink.py +851 -0
- pyvoy-1.3.0/tests/conftest.py +88 -0
- pyvoy-1.3.0/tests/httpclient/__init__.py +0 -0
- pyvoy-1.3.0/tests/httpclient/conftest.py +167 -0
- pyvoy-1.3.0/tests/httpclient/test_client.py +250 -0
- pyvoy-1.3.0/tests/httpclient/test_errors.py +64 -0
- pyvoy-1.3.0/tests/httpclient/test_tls.py +47 -0
- pyvoy-1.3.0/tests/httpclient/test_validation.py +21 -0
- pyvoy-1.3.0/tests/test_asgi2.py +34 -0
- pyvoy-1.3.0/tests/test_asgi_lifespan.py +279 -0
- pyvoy-1.3.0/tests/test_atexit.py +29 -0
- pyvoy-1.3.0/tests/test_cli.py +358 -0
- pyvoy-1.3.0/tests/test_compression.py +259 -0
- pyvoy-1.3.0/tests/test_ipv6.py +64 -0
- pyvoy-1.3.0/tests/test_kitchensink.py +698 -0
- pyvoy-1.3.0/tests/test_loops.py +49 -0
- pyvoy-1.3.0/tests/test_mounts.py +129 -0
- pyvoy-1.3.0/tests/test_mtls.py +120 -0
- pyvoy-1.3.0/tests/test_rootpath.py +96 -0
- pyvoy-1.3.0/tests/test_server.py +185 -0
- pyvoy-1.3.0/tests/test_startup_errors.py +388 -0
- pyvoy-1.3.0/tests/test_static_mounts.py +122 -0
- pyvoy-1.3.0/tests/test_tls.py +211 -0
- pyvoy-1.3.0/tests/test_upstreams.py +48 -0
- pyvoy-1.3.0/tests/test_websockets.py +420 -0
- pyvoy-1.3.0/tests/test_worker_threads.py +88 -0
- pyvoy-1.3.0/uv.lock +2397 -0
- pyvoy-1.3.0/zensical.toml +58 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* text=auto eol=lf
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: Benchmark
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches:
|
|
5
|
+
- main
|
|
6
|
+
paths:
|
|
7
|
+
- "src/**"
|
|
8
|
+
- "Cargo.lock"
|
|
9
|
+
- "bench/**"
|
|
10
|
+
- ".github/workflows/bench.yaml"
|
|
11
|
+
# Just verify the harness on PRs, no need for actual numbers
|
|
12
|
+
pull_request:
|
|
13
|
+
paths:
|
|
14
|
+
- "bench/**"
|
|
15
|
+
- ".github/workflows/bench.yaml"
|
|
16
|
+
workflow_dispatch:
|
|
17
|
+
|
|
18
|
+
permissions:
|
|
19
|
+
contents: read
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
bench:
|
|
23
|
+
runs-on: ubuntu-24.04
|
|
24
|
+
strategy:
|
|
25
|
+
fail-fast: false
|
|
26
|
+
matrix:
|
|
27
|
+
# Overkill to benchmark with every Python version, we just use the latest.
|
|
28
|
+
python:
|
|
29
|
+
- "3.14"
|
|
30
|
+
- "3.14t"
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
33
|
+
|
|
34
|
+
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
35
|
+
|
|
36
|
+
- run: rustup update
|
|
37
|
+
|
|
38
|
+
- run: cargo install --features http3 oha
|
|
39
|
+
|
|
40
|
+
- run: uv sync --python ${{ matrix.python }} --managed-python
|
|
41
|
+
|
|
42
|
+
- run: uv run poe bench ${{ github.event_name == 'pull_request' && '--short' || '' }}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches:
|
|
5
|
+
- main
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
attestations: write
|
|
12
|
+
id-token: write
|
|
13
|
+
|
|
14
|
+
concurrency:
|
|
15
|
+
# Cancel in-progress jobs for PRs only
|
|
16
|
+
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.sha || github.ref }}
|
|
17
|
+
cancel-in-progress: true
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
build:
|
|
21
|
+
runs-on: ${{ matrix.os }}
|
|
22
|
+
strategy:
|
|
23
|
+
fail-fast: false
|
|
24
|
+
matrix:
|
|
25
|
+
os:
|
|
26
|
+
- macos-15
|
|
27
|
+
- ubuntu-24.04
|
|
28
|
+
- windows-2025
|
|
29
|
+
python:
|
|
30
|
+
- "3.11"
|
|
31
|
+
- "3.14"
|
|
32
|
+
# Test oldest and newest on all OS's, but others only on one
|
|
33
|
+
# to save CI load.
|
|
34
|
+
include:
|
|
35
|
+
- os: ubuntu-24.04
|
|
36
|
+
python: "3.11"
|
|
37
|
+
- os: ubuntu-24.04
|
|
38
|
+
python: "3.12"
|
|
39
|
+
- os: ubuntu-24.04
|
|
40
|
+
python: "3.13"
|
|
41
|
+
- os: ubuntu-24.04
|
|
42
|
+
python: "3.14t"
|
|
43
|
+
# Enable coverage on just one job
|
|
44
|
+
- os: ubuntu-24.04
|
|
45
|
+
python: "3.14"
|
|
46
|
+
coverage: "cov"
|
|
47
|
+
- os: ubuntu-24.04
|
|
48
|
+
python: "3.15"
|
|
49
|
+
- os: ubuntu-24.04
|
|
50
|
+
python: "3.15t"
|
|
51
|
+
|
|
52
|
+
env:
|
|
53
|
+
# Avoid multiple compile e.g. in lint and test by setting as a job env var
|
|
54
|
+
RUSTFLAGS: ${{ matrix.coverage == 'cov' && '-C instrument-coverage' || '' }}
|
|
55
|
+
# Test the abi3 build on the oldest versions, and version-specific builds on the rest.
|
|
56
|
+
MATURIN_PEP517_ARGS: ${{ (matrix.python == '3.11' || matrix.python == '3.12') && '--features pyo3/abi3-py311' || '' }}
|
|
57
|
+
|
|
58
|
+
steps:
|
|
59
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
60
|
+
|
|
61
|
+
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
62
|
+
with:
|
|
63
|
+
python-version: ${{ matrix.python }}
|
|
64
|
+
|
|
65
|
+
- name: Setup rust
|
|
66
|
+
run: |
|
|
67
|
+
rustup update
|
|
68
|
+
${{ matrix.coverage == 'cov' && 'rustup component add llvm-tools' || '' }}
|
|
69
|
+
|
|
70
|
+
- run: uv lock --check
|
|
71
|
+
|
|
72
|
+
# Go ahead and run lint on all Python versions since we may have version-specific
|
|
73
|
+
# guards in rust in the future.
|
|
74
|
+
- name: run lints
|
|
75
|
+
if: startsWith(matrix.os, 'ubuntu-')
|
|
76
|
+
run: uv run poe lint
|
|
77
|
+
|
|
78
|
+
- name: run tests
|
|
79
|
+
# Coverage instrumentation slows websockets compression down too much while the integration test has
|
|
80
|
+
# relatively tight timeouts.
|
|
81
|
+
run: uv run poe test ${{ github.event_name == 'push' && matrix.coverage != 'cov' && '--full' || '' }}
|
|
82
|
+
|
|
83
|
+
# Needed for connect integration tests runner
|
|
84
|
+
- uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
|
|
85
|
+
if: github.event_name == 'push' && matrix.python != '3.14t' && !startsWith(matrix.os, 'windows-')
|
|
86
|
+
with:
|
|
87
|
+
go-version: stable
|
|
88
|
+
|
|
89
|
+
- name: run connect integration tests on push
|
|
90
|
+
# TODO: Enable on free-threaded Python after publishing a wheel for it.
|
|
91
|
+
# The integration test first installs pyvoy from PyPi before we reinstall from local
|
|
92
|
+
# and it's tricky to avoid that.
|
|
93
|
+
if: github.event_name == 'push' && matrix.python != '3.15t' && !startsWith(matrix.os, 'windows-')
|
|
94
|
+
run: uv run poe integration-test-connect
|
|
95
|
+
|
|
96
|
+
- name: verify wheel build
|
|
97
|
+
run: uv run poe wheel
|
|
98
|
+
|
|
99
|
+
- name: prepare coverage
|
|
100
|
+
if: ${{ matrix.coverage == 'cov' }}
|
|
101
|
+
run: |
|
|
102
|
+
$(rustc --print=target-libdir)/../bin/llvm-profdata merge -sparse default_*.profraw -o tests.profdata
|
|
103
|
+
$(rustc --print=target-libdir)/../bin/llvm-cov export -format=lcov --ignore-filename-regex='/.cargo/registry' --ignore-filename-regex='.cargo/git/checkouts' --ignore-filename-regex='.rustup/toolchains' -instr-profile tests.profdata pyvoy/_pyvoy.*.so > tests.lcov
|
|
104
|
+
|
|
105
|
+
- uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
|
|
106
|
+
if: ${{ matrix.coverage == 'cov' }}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: "CodeQL"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["main"]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: ["main"]
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: "44 7 * * 2"
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
analyze:
|
|
13
|
+
name: Analyze (${{ matrix.language }})
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
permissions:
|
|
16
|
+
security-events: write
|
|
17
|
+
packages: read
|
|
18
|
+
strategy:
|
|
19
|
+
fail-fast: false
|
|
20
|
+
matrix:
|
|
21
|
+
include:
|
|
22
|
+
- language: actions
|
|
23
|
+
build-mode: none
|
|
24
|
+
- language: python
|
|
25
|
+
build-mode: none
|
|
26
|
+
- language: rust
|
|
27
|
+
build-mode: none
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout repository
|
|
30
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
31
|
+
|
|
32
|
+
- name: Initialize CodeQL
|
|
33
|
+
uses: github/codeql-action/init@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
|
|
34
|
+
with:
|
|
35
|
+
languages: ${{ matrix.language }}
|
|
36
|
+
build-mode: ${{ matrix.build-mode }}
|
|
37
|
+
|
|
38
|
+
- name: Perform CodeQL Analysis
|
|
39
|
+
uses: github/codeql-action/analyze@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
|
|
40
|
+
with:
|
|
41
|
+
category: "/language:${{matrix.language}}"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
name: Documentation
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches:
|
|
5
|
+
- main
|
|
6
|
+
paths:
|
|
7
|
+
- "docs/**"
|
|
8
|
+
- zensical.toml
|
|
9
|
+
- ".github/workflows/docs.yaml"
|
|
10
|
+
pull_request:
|
|
11
|
+
paths:
|
|
12
|
+
- "docs/**"
|
|
13
|
+
- zensical.toml
|
|
14
|
+
- ".github/workflows/docs.yaml"
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
pages: write
|
|
19
|
+
id-token: write
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
build:
|
|
23
|
+
environment:
|
|
24
|
+
name: ${{ github.event_name != 'pull_request' && 'github-pages' || null }}
|
|
25
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
26
|
+
|
|
27
|
+
runs-on: ubuntu-24.04
|
|
28
|
+
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
31
|
+
|
|
32
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
33
|
+
|
|
34
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
35
|
+
with:
|
|
36
|
+
python-version: "3.14"
|
|
37
|
+
|
|
38
|
+
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
39
|
+
|
|
40
|
+
- run: uv run --group docs --no-dev zensical build --clean
|
|
41
|
+
|
|
42
|
+
- uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
|
|
43
|
+
if: github.event_name != 'pull_request'
|
|
44
|
+
with:
|
|
45
|
+
path: site
|
|
46
|
+
|
|
47
|
+
- uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5.0.1
|
|
48
|
+
if: github.event_name != 'pull_request'
|
|
49
|
+
id: deployment
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
tags:
|
|
5
|
+
- "v*"
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
pull_request:
|
|
8
|
+
paths:
|
|
9
|
+
- .github/workflows/release.yaml
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
id-token: write
|
|
13
|
+
attestations: write
|
|
14
|
+
contents: write
|
|
15
|
+
|
|
16
|
+
env:
|
|
17
|
+
# When bumping, also bump MATURIN_PEP517_ARGS in ci.yaml
|
|
18
|
+
# maturin flags to build targets we publish non-abi3 wheels for
|
|
19
|
+
UNSTABLE_API_FLAGS: -i 3.13 -i 3.14 -i 3.14t -i 3.15 -i 3.15t
|
|
20
|
+
# maturin flags to build targets we publish abi3 wheels for
|
|
21
|
+
ABI3_FLAGS: -i 3.11 --features pyo3/abi3-py311
|
|
22
|
+
ABI3T_FLAGS: -i 3.15t --features pyo3/abi3t-py315
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
ext:
|
|
26
|
+
runs-on: ${{ matrix.runner }}
|
|
27
|
+
strategy:
|
|
28
|
+
matrix:
|
|
29
|
+
include:
|
|
30
|
+
- runner: ubuntu-24.04
|
|
31
|
+
target: x86_64
|
|
32
|
+
manylinux: manylinux_2_28
|
|
33
|
+
- runner: ubuntu-24.04
|
|
34
|
+
target: x86_64
|
|
35
|
+
manylinux: musllinux_1_2
|
|
36
|
+
- runner: ubuntu-24.04-arm
|
|
37
|
+
target: aarch64
|
|
38
|
+
manylinux: manylinux_2_28
|
|
39
|
+
- runner: ubuntu-24.04-arm
|
|
40
|
+
target: aarch64
|
|
41
|
+
manylinux: musllinux_1_2
|
|
42
|
+
- runner: windows-2025
|
|
43
|
+
target: x86_64
|
|
44
|
+
- runner: windows-11-arm
|
|
45
|
+
target: aarch64
|
|
46
|
+
- runner: macos-15
|
|
47
|
+
target: aarch64
|
|
48
|
+
steps:
|
|
49
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
50
|
+
|
|
51
|
+
# We only publish abi3 wheels for Windows
|
|
52
|
+
- name: Build wheels
|
|
53
|
+
if: runner.os != 'Windows'
|
|
54
|
+
uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
|
|
55
|
+
with:
|
|
56
|
+
target: ${{ matrix.target }}
|
|
57
|
+
args: --release --out dist ${{ env.UNSTABLE_API_FLAGS }}
|
|
58
|
+
sccache: true
|
|
59
|
+
manylinux: ${{ matrix.manylinux }}
|
|
60
|
+
before-script-linux: ${{ matrix.manylinux == 'manylinux_2_28' && 'dnf install -y clang' || 'apt-get install -y libclang-dev' }}
|
|
61
|
+
|
|
62
|
+
- name: Build abi3 wheel
|
|
63
|
+
uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
|
|
64
|
+
with:
|
|
65
|
+
target: ${{ matrix.target }}
|
|
66
|
+
args: --release --out dist ${{ env.ABI3_FLAGS }}
|
|
67
|
+
sccache: true
|
|
68
|
+
manylinux: ${{ matrix.manylinux }}
|
|
69
|
+
before-script-linux: ${{ matrix.manylinux == 'manylinux_2_28' && 'dnf install -y clang' || 'apt-get install -y libclang-dev' }}
|
|
70
|
+
|
|
71
|
+
- name: Build abi3t wheel
|
|
72
|
+
uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
|
|
73
|
+
with:
|
|
74
|
+
target: ${{ matrix.target }}
|
|
75
|
+
args: --release --out dist ${{ env.ABI3T_FLAGS }}
|
|
76
|
+
sccache: true
|
|
77
|
+
manylinux: ${{ matrix.manylinux }}
|
|
78
|
+
before-script-linux: ${{ matrix.manylinux == 'manylinux_2_28' && 'dnf install -y clang' || 'apt-get install -y libclang-dev' }}
|
|
79
|
+
|
|
80
|
+
- name: Upload wheels
|
|
81
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
82
|
+
with:
|
|
83
|
+
name: wheels-${{ matrix.runner }}-${{ matrix.target }}${{ matrix.manylinux && format('-{0}', matrix.manylinux) || '' }}
|
|
84
|
+
path: dist
|
|
85
|
+
|
|
86
|
+
ext-sdist:
|
|
87
|
+
runs-on: ubuntu-26.04
|
|
88
|
+
steps:
|
|
89
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
90
|
+
|
|
91
|
+
- name: Build sdist
|
|
92
|
+
uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
|
|
93
|
+
with:
|
|
94
|
+
command: sdist
|
|
95
|
+
args: --out dist
|
|
96
|
+
|
|
97
|
+
- name: Upload sdist
|
|
98
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
99
|
+
with:
|
|
100
|
+
name: wheels-sdist
|
|
101
|
+
path: dist
|
|
102
|
+
|
|
103
|
+
release:
|
|
104
|
+
runs-on: ubuntu-26.04
|
|
105
|
+
environment: ${{ github.event_name == 'push' && 'prod' || github.event_name == 'workflow_dispatch' && 'dev' || null }}
|
|
106
|
+
needs:
|
|
107
|
+
- ext
|
|
108
|
+
- ext-sdist
|
|
109
|
+
steps:
|
|
110
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
111
|
+
with:
|
|
112
|
+
path: dist/
|
|
113
|
+
merge-multiple: true
|
|
114
|
+
|
|
115
|
+
- name: publish all packages
|
|
116
|
+
if: github.event_name != 'pull_request'
|
|
117
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
|
|
118
|
+
with:
|
|
119
|
+
repository-url: ${{ github.event_name == 'workflow_dispatch' && 'https://test.pypi.org/legacy/' || null }}
|
|
120
|
+
skip-existing: true
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
name: Renovate Dependencies
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
# https://crontab.guru/#5_12_*_*_1
|
|
6
|
+
- cron: "5 12 * * 1"
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
# Uses app token so default token needs no permissions
|
|
10
|
+
permissions: {}
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
renovate:
|
|
14
|
+
uses: curioswitch/go-build/.github/workflows/export-renovate.yaml@7d855da299ce7a10188c909a58328fc21ed89c40 # v0.9.0
|
|
15
|
+
with:
|
|
16
|
+
github_app_id: "1047503"
|
|
17
|
+
secrets:
|
|
18
|
+
github_app_key: ${{ secrets.CURIOSWITCH_APP_KEY }}
|
pyvoy-1.3.0/.gitignore
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
This project follows the CurioSwitch code of conduct.
|
|
2
|
+
|
|
3
|
+
> [!WARNING]
|
|
4
|
+
> Any following content is overridden by the laws of CurioSwitch's residing country, Japan.
|
|
5
|
+
> For example, things like death threats will be dealt with strictly.
|
|
6
|
+
|
|
7
|
+
There is just one guideline: be fair. It is not possible to define fairness precisely
|
|
8
|
+
but consider these examples when thinking about it.
|
|
9
|
+
|
|
10
|
+
Fair:
|
|
11
|
+
|
|
12
|
+
- Respond promptly to submitted issues / PRs.
|
|
13
|
+
- Contributors spend time on submissions and it is not fair to not do the same in return.
|
|
14
|
+
- Aim for robust / tested code and systems.
|
|
15
|
+
- It is not fair to users to give them a tool that only half-works and causes them frustration.
|
|
16
|
+
- Acknowledge others' points, even if disagreeing, instead of ignoring.
|
|
17
|
+
- People engage in good faith, and it is not fair to leave it wasted.
|
|
18
|
+
|
|
19
|
+
Unfair:
|
|
20
|
+
|
|
21
|
+
- Keep issues about bugs or significant pain points open for a long time or suggest the contributor can raise a PR.
|
|
22
|
+
- Users are not maintainers and it is not fair to expect them to become one to fix a bug
|
|
23
|
+
(it is always welcome when they have the time and will to contribute though).
|
|
24
|
+
- Prioritize issues and discussions with friends, acquaintances, or those in the same timezone over others.
|
|
25
|
+
- This is OSS and it is not fair to create boundaries or factions within it.
|
|
26
|
+
|
|
27
|
+
We are not perfect and may act in a way that isn't fair. This is fine and generally will not
|
|
28
|
+
need punitive measures - we will aim to improve over time. But do accept feedback about it in
|
|
29
|
+
good faith and respond to it fairly. If you need to provide feedback related to the above in
|
|
30
|
+
a private matter, feel free to email oss@curioswitch.org and we will aim to help in a fair
|
|
31
|
+
manner.
|