Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
dd91685
Bound compare_body input to prevent quadratic DeepDiff stall
singlerider Aug 17, 2026
6902306
Register http_compare_max_differing_lines in WebConfig schema
singlerider Aug 17, 2026
101bae5
Broaden compare_body tests: dict path, threshold boundary, config knob
singlerider Aug 18, 2026
42164af
test(diff): pin compare_body regressions the threshold guard introduced
singlerider Aug 24, 2026
45cdb99
fix(diff): count leaves outside ddiff_filters, and bound dict bodies
singlerider Aug 24, 2026
b50f65f
fix(diff): coerce a null differing-lines threshold to the default
singlerider Aug 24, 2026
4b4e8f7
perf(ci): cut test suite wall time via teardown, poll, and dep-instal…
singlerider Aug 24, 2026
1fff8de
style(test): move FastShutdownHTTPServer below the import block
singlerider Aug 24, 2026
919993c
perf(ci): run distro tests in parallel
singlerider Aug 24, 2026
96a63af
perf(ci): scope distro tests to install and runtime surface
singlerider Aug 24, 2026
3f31ace
perf(test): split test_cli_args into four independent tests
singlerider Aug 25, 2026
b2ae7b6
perf(test): shard test_module_loading and perdomainonly across workers
singlerider Aug 25, 2026
eb3c58d
perf(ci): oversubscribe cores when sizing xdist workers
singlerider Aug 25, 2026
df3cdb8
test(ci): update worker_count guards for core oversubscription
singlerider Aug 25, 2026
21c78e4
Revert "test(ci): update worker_count guards for core oversubscription"
singlerider Aug 25, 2026
a23fbac
Revert "perf(ci): oversubscribe cores when sizing xdist workers"
singlerider Aug 25, 2026
65a3ccc
perf(ci): shard the test matrix across runners
singlerider Aug 25, 2026
b7fc1a7
fix(test): install neo4j before the test that imports it
singlerider Aug 25, 2026
4326dcd
fix(ci): restore required test contexts after shard fanout
singlerider Aug 25, 2026
707e3de
Revert "fix(ci): restore required test contexts after shard fanout"
singlerider Aug 25, 2026
a26cea4
Revert "perf(ci): shard the test matrix across runners"
singlerider Aug 25, 2026
216425a
Revert "perf(test): shard test_module_loading and perdomainonly acros…
singlerider Aug 25, 2026
af60265
Revert "perf(test): split test_cli_args into four independent tests"
singlerider Aug 25, 2026
213a5bd
perf(test): install module deps once into a shared dir
singlerider Aug 25, 2026
147be9e
Merge remote-tracking branch 'origin/dev' into perf/ci-suite-walltime
singlerider Aug 25, 2026
e8e4dce
fix(test): point core deps dirs at the shared dir too
singlerider Aug 25, 2026
69a7aa8
test: assert BBOT_TOOLS against the resolved tools dir
singlerider Aug 25, 2026
768e670
test(nuclei): point template paths at the shared tools dir
singlerider Aug 25, 2026
e78d9bf
fix(test): check every loaded module in test_module_loading
singlerider Aug 25, 2026
e1fa209
fix(test): exercise the dead per_domain_only branch in perdomainonly
singlerider Aug 25, 2026
b9bdb4e
perf(deps): skip the install lock when every dep is already satisfied
singlerider Aug 25, 2026
914ff7c
perf(deps): key the dep build scratch dir off deps_home, not home
singlerider Aug 25, 2026
aa7da78
perf(medusa): copy the build tree with remote_src, not through the co…
singlerider Aug 25, 2026
f34df25
perf(nuclei): parse budget templates with the libyaml loader
singlerider Aug 25, 2026
79c361a
perf(nuclei): serialize concurrent template updates on a lock
singlerider Aug 25, 2026
89245a1
fix(test): make docker container startup fail fast and self-heal
singlerider Aug 25, 2026
19dbdf7
perf(deps): skip the community.general install when ansible-core suff…
singlerider Aug 25, 2026
e393514
perf(test): stop forcing a full dep reinstall in the gowitness tests
singlerider Aug 25, 2026
0914514
perf(deps): cache ansible facts across playbook runs
singlerider Aug 25, 2026
04589f4
fix(test): wait for the container service, not the published port
singlerider Aug 25, 2026
c1768d8
perf(diff): skip DeepDiff pair-matching for flat string bodies
singlerider Aug 25, 2026
f5a42a9
perf(ci): cut distro matrix down to the install surface
singlerider Aug 25, 2026
d35afff
perf(lightfuzz): stop delay probing once blind sqli is confirmed
singlerider Aug 25, 2026
3aaf24d
perf(lightfuzz): stop padding oracle probing once the verdict is fixed
singlerider Aug 25, 2026
9bd7177
perf(test): build the e2e venv once instead of once per worker
singlerider Aug 25, 2026
3aa43a7
fix(ci): run benchmarks once and fail loudly
singlerider Aug 25, 2026
56fb725
perf(wayback): consume archive cache entries as they are fetched
singlerider Aug 25, 2026
6cc2f08
fix(scanner): hard-fail modules whose setup() raises
singlerider Aug 25, 2026
a5005c4
perf(deps): let retry_failed use the lock-free precheck
singlerider Aug 25, 2026
1c411ac
perf(webbrute): memoize the fuzz baseline per shape
singlerider Aug 25, 2026
24eb5e2
perf(trufflehog): stop the binary re-execing itself on every invocation
singlerider Aug 25, 2026
28216d8
perf(test): stop test_async_helpers idling for 25 seconds
singlerider Aug 27, 2026
2f40328
fix(test): stop websocket test wedging the py3.13 job for 6 hours
singlerider Aug 31, 2026
52e41fa
fix(test): bound the orphan-task cancel in module teardown
singlerider Aug 31, 2026
3c1125d
revert(ci): restore benchmark.yml to unblock the push
singlerider Aug 31, 2026
38a82bf
perf(test): drop zookeeper from the kafka test, use a KRaft broker
singlerider Aug 31, 2026
c2be14d
fix(test): stop kafka readiness probe importing an uninstalled dep
singlerider Aug 31, 2026
a49a86d
fix(ci): let pytest-timeout cover fixture setup and teardown
singlerider Aug 31, 2026
1e3d271
perf(scanner): stop compiling throwaway regexes for the YARA dns rules
singlerider Aug 31, 2026
07cd939
revert(ci): restore timeout_func_only to unblock the push
singlerider Aug 31, 2026
11a2551
perf(webbrute_shortnames): index the prediction models by prefix
singlerider Aug 31, 2026
0d93018
perf(nuclei): exclude unmatchable tcp templates from the technology test
singlerider Aug 31, 2026
c426540
fix(nuclei): stop a failed template fetch from cascading into 66 down…
singlerider Aug 31, 2026
c1aa463
fix(excavate): stop module introspection from firing attribute descri…
singlerider Aug 31, 2026
8f64c70
perf(deps): stop waiters blocking on a holder's unrelated installs
singlerider Sep 1, 2026
96131a3
perf(deps): skip per module pip calls already covered by the batch pass
singlerider Sep 1, 2026
b143fb1
perf(deps): publish pip-only modules before the heavy builds
singlerider Sep 1, 2026
15ddd0c
perf(interactsh): skip the settle sleep when no canary was ever probed
singlerider Sep 1, 2026
7f5426d
perf(nuclei): cache budget-mode template analysis instead of reparsin…
singlerider Sep 1, 2026
ebb820d
perf(test): drop nuclei manual-mode ratelimit floor and unshare its c…
singlerider Sep 1, 2026
068cea4
perf(test): build the e2e venv with uv so it reuses the warm wheel cache
singlerider Sep 1, 2026
c26fa86
perf(helpers): stop re-splatting kwargs at every node in search_forma…
singlerider Sep 1, 2026
edc01ac
perf(deps): batch already-satisfied pip specs instead of dropping them
singlerider Sep 2, 2026
3428b7e
perf(test): stop module-loading tests from queueing on the deps insta…
singlerider Sep 2, 2026
3dbcab1
Revert "perf(test): stop module-loading tests from queueing on the de…
singlerider Sep 2, 2026
76398d6
perf(interactsh): make the final-poll settle wait a property of the t…
singlerider Sep 2, 2026
eea9398
perf(test): wait for the interactsh conditions instead of a fixed 10s…
singlerider Sep 2, 2026
e6bc5ea
perf(test): serve a static 404 from the test httpserver miss path
singlerider Sep 2, 2026
241397d
fix(test): keep the httpserver miss body empty, not a constant string
singlerider Sep 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/distro_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,10 @@ jobs:
uv python install 3.12
uv python pin 3.12
uv sync --group dev
uv run pytest --reruns 2 --exitfirst -o timeout_func_only=true --timeout 1200 --disable-warnings --log-cli-level=INFO .
uv run pytest -n $(uv run python bbot/test/worker_count.py) --dist loadgroup --reruns 2 --exitfirst -o timeout_func_only=true --timeout 1200 --disable-warnings --log-cli-level=INFO \
bbot/test/test_step_1/test_e2e.py \
bbot/test/test_step_1/test_depsinstaller.py \
bbot/test/test_step_1/test_command.py
- name: Upload Debug Logs
if: always()
uses: actions/upload-artifact@v7
Expand Down
1 change: 1 addition & 0 deletions bbot/core/config/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,7 @@ class WebConfig(BaseModel):
max_sleep_interval_429: Optional[int] = Field(default=None, alias="429_max_sleep_interval")
debug: Optional[bool] = None
http_max_redirects: Optional[int] = None
http_compare_max_differing_lines: Optional[int] = None
ssl_verify_target: Optional[bool] = None
ssl_verify_infrastructure: Optional[bool] = None

Expand Down
22 changes: 18 additions & 4 deletions bbot/core/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,21 +64,35 @@ def _prep_multiprocessing(self):
def home(self):
return Path(self.config["home"]).expanduser().resolve()

@property
def deps_home(self):
"""
Install state, downloaded tools and libs are keyed on content, not on the scan,
so concurrent scans can share them. BBOT_SHARED_DEPS_DIR points them at one
location while everything scan-specific stays under home.
"""
shared = os.environ.get("BBOT_SHARED_DEPS_DIR", "").strip()
if shared:
return Path(shared).expanduser().resolve()
return self.home

@property
def cache_dir(self):
return self.home / "cache"
return self.deps_home / "cache"

@property
def tools_dir(self):
return self.home / "tools"
return self.deps_home / "tools"

@property
def temp_dir(self):
return self.home / "temp"
# BBOT_TEMP is the scratch dir for dependency builds and is baked into the
# module hash, so it belongs with the other install-once dirs.
return self.deps_home / "temp"

@property
def lib_dir(self):
return self.home / "lib"
return self.deps_home / "lib"

@property
def scans_dir(self):
Expand Down
Loading
Loading