Repository navigation
Conversation
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.14.1 to 0.15.6. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](astral-sh/ruff@0.14.1...0.15.6) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.15.6 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Org-wide standards now live once in blacklanternsecurity/.github. This AGENTS.md states what the repo is, its toolchain and test commands, links each standard with when to read it, and keeps only what is true here and nowhere else. CLAUDE.md points at it instead of duplicating it, so agent context stops paying for restated rules. Refs blacklanternsecurity/bbot-enterprise#157
The table said Rust is pinned in rust-toolchain.toml, which does not exist here, retyped a Python range narrower than requires-python (>=3.9), and called a ruff floor pinned. Reference the manifests and state that the toolchain is not yet pinned.
…ff-0.15.6 Bump ruff from 0.14.1 to 0.15.6
CI installs unpinned latest ruff and stable Rust, both of which added new checks that fail on dev: - ruff: sort imports/__slots__, collapse nested if in IPRadixTree, use != in the __eq__ test (SIM201) - clippy for_kv_map: iterate values_mut() in BaseNode::clear
fix: get CI green (latest ruff + clippy lint fixes)
`radixtarget` is a Black Lantern original, so this is the copyright holder relicensing its own work. The notices carry `either version 3 of the License, or (at your option) any later version`, and GPLv3 section 13 already permits AGPLv3 interoperation, so making the AGPL grant explicit needs no contributor sign-off. The file is the same AGPL-3.0 text `bbot` carries. The manifest moves in the same commit. A tree that ships an AGPL-3.0 file next to a manifest naming something else is self-contradictory at the point a packager reads it: `Cargo.toml`, `pyproject.toml`. Refs #151
Bumps [maturin](https://github.com/pyo3/maturin) from 1.9.6 to 1.15.0. - [Release notes](https://github.com/pyo3/maturin/releases) - [Changelog](https://github.com/PyO3/maturin/blob/main/Changelog.md) - [Commits](PyO3/maturin@v1.9.6...v1.15.0) --- updated-dependencies: - dependency-name: maturin dependency-version: 1.12.6 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Matches bbot. Without target-branch, the github-actions ecosystem falls back to the default branch (stable).
docs: make AGENTS.md an index of the org standards
…-dev ci: target dev for github-actions dependabot updates
# Conflicts: # src/target.rs
Dependabot and fork PR runs get a read-only GITHUB_TOKEN, so posting the results comment fails with 403 and the error handler's fallback comment fails the same way, failing the job. Skip the comment for those runs instead of granting write access; results remain in the job log and the uploaded artifact.
docs: relicense from GPL-3.0 to AGPL-3.0
- Keep IPv4 and IPv6 in separate trees. The tree is keyed on address bits only, so a shared tree let 7ea4:c5d8:: match 126.164.197.216. - Cap longest_match at the query's prefix length. Searching 192.168.128.0/23 returned a stored /24 that doesn't contain it, which also made ACL mode skip a parent inserted after its child. - ACL mode: remove networks covered by a newly inserted parent, walking only the subtree under it. - defrag: find sibling pairs with an exact-match lookup instead of comparing every pair of networks (O(n) instead of O(n^2)). Adds a differential test that runs random insert/get/delete/defrag sequences against the original IpRadixTree, in normal and ACL mode.
…turin-1.12.6 Bump maturin from 1.9.6 to 1.15.0
The bucket allocator managed raw memory with ptr::copy/read/write and Vec::from_raw_parts, so a bookkeeping bug in the tree would corrupt memory instead of panicking. Back BucketVec with a Vec<T> and do every access through a bounds-checked slice of one bucket, restricting stored types to Copy + Default (only Node and IpNet are stored). With only Copy types, TreeBitmap no longer needs its unsafe Drop impl. forbid(unsafe_code) on the module keeps it that way. Benchmark cost is within noise for IPv4 and ~10% on IPv6 insert.
Drop the ip_network_table comparison. The benchmark now measures only RadixTarget, and CI runs it twice: once against the PR and once against the target branch, then posts a table of the change per benchmark. - The PR's harness is built against both sides, so measurements stay identical even when a PR changes the harness. If it can't build against the target branch (e.g. a public API change), the report shows the PR's numbers alone. - Data is generated from a fixed seed so both sides get identical inputs, and each benchmark reports the median of 5 runs. - Insert timing no longer includes freeing the finished tree. - Skip the PR comment on fork and dependabot PRs, whose token is read-only (same change as #101).
…t-perms ci(benchmark): skip PR comment on dependabot and fork PRs
pyo3 0.27 refuses to build for Python 3.15 ("the configured Python
version (3.15) is newer than PyO3's maximum supported version (3.14)").
With no 3.15 wheel on PyPI, installs on 3.15 build from source and
fail, which blocks bbot's Python 3.15 support (bbot#3474).
- pyo3 0.27 -> 0.30, no code changes needed
- cargo update for all other semver-compatible crates
- uv lock --upgrade for dev tools (pytest 9.1, ruff 0.17, pytest-cov 7.1)
- add 3.15 to the CI test matrix and classifiers
rand stays on 0.8: the 0.10 API rename would conflict with #64's tests.
ci(benchmark): compare PR against its target branch
Faster IP Tree
3.9 is end-of-life and 3.10 reaches end-of-life this month; bbot is dropping 3.10 as well (bbot#3474). requires-python is now >=3.11, and 3.9/3.10 are removed from the CI matrix, classifiers and README badge.
build(deps): bump pyo3 to 0.30 for Python 3.15, drop 3.9 and 3.10
Bump the version to 4.3.0 in Cargo.toml, pyproject.toml and lockfiles. The Windows and macOS wheel jobs installed only `3.x` and relied on maturin --find-interpreter finding other versions on the runner, so 4.2.0's macOS wheels stopped at 3.14 and skipped 3.9/3.10. Install 3.11-3.15 explicitly so every supported version gets a wheel. Linux builds already get 3.15 from the manylinux/musllinux images.
RadixTarget Benchmark Results100000 networks per table, 100000 lookups, median of 5 runs (seed 1337).
Change is in time taken: negative is faster. |
en0f
left a comment
There was a problem hiding this comment.
The version number was never bumped, so the release won’t publish. The PR is titled “release: 4.3.0”, but Cargo.toml and pyproject.toml both still say version = "4.2.0". 4.2.0 is already the latest release on both PyPI and crates.io. Once this merges to stable:
PyPI: the publish job in python-tests.yml runs maturin publish, and PyPI will reject it because 4.2.0 already exists. Every wheel job (linux, musllinux, windows, macos, sdist) and release waits on publish, so no wheels get built and no GitHub release is created.
crates.io: cargo publish in rust-tests.yml will also fail, because the crate’s 4.2.0 is already published.
The fix is to set the version to 4.3.0 in both files and update Cargo.lock so the root crate’s version matches.
chore: bump version to 4.3.0 and build 3.15 wheels
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## stable #105 +/- ##
=====================================
Coverage 100% 100%
=====================================
Files 3 3
Lines 604 605 +1
=====================================
+ Hits 604 605 +1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Release 4.3.0. Merging this into
stablepublishes to PyPI and crates.io.The version bump and the 3.15 wheel-matrix fix are in #104 (into
dev), and they land here once that merges. Until then this PR still says 4.2.0, so merge #104 first.What's in 4.3.0 (dev since 4.2.0)
Breaking-ish
Features and performance
unsafecode.CI
devfor GitHub Actions updates (ci: target dev for github-actions dependabot updates #99). Lint fixes for the latest ruff and clippy (fix: get CI green (latest ruff + clippy lint fixes) #98).