-
Notifications
You must be signed in to change notification settings - Fork 30
Expand file tree
/
Copy pathjustfile
More file actions
99 lines (81 loc) · 4.23 KB
/
Copy pathjustfile
File metadata and controls
99 lines (81 loc) · 4.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# Development
test:
uv run pytest
lint:
uv run ruff check .
fmt:
uv run ruff format .
typecheck:
uv run mypy src/ccproxy tests --no-incremental
uv run ty check src tests --output-format concise
package-mflows *ARGS:
uv run python scripts/package_mflows.py {{ARGS}}
e2e-packaged-mflows:
tmp=$(mktemp -d); \
trap 'CCPROXY_CONFIG_DIR="'"$tmp"'" process-compose down >/dev/null 2>&1 || true; rm -rf "'"$tmp"'"' EXIT; \
cp src/ccproxy/templates/ccproxy.yaml "$tmp/ccproxy.yaml"; \
mkdir -p "$tmp/shapes"; \
uv run python -c 'import sys, yaml; p=sys.argv[1]; shapes=sys.argv[2]; data=yaml.safe_load(open(p)); cc=data["ccproxy"]; cc["port"]=4001; cc["inspector"]["port"]=8084; cc["mcp"]["http"]["port"]=4031; cc["inspector"]["cert_dir"]=sys.argv[3]; cc["shaping"]["shapes_dir"]=shapes; open(p, "w").write(yaml.safe_dump(data, sort_keys=False))' "$tmp/ccproxy.yaml" "$tmp/shapes" "$tmp"; \
CCPROXY_CONFIG_DIR="$tmp" process-compose down >/dev/null 2>&1 || true; \
CCPROXY_CONFIG_DIR="$tmp" process-compose up --detached; \
for i in $(seq 1 60); do CCPROXY_CONFIG_DIR="$tmp" uv run ccproxy status --proxy >/dev/null 2>&1 && break; sleep 1; done; \
CCPROXY_CONFIG_DIR="$tmp" uv run ccproxy status --proxy; \
CCPROXY_CONFIG_DIR="$tmp" CCPROXY_E2E_PACKAGED_SHAPES=1 CCPROXY_E2E_URL=http://127.0.0.1:4001 uv run pytest --no-cov -rs -m e2e tests/e2e/test_packaged_mflows_e2e.py
e2e-namespace-observe:
command -v slirp4netns >/dev/null
command -v unshare >/dev/null
command -v nsenter >/dev/null
command -v ip >/dev/null
command -v wg >/dev/null
command -v iptables >/dev/null
command -v sysctl >/dev/null
tmp=$(mktemp -d); \
trap 'CCPROXY_CONFIG_DIR="'"$tmp"'" process-compose down >/dev/null 2>&1 || true; rm -rf "'"$tmp"'"' EXIT; \
cp src/ccproxy/templates/ccproxy.yaml "$tmp/ccproxy.yaml"; \
mkdir -p "$tmp/shapes"; \
uv run python -c 'import sys, yaml; p=sys.argv[1]; shapes=sys.argv[2]; data=yaml.safe_load(open(p)); cc=data["ccproxy"]; cc["port"]=4001; cc["inspector"]["port"]=8084; cc["mcp"]["http"]["port"]=4031; cc["inspector"]["cert_dir"]=sys.argv[3]; cc["shaping"]["shapes_dir"]=shapes; open(p, "w").write(yaml.safe_dump(data, sort_keys=False))' "$tmp/ccproxy.yaml" "$tmp/shapes" "$tmp"; \
CCPROXY_CONFIG_DIR="$tmp" process-compose down >/dev/null 2>&1 || true; \
CCPROXY_CONFIG_DIR="$tmp" process-compose up --detached; \
for i in $(seq 1 60); do test -s "$tmp/.inspector-wireguard-client.conf" && break; sleep 1; done; \
test -s "$tmp/.inspector-wireguard-client.conf"; \
CCPROXY_CONFIG_DIR="$tmp" uv run ccproxy namespace status --json; \
CCPROXY_CONFIG_DIR="$tmp" uv run ccproxy namespace doctor --json
# Process management
up:
process-compose up --detached
down:
process-compose down
restart:
process-compose down
process-compose up --detached
logs *ARGS:
process-compose process logs ccproxy {{ARGS}}
# Build wheel for pip-install validation (mirrors the GHA build-wheel job)
build-wheel:
rm -rf dist
uv build --wheel
# Release-gate: boot a vanilla cloud VM and validate the install end-to-end.
# Pre-req: `just build-wheel`.
#
# Usage: just release-test-qemu debian-12 | ubuntu-24.04 | fedora-44
release-test-qemu DISTRO="debian-12":
test -d dist || just build-wheel
scripts/qemu_release_test.sh {{DISTRO}}
# Run release-gate test against every supported distro sequentially.
release-test-qemu-all:
just build-wheel
scripts/qemu_release_test.sh debian-12
scripts/qemu_release_test.sh ubuntu-24.04
scripts/qemu_release_test.sh fedora-44
# Build the x86_64 NixOS-WSL release artifact.
build-wsl ARTIFACT="ccproxy.wsl":
sudo nix run .#nixosConfigurations.ccproxy-wsl.config.system.build.tarballBuilder -- {{ARTIFACT}}
# Validate a .wsl artifact with Microsoft's modern distro validator.
validate-wsl-artifact ARTIFACT="ccproxy.wsl":
nix run .#wslArtifactValidator -- {{ARTIFACT}}
# Run the Windows-local WSL2 import/probe/unregister harness.
test-wsl ARTIFACT="ccproxy.wsl":
pwsh -File scripts/test_wsl.ps1 -Artifact {{ARTIFACT}}
# Build/run a disposable Windows 11 KVM VM and execute the WSL2 harness inside it.
test-wsl-kvm ARTIFACT="tmp/ccproxy-wsl-smoke/ccproxy.wsl":
nix run .#wslKvmSmoke -- {{ARTIFACT}}