Skip to main content

pytest-rulebearing

Each Rulebearing architecture rule as a test in the pytest run: one item per rule, failing with the rule's fix and its first violations. Source, documentation and releases: https://github.com/benbahrenburg/rulebearing

pip install pytest-rulebearing        # installs the rulebearing wheel for this platform too
pytest --rulebearing                  # or set rulebearing = true, below
[tool.pytest.ini_options]
rulebearing = true
rulebearing_config = "rulebearing.yaml"   # optional; the binary finds one by default
rulebearing_args = ["src"]                # optional; what to cruise

What it does

When --rulebearing is passed or rulebearing = true is set, the plugin runs rulebearing cruise --output-type json once, during collection, and adds one item per rule, named rulebearing::<rule> and marked rulebearing (so -m rulebearing and -k select them). It never evaluates a rule: the binary decides, the plugin reports (ADR-0010 rule 4).

The failure message is exactly the message the junit reporter writes for that rule (crates/rb-report/src/junit.rs, Wave 2 plan § 1.5):

Rule outcome Item Message
error-severity violations fails the fix (or N violation(s) of <rule>), then the first five violations as id from -> to (line L, column C), then ... and N more
vacuous (ADR-0007) fails rule `<name>` is vacuous: its <side> side matched nothing, so it checks nothing (ADR-0007)
expired rule or known violation, a ratchet over its ceiling or without a budget fails the junit error or failure text
warn, info or known findings only passes the findings in a rulebearing report section
no violation passes

A run that writes no result (the binary is missing, or the configuration is invalid) is one failing item, rulebearing::cruise, whose message is the command, its exit code and its stderr.

Option Ini key Meaning
--rulebearing rulebearing turn the plugin on
--rulebearing-config FILE rulebearing_config --config
--rulebearing-graph FILE rulebearing_graph --graph: read a graph document instead of extracting
--rulebearing-binary FILE rulebearing_binary the binary; default RULEBEARING_BINARY, then the one the rulebearing wheel carries
--rulebearing-arg ARG (repeatable) rulebearing_args further arguments, such as directories to cruise

Paths on the command line are relative to the invocation directory; paths in the ini file are relative to the ini file, which is also where the binary runs.

Developing

The plugin is linted and type-checked by the root configuration through cargo xtask lint (ADR-0023) and holds the 70% line floor of ADR-0018. The tests run against the shared fixture adapters/fixture with the binary built from the checkout; tests/test_junit_equality.py is the proof that every message equals rulebearing cruise -T junit's.

cargo build --release -p rb-cli
pip install pytest pytest-cov hatchling packaging
pytest adapters/python --cov=adapters/python          # from the repository root

Plan: Wave 2, Step 14. Release: docs/release.md.

Metadata

Release files for pytest-rulebearing 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for pytest-rulebearing 0.1.3
File Interpreter ABI Platform
pytest_rulebearing-0.1.3-py3-none-any.whl Python 3 none any Details

Release files / pytest_rulebearing-0.1.3-py3-none-any.whl

Download URL pytest_rulebearing-0.1.3-py3-none-any.whl
Size 15.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6434426ed1e4066440e2941b6cb989c61614080626d56ddcce9d8f7016ce03a4
BLAKE2b-256 checksum
How to use checksums
8518375c28d7c8ec1fa28f14f3ebd33f56c0ebfccf99baeaa27170755552a18c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.17

Release history Release notifications | RSS feed

This release

0.1.3 This release

1 release file

0.1.2

1 release file

0.1.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page