Skip to content

Commit 74b3b58

Browse files
committed
ASGI Implementation
1 parent 4e003f5 commit 74b3b58

26 files changed

+2908
-246
lines changed

.github/workflows/CI.yml

Lines changed: 101 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ env:
44
DEBUG: napi:*
55
APP_NAME: python-node
66
MACOSX_DEPLOYMENT_TARGET: '10.13'
7+
CARGO_NET_GIT_FETCH_WITH_CLI: 'true'
78

89
permissions:
910
contents: write
@@ -23,6 +24,10 @@ on:
2324
- docs/**
2425
pull_request:
2526

27+
concurrency:
28+
group: ${{ github.workflow }}-${{ github.ref }}-ci
29+
cancel-in-progress: true
30+
2631
jobs:
2732
build:
2833
strategy:
@@ -45,7 +50,9 @@ jobs:
4550
- uses: actions/checkout@v4
4651
- uses: webfactory/[email protected]
4752
with:
48-
ssh-private-key: ${{ secrets.HTTP_HANDLER_ACCESS_TOKEN }}
53+
ssh-private-key: |
54+
${{ secrets.HTTP_HANDLER_ACCESS_TOKEN }}
55+
${{ secrets.HTTP_REWRITER_ACCESS_TOKEN }}
4956
- uses: pnpm/action-setup@v4
5057
with:
5158
version: latest
@@ -88,22 +95,52 @@ jobs:
8895
run: |
8996
set -x
9097
98+
export CARGO_NET_GIT_FETCH_WITH_CLI=true
99+
91100
# Install apt dependencies
92101
apt-get update -y
93-
apt-get install -y openssh-client
102+
apt-get install -y openssh-client python3 python3-dev
94103
95104
# Setup pnpm
96105
corepack disable
97106
npm i -gf pnpm
98107
99-
# Set up SSH key (to checkout private repos with cargo)
108+
# Set up SSH keys (to checkout private repos with cargo)
100109
mkdir -p ~/.ssh
101-
chmod -R 400 ~/.ssh
102-
touch ~/.ssh/config ~/.ssh/known_hosts
103-
eval `ssh-agent -s`
104-
echo "${{ secrets.HTTP_HANDLER_ACCESS_TOKEN }}" | tr -d '\r' | ssh-add -
105-
ssh-add -l
106-
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
110+
chmod 700 ~/.ssh
111+
112+
# Save SSH keys to files
113+
echo "${{ secrets.HTTP_HANDLER_ACCESS_TOKEN }}" | tr -d '\r' > ~/.ssh/http_handler_key
114+
echo "${{ secrets.HTTP_REWRITER_ACCESS_TOKEN }}" | tr -d '\r' > ~/.ssh/http_rewriter_key
115+
chmod 600 ~/.ssh/http_handler_key
116+
chmod 600 ~/.ssh/http_rewriter_key
117+
118+
# Add GitHub to known hosts (for all aliases)
119+
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
120+
121+
# Create SSH config with host aliases
122+
cat > ~/.ssh/config <<'EOF'
123+
Host github.com-http-handler
124+
HostName github.com
125+
User git
126+
IdentityFile ~/.ssh/http_handler_key
127+
IdentitiesOnly yes
128+
129+
Host github.com-http-rewriter
130+
HostName github.com
131+
User git
132+
IdentityFile ~/.ssh/http_rewriter_key
133+
IdentitiesOnly yes
134+
EOF
135+
chmod 600 ~/.ssh/config
136+
137+
# Configure git to rewrite URLs to use the correct host alias
138+
git config --global url."ssh://[email protected]/platformatic/http-handler".insteadOf "ssh://[email protected]/platformatic/http-handler"
139+
git config --global url."ssh://[email protected]/platformatic/http-rewriter".insteadOf "ssh://[email protected]/platformatic/http-rewriter"
140+
141+
# Also handle variations without .git suffix
142+
git config --global url."ssh://[email protected]/platformatic/http-handler.git".insteadOf "ssh://[email protected]/platformatic/http-handler.git"
143+
git config --global url."ssh://[email protected]/platformatic/http-rewriter.git".insteadOf "ssh://[email protected]/platformatic/http-rewriter.git"
107144
108145
${{ matrix.settings.build }}
109146
- name: Build
@@ -138,7 +175,9 @@ jobs:
138175
- uses: actions/checkout@v4
139176
- uses: webfactory/[email protected]
140177
with:
141-
ssh-private-key: ${{ secrets.HTTP_HANDLER_ACCESS_TOKEN }}
178+
ssh-private-key: |
179+
${{ secrets.HTTP_HANDLER_ACCESS_TOKEN }}
180+
${{ secrets.HTTP_REWRITER_ACCESS_TOKEN }}
142181
- uses: pnpm/action-setup@v4
143182
with:
144183
version: latest
@@ -155,6 +194,14 @@ jobs:
155194
- name: List packages
156195
run: ls -R .
157196
shell: bash
197+
- name: Check test directory
198+
run: |
199+
echo "Current directory: $(pwd)"
200+
echo "Test directory contents:"
201+
ls -la test/ || echo "test/ directory not found"
202+
echo "Looking for test files:"
203+
find . -name "*.test.mjs" -type f || echo "No test files found"
204+
shell: bash
158205
- run: cargo test
159206
- run: pnpm test
160207

@@ -227,22 +274,52 @@ jobs:
227274
run: |
228275
set -x
229276
277+
export CARGO_NET_GIT_FETCH_WITH_CLI=true
278+
230279
# Install apt dependencies
231280
apt-get update -y
232-
apt-get install -y openssh-client curl
281+
apt-get install -y openssh-client curl git build-essential python3 python3-dev
233282
234283
# Install rust toolchain
235284
curl https://sh.rustup.rs -sSf | bash -s -- -y -t ${{ matrix.settings.target }}
236-
source "$HOME/.cargo/env"
285+
. "$HOME/.cargo/env"
237286
238-
# Set up SSH key (to checkout private repos with cargo)
287+
# Set up SSH keys (to checkout private repos with cargo)
239288
mkdir -p ~/.ssh
240-
chmod -R 400 ~/.ssh
241-
touch ~/.ssh/config ~/.ssh/known_hosts
242-
eval `ssh-agent -s`
243-
echo "${{ secrets.HTTP_HANDLER_ACCESS_TOKEN }}" | tr -d '\r' | ssh-add -
244-
ssh-add -l
245-
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
289+
chmod 700 ~/.ssh
290+
291+
# Save SSH keys to files
292+
echo "${{ secrets.HTTP_HANDLER_ACCESS_TOKEN }}" | tr -d '\r' > ~/.ssh/http_handler_key
293+
echo "${{ secrets.HTTP_REWRITER_ACCESS_TOKEN }}" | tr -d '\r' > ~/.ssh/http_rewriter_key
294+
chmod 600 ~/.ssh/http_handler_key
295+
chmod 600 ~/.ssh/http_rewriter_key
296+
297+
# Add GitHub to known hosts (for all aliases)
298+
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
299+
300+
# Create SSH config with host aliases
301+
cat > ~/.ssh/config <<'EOF'
302+
Host github.com-http-handler
303+
HostName github.com
304+
User git
305+
IdentityFile ~/.ssh/http_handler_key
306+
IdentitiesOnly yes
307+
308+
Host github.com-http-rewriter
309+
HostName github.com
310+
User git
311+
IdentityFile ~/.ssh/http_rewriter_key
312+
IdentitiesOnly yes
313+
EOF
314+
chmod 600 ~/.ssh/config
315+
316+
# Configure git to rewrite URLs to use the correct host alias
317+
git config --global url."ssh://[email protected]/platformatic/http-handler".insteadOf "ssh://[email protected]/platformatic/http-handler"
318+
git config --global url."ssh://[email protected]/platformatic/http-rewriter".insteadOf "ssh://[email protected]/platformatic/http-rewriter"
319+
320+
# Also handle variations without .git suffix
321+
git config --global url."ssh://[email protected]/platformatic/http-handler.git".insteadOf "ssh://[email protected]/platformatic/http-handler.git"
322+
git config --global url."ssh://[email protected]/platformatic/http-rewriter.git".insteadOf "ssh://[email protected]/platformatic/http-rewriter.git"
246323
247324
cargo test --target ${{ matrix.settings.target }}
248325
- name: Test bindings
@@ -251,6 +328,11 @@ jobs:
251328
image: ${{ steps.docker.outputs.IMAGE }}
252329
options: -v ${{ steps.docker.outputs.PNPM_STORE_PATH }}:${{ steps.docker.outputs.PNPM_STORE_PATH }} -v ${{ github.workspace }}:${{ github.workspace }} -w ${{ github.workspace }} --platform ${{ steps.docker.outputs.PLATFORM }}
253330
run: |
331+
# Install Python 3.9+ (any version will work with abi3-py39)
332+
apt-get update -y
333+
apt-get install -y python3 python3-dev
334+
335+
# Install pnpm and run tests
254336
corepack disable
255337
npm i -gf pnpm
256338
pnpm test

.github/workflows/lint.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
name: Lint
22

3+
env:
4+
CARGO_NET_GIT_FETCH_WITH_CLI: 'true'
5+
36
'on':
47
push:
58
branches:
@@ -24,6 +27,11 @@ jobs:
2427
runs-on: ubuntu-latest
2528
steps:
2629
- uses: actions/checkout@v4
30+
- uses: webfactory/[email protected]
31+
with:
32+
ssh-private-key: |
33+
${{ secrets.HTTP_HANDLER_ACCESS_TOKEN }}
34+
${{ secrets.HTTP_REWRITER_ACCESS_TOKEN }}
2735
- name: setup pnpm
2836
uses: pnpm/action-setup@v4
2937
with:

Cargo.lock

Lines changed: 46 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,31 @@ keywords = ["http", "rewriting", "library"]
99
categories = ["network-programming", "web-development"]
1010
edition = "2024"
1111

12+
[features]
13+
default = []
14+
napi-support = ["dep:napi", "dep:napi-derive", "dep:napi-build", "http-handler/napi-support", "http-rewriter/napi-support"]
15+
1216
[lib]
1317
name = "python_node"
1418
crate-type = ["cdylib"]
1519

1620
[dependencies]
1721
async-trait = "0.1.88"
1822
bytes = "1.10.1"
19-
http-handler = { git = "ssh://[email protected]/platformatic/http-handler", features = ["napi-support"] }
20-
# http-handler = { path = "../http-handler", features = ["napi-support"] }
21-
# http-rewriter = { git = "ssh://[email protected]/platformatic/http-rewriter", features = ["napi-support"] }
22-
http-rewriter = { path = "../http-rewriter", features = ["napi-support"] }
23+
http-handler = { git = "ssh://[email protected]/platformatic/http-handler.git" }
24+
# http-handler = { path = "../http-handler" }
25+
http-rewriter = { git = "ssh://[email protected]/platformatic/http-rewriter.git" }
26+
# http-rewriter = { path = "../http-rewriter" }
2327
# Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix
24-
napi = { version = "3.0.0-beta.8", default-features = false, features = ["napi4"] }
25-
napi-derive = "3.0.0-beta.8"
26-
pyo3 = { version = "0.25.1", features = ["auto-initialize", "experimental-async"] }
28+
napi = { version = "3.0.0-beta.8", default-features = false, features = ["napi4"], optional = true }
29+
napi-derive = { version = "3.0.0-beta.8", optional = true }
30+
pyo3 = { version = "0.25.1", features = ["auto-initialize", "experimental-async", "abi3-py39"] }
2731
pyo3-async-runtimes = { version = "0.25.0", features = ["tokio-runtime"] }
32+
thiserror = "2.0.12"
2833
tokio = { version = "1.45.1", features = ["full"] }
2934

3035
[build-dependencies]
31-
napi-build = "2.2.1"
36+
napi-build = { version = "2.2.1", optional = true }
3237

3338
[profile.release]
3439
lto = true

build.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
#[cfg(feature = "napi-support")]
12
extern crate napi_build;
23

34
fn main() {
5+
#[cfg(feature = "napi-support")]
46
napi_build::setup();
57
}

0 commit comments

Comments
 (0)