Allow IP ranges where start_address equals end_address to model
single-IP pools like DHCP or NAT reservations. Add validation tests,
filterset coverage, and display logic to render both endpoints.
Fixes#21993
Add a description field to the rack unit serializer containing the
occupying Device, allowing the Rack position dropdown to show Device
context while keeping the existing display value unchanged.
Co-authored-by: Martin Hauser <mhauser@netboxlabs.com>
Add comprehensive test coverage for signal handlers in circuits, core,
dcim, extras, ipam, users, virtualization, and wireless, including
cable path rebuilding, change logging, data source sync, scope
propagation, and notification dispatch logic.
Fixes#22098
Copy frontend-generated files into STATIC_ROOT before tests run so SVG
rendering tests can read their CSS directly.
Also add pull-requests read permission to the workflow.
Fixes#22150
Restrict the CI workflow's push trigger to the main and feature branches
while preserving the existing paths-ignore filters.
This avoids unnecessary push-triggered CI runs on topic branches without
changing pull request workflow behavior.
Fixes#19324
Ensure CoreMiddleware emits Django's got_request_exception signal before
returning handled 500 responses for API requests and custom error templates.
This allows integrations such as Sentry to report exceptions that would
otherwise be hidden when middleware returns a custom error response.
Add `nested` and `max_depth` params to GenericForeignKeyAttr to render
hierarchical objects as breadcrumbs when they expose `get_ancestors()`.
Applied to scope fields in IPAM/wireless and circuit termination points.
Fixes#21938
Add changelog message support to BulkRenameView for models that support
change logging. Introduce NetBoxModelBulkRenameForm as a changelog-aware
wrapper around the existing utilities.forms.BulkRenameForm, preserving the
existing import path while avoiding circular imports.
Set _changelog_message before saving renamed objects in both MPTT and
non-MPTT rename paths, and add a regression test to verify that the
submitted message is recorded on the resulting ObjectChange records.
Remove unused VMInterfaceBulkRenameForm and VirtualDiskBulkRenameForm,
along with their unused view references, since BulkRenameView constructs
its form dynamically.
Display a warning in the UI whenever a user goes to provision a v1
token (both via the admin token form and the user profile token form).
Update documentation to note that v1 tokens are deprecated and will be
removed in NetBox v5.0.
Configure coverage.py for multiprocessing so Django's parallel test
workers are included in the coverage data.
Move coverage source and report settings into pyproject.toml,
and combine per-process coverage data before generating the report.
Fixes#22118
Add explicit CI job names showing the Python and Node versions, with the
coverage job clearly marked in the GitHub Actions UI.
Run coverage only for the designated coverage matrix entry to avoid
redundant coverage collection and reporting across the full test matrix.
Also add the YAML document marker and clean up trailing whitespace.
Move Ruff configuration from ruff.toml into pyproject.toml and remove
obsolete Black, isort, and Pylint sections.
Consolidates all Python tooling config in a single file following
modern Python packaging standards.
Fixes#22099
Use DRF's ChoiceField for `cable_end` to preserve the existing raw
"A"/"B" API output while documenting the allowed values and nullability
in the generated schema.
Fixes#22084
* #22034 fix rack group migation from very old netbox installation
* #22034 fix rack group migation from very old netbox installation
* #22034 fix rack group migation from very old netbox installation
* fix after loading old database
* simplify
* fix index name