Skip to content

Releases: trigger/trigger

v2.3.0

24 Feb 01:43

Choose a tag to compare

v2.3.0 (2026-02-24)

This release is published under the BSD-3-Clause License.

Bug Fixes

  • Guard against missing negated attr in _compare_to for non-TIP objects (69aaf96)

  • Handle negated /32|/128 in junos_str and skip IPv4 expansion for IPv6 CIDR (7bc8659)

  • Replace remaining IPy-specific APIs with netaddr equivalents (b5d77f7)

  • Return TIP objects from IP functions and zero host bits in _make_cidrs (e850e34)

Features

  • Migrate from IPy to netaddr for IP address handling (5b801c1)

  • benchmarks: Add IPy vs netaddr benchmark for ACL workloads (84582fc)


Detailed Changes: v2.2.6...v2.3.0

v2.2.6

17 Feb 23:04

Choose a tag to compare

v2.2.6 (2026-02-17)

This release is published under the BSD-3-Clause License.

Bug Fixes

  • Auto-respond to device confirmation prompts (closes #91) (6181298)

  • Use device delimiter in twister2.py confirmation response (1d98cf2)

  • Use device-specific delimiter for confirmation responses (1e5c48d)

Chores

  • deps: Bump cryptography from 46.0.4 to 46.0.5 (c46af23)

Detailed Changes: v2.2.5...v2.2.6

v2.2.5

10 Feb 18:48

Choose a tag to compare

v2.2.5 (2026-02-10)

This release is published under the BSD-3-Clause License.

Bug Fixes

  • Add missing --staged option to acl CLI tool (#145, 8a20702)

Detailed Changes: v2.2.4...v2.2.5

v2.2.4

10 Feb 06:37

Choose a tag to compare

v2.2.4 (2026-02-10)

This release is published under the BSD-3-Clause License.

Bug Fixes

  • Resolve TypeError in convert_tacacsrc() with invalid kwargs (46a7278)

Continuous Integration

  • Add python-version to build/publish jobs (1f016c3)

  • Fix release-preview workflow changelog and comment spam (48cc61a)

  • Fix uv caching in GitHub Actions workflows (e705412)

Refactoring

  • Enable ruff D100, S605, F821, PLW0603, PLR0915 lint rules (1b41af6)

  • Enable ruff D101, RUF012, F403, S101, PLR0912 lint rules (4bcf044)

  • Enable ruff D102, D105, D107, D205, D401, F405 lint rules (fafdf89)

  • Enable ruff D104, B018, PT028, D402 lint rules (e2480af)

  • Enable ruff D200 and F523 lint rules (131c550)

  • Enable ruff E402, SLF001, PLR0913, PLR2004 lint rules (a607951)

  • Enable ruff F402, E721, F811, S603, S608, S105 lint rules (82effe0)

  • Enable ruff PLR0911, PLW1641, S110, S112, S314 lint rules (7589db8)

  • Enable ruff S606, E722, E741, B016, D404 lint rules (f701280)

  • Enable ruff UP031, F401, D103 lint rules (74a4987)

  • Fix ruff format for templates.py (1d64186)

  • Remove legacy module-level dunder attributes (a511212)

  • Remove unnecessary "coding: utf-8" declarations (c83c0c9)

Testing

  • Add coverage for convert_tacacsrc() credential migration (159fe16)

Detailed Changes: v2.2.3...v2.2.4

v2.2.3

07 Feb 07:09

Choose a tag to compare

v2.2.3 (2026-02-07)

This release is published under the BSD-3-Clause License.

Bug Fixes

  • Anchor prompt patterns to line boundaries to prevent false matches (#317, aef5684)

Prompt detection regex falsely matched '>' and '#' characters in command output (e.g. Juniper's "Flags: ") as device prompts, causing output truncation. Add compile_prompt_pattern() helper that prepends a line-start anchor and prompt_match_start() to adjust match positions.

Co-Authored-By: Claude Opus 4.6 [email protected]

Documentation

  • Add explicit docs dependencies and fix stale Python version note (33c86da)

Add a docs optional dependency group (sphinx, sphinx_rtd_theme) to pyproject.toml so RTD builds have the packages they need. Clean up .readthedocs.yml by removing the redundant pre_install job and pointing extra_requirements at the new docs group instead of dev. Update the outdated Python 2.6 note in docs/index.rst to reflect v2.0+ requirements (Python 3.10-3.11).

Co-Authored-By: Claude Opus 4.6 [email protected]

  • Add rebase merge guidance to CLAUDE.md (64f5893)

Co-Authored-By: Claude Opus 4.6 [email protected]

  • Add v2.0.1–v2.2.2 entries to docs changelog and fix v2.0.0 date (74ccc86)

Co-Authored-By: Claude Opus 4.6 [email protected]

  • Fold versionadded directives into Key Features bullet list (749ef32)

Co-Authored-By: Claude Opus 4.6 [email protected]

  • Update README and docs to reflect main branch and remove stale links (6ddb930)

Co-Authored-By: Claude Opus 4.6 [email protected]

  • Update tests badge to match CI workflow name (1bd8353)

The badge referenced a "Tests" workflow that doesn't exist. Updated to match the actual "CI" workflow in .github/workflows/ci.yml.

Co-Authored-By: Claude Opus 4.6 [email protected]


Detailed Changes: v2.2.2...v2.2.3

v2.2.2

06 Feb 02:27

Choose a tag to compare

v2.2.2 (2026-02-06)

This release is published under the BSD-3-Clause License.

Bug Fixes

  • Add uv.lock to repo and update workflows to use explicit cache-dependency-glob (3d8e34e)

  • Remove uv.lock from .gitignore and commit it to the repository

  • Add cache-dependency-glob: "uv.lock" to all 6 workflow jobs for explicit cache key

  • Update test job to use "uv sync --locked --all-extras --dev" for reproducible builds with lock file validation

  • Fixes error: "No file in /home/runner/work/trigger/trigger matched to [**/uv.lock]"

The uv.lock file was gitignored, causing GitHub Actions to fail when trying to cache dependencies. Now the lock file is tracked and used explicitly for cache invalidation.

Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • Remove cache-dependency-glob override and use uv sync for reproducible builds (3c448f3)

  • Remove cache-dependency-glob parameter from all 6 workflow jobs to use setup-uv action's default glob pattern

  • Default pattern includes **/pyproject.toml, **/uv.lock, and */requirements.txt for proper cache invalidation

  • Switch test job from 'uv pip install --system -e ".[dev]"' to 'uv sync --all-extras' for reproducible builds using uv.lock

  • Fixes cache errors: "Path(s) specified in the action for caching do(es) not exist"

  • Ensures CI builds match local development when using uv sync

Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • Remove invalid --dev flag from uv sync command (ad8a498)

The --dev flag does not exist in uv sync. Dev dependencies are included by default. Only --no-dev, --only-dev, and --group flags exist for dependency group control.

This was causing the lockfile validation error.

Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • Update uv.lock and remove redundant cache-dependency-glob (4503e4e)

  • Update uv.lock to sync with pyproject.toml (fixes --locked validation error)

  • Remove cache-dependency-glob from all workflows (default already includes **/uv.lock)

  • Keep uv sync --locked --all-extras --dev for reproducible builds with validation

The default cache-dependency-glob pattern already includes:
**/uv.lock, **/pyproject.toml, **/requirements.txt, and more

Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • Use --frozen instead of --locked for more lenient lock file validation (b82d968)

  • Use uv run pytest to run tests in uv-managed environment (3386869)

Testing

  • Add comment to trigger CI and test cache hits (cc7f0b1)

Detailed Changes: v2.2.1...v2.2.2

v2.2.1

06 Feb 01:55

Choose a tag to compare

v2.2.1 (2026-02-06)

This release is published under the BSD-3-Clause License.

Bug Fixes

  • Specify pyproject.toml for uv cache dependency glob (1e05648)

The enable-cache option defaults to looking for uv.lock files, but this project uses pyproject.toml without a lockfile. Add the cache-dependency-glob parameter to specify pyproject.toml for cache key generation.

Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • Use uv's built-in caching instead of pip cache (9a05f11)

Replace cache: 'pip' on setup-python steps with enable-cache: true on setup-uv steps, per uv's official documentation. The pip cache parameter doesn't work with uv's cache structure.

Co-Authored-By: Claude Sonnet 4.5 [email protected]

Continuous Integration

  • Enable pip caching in GitHub Actions workflows (fc22313)

Add cache: 'pip' to all actions/setup-python@v5 steps across CI, release, and release-preview workflows to speed up dependency installation via GitHub's built-in package caching.

Co-Authored-By: Claude Sonnet 4.5 [email protected]


Detailed Changes: v2.2.0...v2.2.1

v2.2.0

06 Feb 01:34

Choose a tag to compare

v2.2.0 (2026-02-06)

This release is published under the BSD-3-Clause License.

Chores

  • Apply pre-commit auto-fixes and ignore false positives (c6a30bf)

Apply remaining automatic fixes from ruff pre-commit hooks and configure ruff to ignore false positive warnings.

Changes:

  • Update .pre-commit-config.yaml to use ruff v0.14.14 (matching system)
  • Add PLW1641 and PT028 to pyproject.toml ignore list (false positives)
  • Apply ruff import sorting fixes across codebase
  • Fix trailing whitespace in documentation files

False positive justifications:

  • PLW1641: NetDevice implements eq but warning fires incorrectly
  • PT028: test_tcp_port and test_ssh are utility functions, not pytest tests

All checks now pass cleanly in pre-commit hooks.

Co-Authored-By: Claude Sonnet 4.5 [email protected]

Features

  • Add prek pre-commit hooks with ruff checks (98f04ad)

Add prek (fast Rust-based pre-commit framework) to enforce code quality checks locally before commits, matching CI configuration exactly.

Changes: - Add .pre-commit-config.yaml with ruff and standard pre-commit hooks - Update CLAUDE.md: replace outdated flake8/black/isort docs with ruff - Add pre-commit hooks section to CLAUDE.md with prek setup instructions - Update README.md with development setup section - Add pre-commit hooks documentation to docs/development.rst

Benefits: - 7-10x faster than traditional pre-commit (Rust-based) - Catches issues locally before CI runs - Matches CI ruff checks exactly - Optional for developers (CI still enforces)

Hook checks: - Ruff linting with auto-fix - Ruff formatting (check-only) - YAML syntax validation - Trailing whitespace and end-of-file fixes - Protection against commits to main branch - Merge conflict detection

Co-Authored-By: Claude Sonnet 4.5 [email protected]


Detailed Changes: v2.1.1...v2.2.0

v2.1.1

06 Feb 01:11

Choose a tag to compare

v2.1.1 (2026-02-06)

This release is published under the BSD-3-Clause License.

Bug Fixes

  • security: Replace deprecated tempfile.mktemp with mkstemp (884ecdf)

Replace unsafe tempfile.mktemp() with tempfile.mkstemp() in the remaining bin/ and tools/ scripts. Uses os.fdopen(fd) to properly manage the file descriptor, consistent with the pattern established in trigger/acl/tools.py and trigger/contrib/docommand/core.py.

The mktemp() function is deprecated due to a race condition vulnerability (TOCTOU) where the temporary filename could be claimed by another process between creation of the name and opening the file.

Files fixed:

  • bin/check_syntax
  • bin/load_acl
  • tools/prepend_acl_dot

Based-on: #335

Co-Authored-By: Ataf Fazledin Ahamed [email protected]

Co-Authored-By: Claude Opus 4.6 [email protected]


Detailed Changes: v2.1.0...v2.1.1

v2.1.0

06 Feb 01:02

Choose a tag to compare

v2.1.0 (2026-02-06)

This release is published under the BSD-3-Clause License.

Documentation

  • Add git worktrees guidance to CLAUDE.md (#343, 6f1489e)

Instructs Claude Code to always use .worktrees/ for feature branches to keep the main working tree clean.

Co-authored-by: Claude Opus 4.6 [email protected]

Features

  • notifications: Add SMTP_SSL support for secure email (#344, 5ce484d)
  • feat(notifications): add SMTP_SSL support for secure email

Adds ssl, mailuser, and mailpass parameters to send_email() for secure SMTP communication via smtplib.SMTP_SSL.

Based on PR #336 by Ataf Fazledin Ahamed (OpenRefactory/OpenSSF Alpha-Omega).

Co-Authored-By: Ataf Fazledin Ahamed [email protected]

  • style: fix ruff formatting for send_email signature

Co-Authored-By: Claude Opus 4.6 [email protected]


Co-authored-by: Ataf Fazledin Ahamed [email protected]

Co-authored-by: Claude Opus 4.6 [email protected]


Detailed Changes: v2.0.3...v2.1.0