Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
11 changes: 11 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,17 @@ jobs:
- name: Test
run: cargo test -p ax25-node-core

# The `netrom-compress` feature (LinBPQ L4Compress interop: the zlib/DEFLATE
# codec + the NET/ROM L4 negotiation/compress/inflate path) is OFF by default,
# so the default Test step above never exercises it. Run its suite explicitly
# here so this gated path can't silently rot (a prior enum break slipped
# through exactly this way). Clippy the feature too, warnings-as-errors.
- name: Clippy — netrom-compress feature (warnings are errors)
run: cargo clippy -p ax25-node-core --all-targets --features netrom-compress -- -D warnings

- name: Test — netrom-compress feature
run: cargo test -p ax25-node-core --features netrom-compress

- name: no_std build (firmware crate's library shape — default features off, alloc on)
run: cargo build -p ax25-node-core --no-default-features --features alloc

Expand Down
17 changes: 17 additions & 0 deletions crates/ax25-node-core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,16 @@ std = ["alloc", "ax25sdl/std"]
# fixed-capacity buffers — see the module docs). Kept as a separate feature so the
# heap dependency is explicit.
alloc = []
# `netrom-compress` gates the NET/ROM L4 payload (de)compression codec
# (`netrom::transport::deflate`) — a compact, self-contained zlib/DEFLATE
# (RFC 1950 + RFC 1951) implementation for BPQ `L4Compress` interop. It is OFF by
# default so the on-target firmware carries ZERO compression code (a flash win)
# unless a deployment actually peers with a compressing BPQ node. It pulls
# `alloc` because the codec's growable output buffers use `alloc::vec::Vec`
# (following the crate's existing streaming-buffer pattern); no external crate is
# added to the shipped graph — the codec is hand-rolled, and its miniz_oxide
# TEST ORACLE lives in `[dev-dependencies]` only (never shipped).
netrom-compress = ["alloc"]

[dependencies]
# The generated AX.25 v2.2 SDL state-machine tables + typed closed sets, consumed
Expand All @@ -61,3 +71,10 @@ ax25sdl = { path = "../../../ax25sdl/spec/rust", default-features = false }
# the test still runs fully offline.
serde = { version = "1", features = ["derive"] }
serde_json = "1"
# HOST-TEST-ONLY oracle for the `netrom-compress` codec: the pure-Rust reference
# zlib/DEFLATE implementation (flate2's backend). Used ONLY by the codec's inline
# `#[cfg(test)]` oracle tests to prove our encoder emits valid zlib that a real
# inflater accepts, and that our inflater reads real zlib (incl. dynamic Huffman).
# `default-features = false, features = ["with-alloc"]` keeps it no_std+alloc. As a
# dev-dependency it never reaches the shipped/firmware graph (like serde above).
miniz_oxide = { version = "0.8", default-features = false, features = ["with-alloc"] }
Loading
Loading