rnet 3.0.0rc8__tar.gz → 3.0.0rc10__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.

Potentially problematic release.


This version of rnet might be problematic. Click here for more details.

Files changed (117) hide show
  1. rnet-3.0.0rc10/.github/dependabot.yml +22 -0
  2. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/.github/workflows/ci.yml +126 -28
  3. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/.gitignore +2 -0
  4. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/Cargo.lock +166 -197
  5. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/Cargo.toml +8 -7
  6. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/PKG-INFO +25 -23
  7. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/README.md +24 -22
  8. rnet-3.0.0rc10/python/benchmark/README.md +73 -0
  9. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/benchmark/bench.py +5 -0
  10. rnet-3.0.0rc10/python/benchmark/benchmark_multi.jpg +0 -0
  11. rnet-3.0.0rc10/python/benchmark/benchmark_multi_threaded.jpg +0 -0
  12. rnet-3.0.0rc10/python/benchmark/benchmark_results.csv +241 -0
  13. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/benchmark/core.py +1 -1
  14. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/benchmark/requirements.txt +4 -1
  15. rnet-3.0.0rc10/python/examples/auth.py +14 -0
  16. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/body.py +7 -5
  17. rnet-3.0.0rc10/python/examples/form.py +30 -0
  18. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/keylog.py +1 -5
  19. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/multipart.py +2 -8
  20. rnet-3.0.0rc8/python/examples/client.py → rnet-3.0.0rc10/python/examples/proxy.py +19 -11
  21. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/rnet/__init__.pyi +10 -1
  22. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/rnet/cookie.py +2 -1
  23. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/rnet/emulation.py +5 -0
  24. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/rnet/http1.py +2 -1
  25. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/rnet/http2.py +10 -1
  26. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/rnet/tls.py +10 -1
  27. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/buffer.rs +7 -2
  28. rnet-3.0.0rc10/src/client/body/form.rs +45 -0
  29. rnet-3.0.0rc10/src/client/body/json.rs +59 -0
  30. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/client/body/multipart.rs +7 -4
  31. rnet-3.0.0rc8/src/client/body/mod.rs → rnet-3.0.0rc10/src/client/body.rs +14 -26
  32. rnet-3.0.0rc8/src/client/nogil.rs → rnet-3.0.0rc10/src/client/future.rs +18 -20
  33. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/client/req.rs +11 -8
  34. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/client/resp/http.rs +19 -19
  35. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/client/resp/stream.rs +4 -4
  36. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/client/resp/ws/msg.rs +1 -1
  37. rnet-3.0.0rc8/src/client/resp/ws/mod.rs → rnet-3.0.0rc10/src/client/resp/ws.rs +1 -1
  38. rnet-3.0.0rc8/src/client/mod.rs → rnet-3.0.0rc10/src/client.rs +8 -9
  39. {rnet-3.0.0rc8/src/client → rnet-3.0.0rc10/src}/dns.rs +1 -0
  40. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/emulation.rs +1 -0
  41. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/extractor.rs +45 -22
  42. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/http1.rs +4 -2
  43. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/http2.rs +4 -2
  44. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/lib.rs +3 -2
  45. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/macros.rs +1 -0
  46. {rnet-3.0.0rc8/src/bridge → rnet-3.0.0rc10/src/rt}/sync.rs +68 -31
  47. {rnet-3.0.0rc8/src/bridge → rnet-3.0.0rc10/src/rt}/task.rs +10 -36
  48. rnet-3.0.0rc8/src/bridge/mod.rs → rnet-3.0.0rc10/src/rt.rs +99 -80
  49. rnet-3.0.0rc8/src/tls/mod.rs → rnet-3.0.0rc10/src/tls.rs +4 -2
  50. rnet-3.0.0rc8/.github/dependabot.yml +0 -11
  51. rnet-3.0.0rc8/python/benchmark/README.md +0 -41
  52. rnet-3.0.0rc8/python/benchmark/benchmark_multi.jpg +0 -0
  53. rnet-3.0.0rc8/python/benchmark/benchmark_multi_threaded.jpg +0 -0
  54. rnet-3.0.0rc8/python/benchmark/benchmark_results.csv +0 -235
  55. rnet-3.0.0rc8/python/examples/auth.py +0 -21
  56. rnet-3.0.0rc8/python/examples/form.py +0 -21
  57. rnet-3.0.0rc8/python/examples/get.py +0 -16
  58. rnet-3.0.0rc8/python/examples/proxy.py +0 -23
  59. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/.github/FUNDING.yml +0 -0
  60. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  61. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  62. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/.github/assets/capsolver.jpg +0 -0
  63. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/.github/assets/hypersolutions.jpg +0 -0
  64. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/.github/musl_build.sh +0 -0
  65. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/LICENSE +0 -0
  66. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/pyproject.toml +0 -0
  67. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/benchmark/chart.py +0 -0
  68. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/benchmark/server.py +0 -0
  69. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/basic_auth.py +0 -0
  70. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/bearer_auth.py +0 -0
  71. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/blocking/auth.py +0 -0
  72. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/blocking/basic_auth.py +0 -0
  73. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/blocking/bearer_auth.py +0 -0
  74. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/blocking/body.py +0 -0
  75. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/blocking/client.py +0 -0
  76. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/blocking/cookie.py +0 -0
  77. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/blocking/emulation.py +0 -0
  78. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/blocking/form.py +0 -0
  79. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/blocking/get.py +0 -0
  80. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/blocking/json.py +0 -0
  81. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/blocking/multipart.py +0 -0
  82. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/blocking/proxy.py +0 -0
  83. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/blocking/query.py +0 -0
  84. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/blocking/stream.py +0 -0
  85. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/emulation.py +0 -0
  86. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/exceptions.py +0 -0
  87. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/header_map.py +0 -0
  88. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/http1_websocket.py +0 -0
  89. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/http2_websocket.py +0 -0
  90. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/json.py +0 -0
  91. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/orig_headers.py +0 -0
  92. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/query.py +0 -0
  93. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/request.py +0 -0
  94. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/examples/stream.py +0 -0
  95. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/rnet/__init__.py +0 -0
  96. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/rnet/blocking.py +0 -0
  97. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/rnet/exceptions.py +0 -0
  98. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/rnet/header.py +0 -0
  99. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/python/rnet/py.typed +0 -0
  100. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/client/resp/history.rs +0 -0
  101. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/client/resp/ws/cmd.rs +0 -0
  102. /rnet-3.0.0rc8/src/client/resp/mod.rs → /rnet-3.0.0rc10/src/client/resp.rs +0 -0
  103. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/error.rs +0 -0
  104. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/http/cookie.rs +0 -0
  105. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/http/header.rs +0 -0
  106. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/http/status.rs +0 -0
  107. /rnet-3.0.0rc8/src/http/mod.rs → /rnet-3.0.0rc10/src/http.rs +0 -0
  108. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/proxy.rs +0 -0
  109. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/tls/identity.rs +0 -0
  110. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/tls/keylog.rs +0 -0
  111. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/src/tls/store.rs +0 -0
  112. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/tests/cookie_test.py +0 -0
  113. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/tests/header_test.py +0 -0
  114. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/tests/redirect_test.py +0 -0
  115. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/tests/request_test.py +0 -0
  116. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/tests/response_test.py +0 -0
  117. {rnet-3.0.0rc8 → rnet-3.0.0rc10}/tests/tls_test.py +0 -0
@@ -0,0 +1,22 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "github-actions"
9
+ # Workflow files stored in the
10
+ # default location of `.github/workflows`
11
+ directory: "/"
12
+ schedule:
13
+ interval: "weekly"
14
+ - package-ecosystem: "cargo"
15
+ directory: "/"
16
+ schedule:
17
+ interval: "weekly"
18
+ # todo: if only this worked, see https://github.com/dependabot/dependabot-core/issues/4009
19
+ # only tell us if there's a new 'breaking' change we could upgrade to
20
+ # versioning-strategy: increase-if-necessary
21
+ # disable regular version updates, security updates are unaffected
22
+ open-pull-requests-limit: 0
@@ -20,9 +20,6 @@ on:
20
20
  - 'README.md'
21
21
  workflow_dispatch:
22
22
 
23
- env:
24
- MATURIIN_ARGS: '--find-interpreter'
25
-
26
23
  concurrency:
27
24
  group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }}
28
25
  cancel-in-progress: true
@@ -36,7 +33,7 @@ jobs:
36
33
  name: style
37
34
  runs-on: ubuntu-latest
38
35
  steps:
39
- - uses: actions/checkout@v3
36
+ - uses: actions/checkout@v5
40
37
 
41
38
  - uses: actions-rs/toolchain@v1
42
39
  with:
@@ -49,16 +46,17 @@ jobs:
49
46
 
50
47
  - name: Clippy check
51
48
  run: cargo clippy --all-targets --all-features
49
+
52
50
  tests:
53
51
  runs-on: ubuntu-latest
54
52
  steps:
55
- - uses: actions/checkout@v4
56
- - uses: actions/setup-python@v5
53
+ - uses: actions/checkout@v5
54
+ - uses: actions/setup-python@v6
57
55
  with:
58
56
  python-version: 3.x
59
57
  architecture: ${{ matrix.platform.target }}
60
58
  - name: Install the latest version of uv
61
- uses: astral-sh/setup-uv@v5
59
+ uses: astral-sh/setup-uv@v7
62
60
  - name: Set up virtual environment
63
61
  run: |
64
62
  uv venv
@@ -74,11 +72,17 @@ jobs:
74
72
  run: |
75
73
  source .venv/bin/activate
76
74
  pytest
75
+
77
76
  manylinux:
78
77
  runs-on: ${{ matrix.platform.runner }}
79
78
  strategy:
80
79
  fail-fast: false
81
80
  matrix:
81
+ build_type:
82
+ - name: standard
83
+ maturin_args: "--find-interpreter"
84
+ - name: free-threaded
85
+ maturin_args: "--interpreter 3.13t 3.14t"
82
86
  platform:
83
87
  - runner: ubuntu-latest
84
88
  target: x86_64
@@ -110,8 +114,8 @@ jobs:
110
114
  CXX: arm-linux-gnueabihf-g++
111
115
  CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER: arm-linux-gnueabihf-g++
112
116
  steps:
113
- - uses: actions/checkout@v4
114
- - uses: actions/setup-python@v5
117
+ - uses: actions/checkout@v5
118
+ - uses: actions/setup-python@v6
115
119
  with:
116
120
  python-version: 3.x
117
121
  - name: Install LLVM and Clang
@@ -126,7 +130,7 @@ jobs:
126
130
  with:
127
131
  rust-toolchain: stable
128
132
  target: ${{ matrix.platform.target }}
129
- args: ${{ matrix.platform.target == 'x86_64' && '--release --out dist --zig' || '--release --out dist' }} ${{ env.MATURIIN_ARGS }} --features ${{ matrix.platform.allocator }}
133
+ args: ${{ matrix.platform.target == 'x86_64' && '--release --out dist --zig' || '--release --out dist' }} ${{ matrix.build_type.maturin_args }} --features ${{ matrix.platform.allocator }}
130
134
  sccache: 'false'
131
135
  manylinux: auto
132
136
  container: 'off'
@@ -134,7 +138,7 @@ jobs:
134
138
  - name: Upload wheels
135
139
  uses: actions/upload-artifact@v4
136
140
  with:
137
- name: wheels-linux-${{ matrix.platform.target }}
141
+ name: wheels-linux-${{ matrix.platform.target }}-${{ matrix.build_type.name }}
138
142
  path: dist
139
143
 
140
144
  musllinux:
@@ -142,6 +146,11 @@ jobs:
142
146
  environment: MuslLinux
143
147
  strategy:
144
148
  matrix:
149
+ build_type:
150
+ - name: standard
151
+ maturin_args: "--find-interpreter"
152
+ - name: free-threaded
153
+ maturin_args: "--interpreter 3.13t 3.14t"
145
154
  platform:
146
155
  - runner: ubuntu-22.04
147
156
  target: x86_64-unknown-linux-musl
@@ -156,14 +165,14 @@ jobs:
156
165
  target: i686-unknown-linux-musl
157
166
  allocator: jemalloc
158
167
  steps:
159
- - uses: actions/checkout@v4
168
+ - uses: actions/checkout@v5
160
169
  - name: Build wheels
161
170
  run:
162
- bash .github/musl_build.sh ${{ matrix.platform.target }} "${{ env.MATURIIN_ARGS }}" --features "${{ matrix.platform.allocator }}"
171
+ bash .github/musl_build.sh ${{ matrix.platform.target }} "${{ matrix.build_type.maturin_args }}" --features "${{ matrix.platform.allocator }}"
163
172
  - name: Upload wheels
164
173
  uses: actions/upload-artifact@v4
165
174
  with:
166
- name: wheels-musllinux-${{ matrix.platform.target }}
175
+ name: wheels-musllinux-${{ matrix.platform.target }}-${{ matrix.build_type.name }}
167
176
  path: dist
168
177
 
169
178
  windows:
@@ -171,6 +180,11 @@ jobs:
171
180
  environment: Windows
172
181
  strategy:
173
182
  matrix:
183
+ build_type:
184
+ - name: standard
185
+ maturin_args: "--find-interpreter"
186
+ - name: free-threaded
187
+ maturin_args: "--interpreter 3.13t 3.14t"
174
188
  platform:
175
189
  - runner: windows-latest
176
190
  target: x64
@@ -184,8 +198,8 @@ jobs:
184
198
  target: aarch64
185
199
  allocator: mimalloc
186
200
  steps:
187
- - uses: actions/checkout@v4
188
- - uses: actions/setup-python@v5
201
+ - uses: actions/checkout@v5
202
+ - uses: actions/setup-python@v6
189
203
  with:
190
204
  python-version: 3.x
191
205
  architecture: ${{ matrix.platform.python-architecture || 'x64' }}
@@ -197,12 +211,12 @@ jobs:
197
211
  uses: PyO3/maturin-action@v1
198
212
  with:
199
213
  target: ${{ matrix.platform.target }}
200
- args: --release --out dist ${{ env.MATURIIN_ARGS }} --features ${{ matrix.platform.allocator || '' }}
201
- sccache: 'true'
214
+ args: --release --out dist ${{ matrix.build_type.maturin_args }} --features ${{ matrix.platform.allocator || '' }}
215
+ sccache: 'false'
202
216
  - name: Upload wheels
203
217
  uses: actions/upload-artifact@v4
204
218
  with:
205
- name: wheels-windows-${{ matrix.platform.target }}
219
+ name: wheels-windows-${{ matrix.platform.target }}-${{ matrix.build_type.name }}
206
220
  path: dist
207
221
 
208
222
  macos:
@@ -210,6 +224,11 @@ jobs:
210
224
  environment: MacOS
211
225
  strategy:
212
226
  matrix:
227
+ build_type:
228
+ - name: standard
229
+ maturin_args: "--find-interpreter"
230
+ - name: free-threaded
231
+ maturin_args: "--interpreter 3.13t 3.14t"
213
232
  platform:
214
233
  - runner: macos-13
215
234
  target: x86_64
@@ -218,8 +237,8 @@ jobs:
218
237
  target: aarch64
219
238
  allocator: jemalloc
220
239
  steps:
221
- - uses: actions/checkout@v4
222
- - uses: actions/setup-python@v5
240
+ - uses: actions/checkout@v5
241
+ - uses: actions/setup-python@v6
223
242
  with:
224
243
  python-version: 3.x
225
244
  - uses: actions-rs/toolchain@v1
@@ -230,18 +249,96 @@ jobs:
230
249
  uses: PyO3/maturin-action@v1
231
250
  with:
232
251
  target: ${{ matrix.platform.target }}
233
- args: --release --out dist ${{ env.MATURIIN_ARGS }} --features ${{ matrix.platform.allocator || '' }}
234
- sccache: 'true'
252
+ args: --release --out dist ${{ matrix.build_type.maturin_args }} --features ${{ matrix.platform.allocator || '' }}
253
+ sccache: 'false'
235
254
  - name: Upload wheels
236
255
  uses: actions/upload-artifact@v4
237
256
  with:
238
- name: wheels-macos-${{ matrix.platform.target }}
257
+ name: wheels-macos-${{ matrix.platform.target }}-${{ matrix.build_type.name }}
239
258
  path: dist
240
259
 
260
+ android:
261
+ name: Android
262
+ runs-on: ubuntu-latest
263
+ strategy:
264
+ matrix:
265
+ include:
266
+ - thing: arm64-android
267
+ target: aarch64-linux-android
268
+ arch: aarch64
269
+ python_version: 3.14.0
270
+ features: abi3-py314
271
+ - thing: x86_64-android
272
+ target: x86_64-linux-android
273
+ arch: x86_64
274
+ python_version: 3.14.0
275
+ features: abi3-py314
276
+
277
+ steps:
278
+ - uses: actions/checkout@v5
279
+ - uses: actions/setup-python@v6
280
+ with:
281
+ python-version: 3.x
282
+ - name: Set Android Linker path
283
+ if: endsWith(matrix.thing, '-android')
284
+ run: |
285
+ LINKER_PATH="$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/$(echo ${{ matrix.target }} | sed s/armv7/armv7a/)21-clang++"
286
+ echo "CARGO_TARGET_$(echo ${{ matrix.target }} | tr \\-a-z _A-Z)_LINKER=$LINKER_PATH" >> "$GITHUB_ENV"
287
+ echo "$PATH:$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin" >> "$GITHUB_PATH"
288
+ env
289
+ - name: Download and setup Android Python
290
+ run: |
291
+ wget https://www.python.org/ftp/python/${{ matrix.python_version }}/python-${{ matrix.python_version }}-${{ matrix.arch }}-linux-android.tar.gz
292
+
293
+ mkdir -p /tmp/python-android
294
+ tar -xzf python-${{ matrix.python_version }}-${{ matrix.arch }}-linux-android.tar.gz -C /tmp/python-android --strip-components=1
295
+
296
+ mv /tmp/python-android/prefix/lib /tmp/python-android/
297
+ mv /tmp/python-android/prefix/include /tmp/python-android/
298
+
299
+ echo "RUSTFLAGS=-L native=/tmp/python-android/lib" >> "$GITHUB_ENV"
300
+
301
+ echo "=== Root directory after move ==="
302
+ ls -la /tmp/python-android/
303
+ echo "=== Lib directory ==="
304
+ ls -la /tmp/python-android/lib/ | head -10
305
+ echo "=== Include directory ==="
306
+ ls -la /tmp/python-android/include/
307
+ - name: Build wheels
308
+ uses: PyO3/maturin-action@v1
309
+ with:
310
+ rust-toolchain: stable
311
+ target: ${{ matrix.target }}
312
+ args: --release --out dist --no-default-features --features ${{ matrix.features }} --skip-auditwheel
313
+ sccache: 'false'
314
+ container: 'off'
315
+ - name: Fix Android wheel platform tags
316
+ run: |
317
+ cd dist
318
+ for wheel in *.whl; do
319
+ case "$wheel" in
320
+ *linux_aarch64*)
321
+ new_wheel=${wheel/linux_aarch64/android_21_arm64_v8a}
322
+ mv "$wheel" "$new_wheel"
323
+ echo "Renamed: $wheel -> $new_wheel"
324
+ ;;
325
+ *linux_x86_64*)
326
+ new_wheel=${wheel/linux_x86_64/android_21_x86_64}
327
+ mv "$wheel" "$new_wheel"
328
+ echo "Renamed: $wheel -> $new_wheel"
329
+ ;;
330
+ esac
331
+ done
332
+ - name: Upload wheels
333
+ uses: actions/upload-artifact@v4
334
+ with:
335
+ name: wheels-android-${{ matrix.target }}
336
+ path: dist
337
+
241
338
  sdist:
242
339
  runs-on: ubuntu-latest
243
340
  steps:
244
- - uses: actions/checkout@v4
341
+ - uses: actions/checkout@v5
245
342
  - name: Build sdist
246
343
  uses: PyO3/maturin-action@v1
247
344
  with:
@@ -257,7 +354,7 @@ jobs:
257
354
  name: Release
258
355
  runs-on: ubuntu-latest
259
356
  if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
260
- needs: [manylinux, musllinux, windows, macos, sdist, tests, style]
357
+ needs: [manylinux, musllinux, windows, macos, android, sdist, tests, style]
261
358
  permissions:
262
359
  # Use to sign the release artifacts
263
360
  id-token: write
@@ -266,9 +363,9 @@ jobs:
266
363
  # Used to generate artifact attestation
267
364
  attestations: write
268
365
  steps:
269
- - uses: actions/download-artifact@v4
366
+ - uses: actions/download-artifact@v5
270
367
  - name: Generate artifact attestation
271
- uses: actions/attest-build-provenance@v1
368
+ uses: actions/attest-build-provenance@v3
272
369
  with:
273
370
  subject-path: 'wheels-*/*'
274
371
  - name: Publish to PyPI
@@ -286,3 +383,4 @@ jobs:
286
383
  token: ${{ secrets.GITHUB_TOKEN }}
287
384
  prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') }}
288
385
  generate_release_notes: true
386
+ files: wheels-*/*
@@ -80,3 +80,5 @@ dist
80
80
 
81
81
  keylog.txt
82
82
  *.json
83
+ *.jpg
84
+ *.csv