rustwright 0.1.0a2__tar.gz → 0.1.0a3__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.
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/.dockerignore +0 -1
- rustwright-0.1.0a3/.github/sync.yml +53 -0
- rustwright-0.1.0a3/.github/workflows/auto-merge-sync.yml +48 -0
- rustwright-0.1.0a3/.github/workflows/sync-rustwright-cloud.yml +62 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/BENCHMARK.md +1 -1
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/CODE_ARCHITECTURE.md +2 -2
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/Cargo.lock +2 -2
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/Cargo.toml +6 -2
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/Dockerfile +0 -7
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/PKG-INFO +1 -1
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/run_benchmarks.py +3 -405
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/docs/async-design.md +63 -7
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/pyproject.toml +1 -4
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/sync_api.py +335 -287
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/src/lib.rs +1506 -225
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tests/test_rustwright_sync_api.py +328 -88
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/docker_test.sh +0 -3
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/render_project_tables.py +0 -21
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/run_antibot_benchmarks.py +1 -339
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/run_benchmark_matrix.py +1 -9
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/run_mind2web_benchmark.py +1 -286
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/run_mind2web_matrix.py +1 -1
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/run_mind2web_sharded.py +1 -1
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/run_remote_docker_test.py +0 -1
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/.github/dependabot.yml +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/.github/prompts/code-review.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/.github/workflows/benchmark-testbox.yml +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/.github/workflows/benchmark.yml +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/.github/workflows/claude-code-review.yml +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/.github/workflows/release-npm.yml +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/.github/workflows/release-pypi.yml +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/.github/workflows/test.yml +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/.gitignore +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/CODE_OF_CONDUCT.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/CONTRIBUTING.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/LICENSE +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/LIMITATIONS.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/README.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/SECURITY.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/README.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/async_concurrency_load.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/automation_cases.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/basemark/README.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/basemark/benchmark.json +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/basemark/run.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/browser_speed/README.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/browser_speed/list.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/browser_speed_lib.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/browsertime/README.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/browsertime/benchmark.json +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/browsertime/run.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/browsertime/scripts/basic_journey.cjs +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/browsertime/urls/default.txt +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/crossbench/README.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/crossbench/benchmark.json +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/crossbench/run.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/jetstream/README.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/jetstream/benchmark.json +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/jetstream/run.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/motionmark/README.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/motionmark/benchmark.json +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/motionmark/run.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/speedometer/README.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/speedometer/benchmark.json +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/speedometer/run.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/tachometer/README.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/tachometer/benchmark.json +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/tachometer/cases/dom_append.html +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/tachometer/cases/layout_read.html +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/tachometer/cases/selector_query.html +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/tachometer/run.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/telescope/README.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/telescope/benchmark.json +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/telescope/run.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/webpagetest/README.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/webpagetest/benchmark.json +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/webpagetest/run.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/benchmarks/webpagetest/scripts/basic_navigation.wpt +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/docs/RELEASING.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/docs/api-surface/playwright-async-api-classifications.json +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/docs/api-surface/playwright-async-api.json +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/docs/api-surface/playwright-async-api.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/docs/api-surface/playwright-sync-api-classifications.json +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/docs/api-surface/playwright-sync-api.json +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/docs/api-surface/playwright-sync-api.md +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/docs/assets/banner.png +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/docs/assets/logo.png +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/docs/assets/mascot.png +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/examples/quickstart.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/__init__.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/__main__.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_backend.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/__init__.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/cloakbrowser/__init__.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/patchright/__init__.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/patchright/__main__.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/patchright/_impl/__init__.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/patchright/_impl/_errors.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/patchright/async_api.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/patchright/pytest_plugin.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/patchright/sync_api.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/playwright/__init__.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/playwright/__main__.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/playwright/_impl/__init__.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/playwright/_impl/_errors.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/playwright/async_api.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/playwright/pytest_plugin.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/playwright/sync_api.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/pytest_playwright/__init__.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/pytest_playwright/py.typed +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_compat/pytest_playwright/pytest_playwright.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/_devices.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/async_api.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/cli.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/python/rustwright/pytest_plugin.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tests/fixtures/mind2web_sample.json +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tests/test_antibot_benchmarks.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tests/test_mind2web_benchmark.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tests/test_playwright_compat_optin.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tests/test_playwright_parity_cases.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tests/test_project_status_tools.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tests/test_skyvern_alias_command.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tests/test_skyvern_cloud_overlay_tests.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tests/test_skyvern_prompt_overlay_smoke.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tests/test_skyvern_replacement_smoke.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/api_surface_audit.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/audit_skyvern_playwright_usage.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/check_benchmark_artifacts.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/check_cross_library_speed_goal.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/check_external_reliability_goal.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/check_launch_latency_claim.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/check_native_extension.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/check_phase1_gate.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/check_phase2_benchmark.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/check_testbox_visibility.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/docker_verify.sh +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/download_mind2web.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/import_mind2web.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/import_webvoyager.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/query_project_state.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/render_benchmark_matrix.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/run_benchmark_testbox.sh +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/run_parity_cases.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/run_skyvern_alias_command.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/run_skyvern_cloud_overlay_tests.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/run_skyvern_prompt_overlay_smoke.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/run_skyvern_replacement_smoke.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/run_webvoyager_benchmark.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/run_webvoyager_matrix.py +0 -0
- {rustwright-0.1.0a2 → rustwright-0.1.0a3}/tools/rustwright_ts_binding.js +0 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Shared Rustwright files mirrored from rustwright to rustwright-cloud.
|
|
2
|
+
# Repository-specific GitHub workflows and metadata are intentionally excluded.
|
|
3
|
+
# Cloud-only additions must live outside the mirrored paths below.
|
|
4
|
+
Skyvern-AI/rustwright-cloud:
|
|
5
|
+
- source: benchmarks/
|
|
6
|
+
dest: benchmarks/
|
|
7
|
+
deleteOrphaned: true
|
|
8
|
+
- source: docs/
|
|
9
|
+
dest: docs/
|
|
10
|
+
deleteOrphaned: true
|
|
11
|
+
- source: node/
|
|
12
|
+
dest: node/
|
|
13
|
+
deleteOrphaned: true
|
|
14
|
+
- source: python/
|
|
15
|
+
dest: python/
|
|
16
|
+
deleteOrphaned: true
|
|
17
|
+
- source: src/
|
|
18
|
+
dest: src/
|
|
19
|
+
deleteOrphaned: true
|
|
20
|
+
- source: tests/
|
|
21
|
+
dest: tests/
|
|
22
|
+
deleteOrphaned: true
|
|
23
|
+
- source: tools/
|
|
24
|
+
dest: tools/
|
|
25
|
+
deleteOrphaned: true
|
|
26
|
+
- source: .dockerignore
|
|
27
|
+
dest: .dockerignore
|
|
28
|
+
- source: .gitignore
|
|
29
|
+
dest: .gitignore
|
|
30
|
+
- source: BENCHMARK.md
|
|
31
|
+
dest: BENCHMARK.md
|
|
32
|
+
- source: CODE_ARCHITECTURE.md
|
|
33
|
+
dest: CODE_ARCHITECTURE.md
|
|
34
|
+
- source: CODE_OF_CONDUCT.md
|
|
35
|
+
dest: CODE_OF_CONDUCT.md
|
|
36
|
+
- source: CONTRIBUTING.md
|
|
37
|
+
dest: CONTRIBUTING.md
|
|
38
|
+
- source: Cargo.lock
|
|
39
|
+
dest: Cargo.lock
|
|
40
|
+
- source: Cargo.toml
|
|
41
|
+
dest: Cargo.toml
|
|
42
|
+
- source: Dockerfile
|
|
43
|
+
dest: Dockerfile
|
|
44
|
+
- source: LICENSE
|
|
45
|
+
dest: LICENSE
|
|
46
|
+
- source: LIMITATIONS.md
|
|
47
|
+
dest: LIMITATIONS.md
|
|
48
|
+
- source: README.md
|
|
49
|
+
dest: README.md
|
|
50
|
+
- source: SECURITY.md
|
|
51
|
+
dest: SECURITY.md
|
|
52
|
+
- source: pyproject.toml
|
|
53
|
+
dest: pyproject.toml
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: Auto-merge sync PRs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [opened, reopened, ready_for_review, labeled, synchronize]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: write
|
|
9
|
+
pull-requests: write
|
|
10
|
+
checks: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
merge-when-sync:
|
|
14
|
+
# Auto-merge only machine-generated mirror PRs:
|
|
15
|
+
# - carry the 'sync' label applied by repo-file-sync-action
|
|
16
|
+
# - branch created by the sync action (repo-sync/*)
|
|
17
|
+
# - opened by the configured sync actor
|
|
18
|
+
if: >-
|
|
19
|
+
contains(join(github.event.pull_request.labels.*.name, ','), 'sync') &&
|
|
20
|
+
startsWith(github.event.pull_request.head.ref, 'repo-sync/') &&
|
|
21
|
+
github.event.pull_request.user.login == vars.RUSTWRIGHT_SYNC_ACTOR
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
steps:
|
|
24
|
+
- name: Wait for required checks to pass
|
|
25
|
+
uses: lewagon/wait-on-check-action@74049309dfeff245fe8009a0137eacf28136cb3c # v1.5.0
|
|
26
|
+
with:
|
|
27
|
+
ref: ${{ github.event.pull_request.head.sha }}
|
|
28
|
+
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
29
|
+
wait-interval: 15
|
|
30
|
+
allowed-conclusions: success,skipped,neutral
|
|
31
|
+
ignore-checks: merge-when-sync,claude-review
|
|
32
|
+
- name: Verify PR is still open
|
|
33
|
+
env:
|
|
34
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
35
|
+
run: |
|
|
36
|
+
STATE=$(gh pr view ${{ github.event.pull_request.number }} --repo "${{ github.repository }}" --json state --jq '.state')
|
|
37
|
+
if [ "$STATE" != "OPEN" ]; then
|
|
38
|
+
echo "::error::PR is $STATE — aborting merge"
|
|
39
|
+
exit 1
|
|
40
|
+
fi
|
|
41
|
+
- name: Merge sync PR with admin bypass
|
|
42
|
+
env:
|
|
43
|
+
GH_TOKEN: ${{ secrets.RUSTWRIGHT_SYNC_GH_PAT }}
|
|
44
|
+
run: |-
|
|
45
|
+
gh pr merge ${{ github.event.pull_request.number }} \
|
|
46
|
+
--squash \
|
|
47
|
+
--admin \
|
|
48
|
+
--repo "${{ github.repository }}"
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
name: Sync rustwright changes to rustwright-cloud
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request_target:
|
|
5
|
+
types: [closed]
|
|
6
|
+
branches: [main]
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
issues: write
|
|
12
|
+
pull-requests: write
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
sync:
|
|
16
|
+
if: >-
|
|
17
|
+
github.event_name == 'workflow_dispatch' ||
|
|
18
|
+
(github.event.pull_request.merged == true &&
|
|
19
|
+
!contains(join(github.event.pull_request.labels.*.name, ','), 'sync') &&
|
|
20
|
+
!startsWith(github.event.pull_request.head.ref, 'repo-sync/'))
|
|
21
|
+
runs-on: blacksmith-2vcpu-ubuntu-2404
|
|
22
|
+
steps:
|
|
23
|
+
- name: Checkout main
|
|
24
|
+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
25
|
+
with:
|
|
26
|
+
ref: main
|
|
27
|
+
fetch-depth: 0
|
|
28
|
+
persist-credentials: false
|
|
29
|
+
|
|
30
|
+
- name: Sync shared files to rustwright-cloud
|
|
31
|
+
id: file-sync
|
|
32
|
+
uses: Skyvern-AI/repo-file-sync-action@590c4ddbe1d7b5c4ca1e4b4edc85c7f919b6c26a # main
|
|
33
|
+
with:
|
|
34
|
+
GH_PAT: ${{ secrets.RUSTWRIGHT_SYNC_GH_PAT }}
|
|
35
|
+
GIT_EMAIL: ${{ github.event.pull_request.user.id && format('{0}+{1}@users.noreply.github.com', github.event.pull_request.user.id, github.event.pull_request.user.login) || format('{0}@users.noreply.github.com', github.actor) }}
|
|
36
|
+
GIT_USERNAME: ${{ github.event.pull_request.user.login || github.actor }}
|
|
37
|
+
PR_LABELS: sync
|
|
38
|
+
BRANCH_NAME: repo-sync/rustwright-${{ github.event.pull_request.number || github.run_id }}
|
|
39
|
+
PR_BODY: ${{ github.event.pull_request.html_url || 'Manual sync from rustwright' }}
|
|
40
|
+
PR_TITLE: "Sync rustwright changes to rustwright-cloud (#${{ github.event.pull_request.number || github.run_id }})"
|
|
41
|
+
|
|
42
|
+
- name: Link the rustwright-cloud PR
|
|
43
|
+
if: github.event_name == 'pull_request_target' && steps.file-sync.outputs.pull_request_urls
|
|
44
|
+
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
|
45
|
+
env:
|
|
46
|
+
PR_URLS: ${{ steps.file-sync.outputs.pull_request_urls }}
|
|
47
|
+
with:
|
|
48
|
+
script: |
|
|
49
|
+
let urls;
|
|
50
|
+
try {
|
|
51
|
+
urls = JSON.parse(process.env.PR_URLS);
|
|
52
|
+
} catch {
|
|
53
|
+
urls = [process.env.PR_URLS].filter(Boolean);
|
|
54
|
+
}
|
|
55
|
+
if (urls.length) {
|
|
56
|
+
await github.rest.issues.createComment({
|
|
57
|
+
owner: context.repo.owner,
|
|
58
|
+
repo: context.repo.repo,
|
|
59
|
+
issue_number: context.payload.pull_request.number,
|
|
60
|
+
body: urls.map((url) => `Synced to rustwright-cloud: ${url}`).join('\n'),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
@@ -50,7 +50,7 @@ changed after the testbox was warmed, rebuild the image inside the testbox after
|
|
|
50
50
|
the local changes sync:
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
|
-
blacksmith testbox run --id <ID> "TEST_DOCKER_MEMORY_LIMIT=8g RUSTWRIGHT_DOCKER_IMAGE=rustwright-verify-testbox
|
|
53
|
+
blacksmith testbox run --id <ID> "TEST_DOCKER_MEMORY_LIMIT=8g RUSTWRIGHT_DOCKER_IMAGE=rustwright-verify-testbox INSTALL_PUPPETEER=1 tools/docker_test.sh build ."
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
For large task suites such as Mind2Web, prefer the sharded Docker runner so each
|
|
@@ -25,12 +25,12 @@ Last updated: 2026-05-25
|
|
|
25
25
|
| `python/rustwright/pytest_plugin.py` | Pytest fixtures. |
|
|
26
26
|
| `python/playwright/*`, `python/patchright/*`, `python/cloakbrowser/*` | Compatibility import packages. Public alpha compatibility imports should be enabled only through opt-in compatibility mode. |
|
|
27
27
|
| `benchmarks/automation_cases.py` | 408 shared Playwright-style automation/parity cases and the 15-case benchmark subset, including WebVoyager/Mind2Web-style workflow cases. |
|
|
28
|
-
| `benchmarks/run_benchmarks.py` | Rustwright
|
|
28
|
+
| `benchmarks/run_benchmarks.py` | Rustwright and Playwright benchmark runner for the 15-case comparable workload. |
|
|
29
29
|
| `tests/test_rustwright_sync_api.py` | Main behavior/regression suite. |
|
|
30
30
|
| `tests/test_playwright_parity_cases.py` | Shared parity harness test entry point. |
|
|
31
31
|
| `tools/api_surface_audit.py` | Public API surface comparison against reference Playwright. |
|
|
32
32
|
| `tools/run_parity_cases.py` | Runs shared parity cases against Rustwright or reference Playwright. |
|
|
33
|
-
| `tools/run_antibot_benchmarks.py` | Anti-bot benchmark runner covering Tier 0 local smoke signals, Tier 1 public fingerprint adapters for SannySoft, CreepJS, BrowserScan, and DeviceAndBrowserInfo, and local Tier 4 fresh/warm profile matrix checks across Rustwright
|
|
33
|
+
| `tools/run_antibot_benchmarks.py` | Anti-bot benchmark runner covering Tier 0 local smoke signals, Tier 1 public fingerprint adapters for SannySoft, CreepJS, BrowserScan, and DeviceAndBrowserInfo, and local Tier 4 fresh/warm profile matrix checks across Rustwright and Playwright. |
|
|
34
34
|
|
|
35
35
|
## Known Architecture Debt
|
|
36
36
|
|
|
@@ -1024,7 +1024,7 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
|
|
|
1024
1024
|
|
|
1025
1025
|
[[package]]
|
|
1026
1026
|
name = "rustwright-core"
|
|
1027
|
-
version = "0.1.0-alpha.
|
|
1027
|
+
version = "0.1.0-alpha.3"
|
|
1028
1028
|
dependencies = [
|
|
1029
1029
|
"base64 0.21.7",
|
|
1030
1030
|
"bytes",
|
|
@@ -1056,7 +1056,7 @@ dependencies = [
|
|
|
1056
1056
|
|
|
1057
1057
|
[[package]]
|
|
1058
1058
|
name = "rustwright-node"
|
|
1059
|
-
version = "0.1.0-alpha.
|
|
1059
|
+
version = "0.1.0-alpha.3"
|
|
1060
1060
|
dependencies = [
|
|
1061
1061
|
"napi",
|
|
1062
1062
|
"napi-build",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "rustwright-core"
|
|
3
|
-
version = "0.1.0-alpha.
|
|
3
|
+
version = "0.1.0-alpha.3"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
rust-version = "1.85"
|
|
6
6
|
description = "Rust CDP core for a Python Playwright-compatible automation API"
|
|
@@ -14,6 +14,10 @@ categories = ["web-programming"]
|
|
|
14
14
|
[workspace]
|
|
15
15
|
resolver = "2"
|
|
16
16
|
|
|
17
|
+
[features]
|
|
18
|
+
default = ["python"]
|
|
19
|
+
python = ["dep:pyo3"]
|
|
20
|
+
|
|
17
21
|
[lib]
|
|
18
22
|
name = "_rustwright"
|
|
19
23
|
crate-type = ["cdylib", "rlib"]
|
|
@@ -25,7 +29,7 @@ futures-channel = "=0.3.31"
|
|
|
25
29
|
futures-core = "=0.3.31"
|
|
26
30
|
futures-sink = "=0.3.31"
|
|
27
31
|
futures-task = "=0.3.31"
|
|
28
|
-
pyo3 = { version = "0.29", features = ["abi3-py38"] }
|
|
32
|
+
pyo3 = { version = "0.29", features = ["abi3-py38"], optional = true }
|
|
29
33
|
reqwest = { version = "=0.12.28", default-features = false, features = ["json", "rustls-tls"] }
|
|
30
34
|
serde = { version = "=1.0.188", features = ["derive"] }
|
|
31
35
|
serde_json = "=1.0.107"
|
|
@@ -5,7 +5,6 @@ FROM ${RUSTWRIGHT_DOCKER_BASE_IMAGE}
|
|
|
5
5
|
USER root
|
|
6
6
|
|
|
7
7
|
ARG PLAYWRIGHT_REFERENCE_VERSION=1.59.0
|
|
8
|
-
ARG INSTALL_BROWSER_HARNESS=1
|
|
9
8
|
ARG INSTALL_PUPPETEER=0
|
|
10
9
|
|
|
11
10
|
ENV CARGO_HOME=/usr/local/cargo \
|
|
@@ -101,12 +100,6 @@ RUN case "$(uname -m)" in \
|
|
|
101
100
|
&& test -n "$browser" \
|
|
102
101
|
&& ln -sf "$browser" "$RUSTWRIGHT_CHROMIUM"
|
|
103
102
|
|
|
104
|
-
RUN --mount=type=cache,target=/root/.cache/pip \
|
|
105
|
-
if [ "$INSTALL_BROWSER_HARNESS" = "1" ]; then \
|
|
106
|
-
python -m pip install "browser-harness @ git+https://github.com/browser-use/browser-harness.git" \
|
|
107
|
-
|| echo "browser-harness optional install failed; benchmark runner will report it as skipped"; \
|
|
108
|
-
fi
|
|
109
|
-
|
|
110
103
|
RUN --mount=type=cache,target=/root/.npm \
|
|
111
104
|
if [ "$INSTALL_PUPPETEER" = "1" ]; then \
|
|
112
105
|
apt-get update \
|