Changelog

The changelog format is based on Keep a Changelog.

This project uses Semantic Versioning - MAJOR.MINOR.PATCH

[UNRELEASED DRAFT] (2026-10-12)

Removed

  • Dropped support for Python 3.10 (EOL) and therefore Salt 3004.x/3005.x

  • Removed the obsolete setuptools pins for Salt source builds. Salt 3006.24/3007.15/3008.0+ ship a PEP 517 build backend. Pinning older point releases now requires a manual setuptools<75.6.0 build constraint to avoid a dependency-less Salt install.

  • Removed the vestigial sphinxcontrib-spelling Sphinx extension. Its spellcheck builder was never invoked, but loading the extension forced all docs builds to require the enchant system library.

Changed

  • All nox sessions except the version-matrixed tests now run on the selected venv_python instead of a generic Python 3. A new test session runs the test suite on that version only; make tests now invokes it.

  • Artifact and CodeCov upload names now consistently reference the CI job name and include the OS release where applicable.

  • Following PyPI’s recommendation of minimal Trusted Publisher workflows, deploy-package-action.yml was reduced to artifact verification and publishing: its publish jobs republish the exact verified bytes with minimal permissions. The GitHub release and docs deployment moved to a new finalize-release-action.yml workflow outside the publishing trust boundary.

  • Non-Ubuntu Linux distributions selected in linux_test_distros are tested inside VMs with a parametrized Salt/Python version matrix, whose Python versions are provisioned by uv – except Alpine, which runs against the OS-packaged Salt release like the BSDs since important binary dependencies lack musl wheels.

  • Removed installation of unnecessary packages during pre-commit CI job

  • Reworked the CI test jobs to respect the new linux_test_distros and *_releases answers. The Linux job keeps its name unless more than one Ubuntu release is selected, corresponds to the Ubuntu distribution selection and runs on the selected Ubuntu releases.

  • Reworked the automated release tagging: the mathieudutour/github-tag-action dependency was replaced with plain git commands, which now tag the actual merge commit instead of the ephemeral PR merge ref. The tag is attributed to the bot account that pushes it.

  • Sped up the Windows test job by disabling Windows Defender real-time monitoring on the ephemeral runner, which scans every written file synchronously and significantly slows down test environment provisioning.

  • Switched CI and the dev automation to prek, a faster drop-in replacement for pre-commit. On platforms without prebuilt prek binaries, the dev automation still falls back to pre-commit.

  • Switched the actionlint pre-commit hook from actionlint-py to a maintained fork providing a hook with integrated shellcheck support. Both tools are now compiled locally, requiring only a Go toolchain instead of prebuilt platform binaries.

  • Synced the generated loader module stubs with the interfaces Salt expects: they now scaffold the specifically named functions required by the respective module type, where applicable.

  • The GitHub App for release automation (AUTORELEASE_CLID/AUTORELEASE_PRIV secrets) now also pushes the release tag when the autorelease PR is merged, making the regular tag push workflow (tag.yml) the single entry point for all releases.

  • The VM test tooling (uv, nox) is installed from PyPI at the pinned versions tracked in the template, making test environments predictable and refreshing cached VM images on version bumps.

  • The automated release PR preparation now only installs a pinned towncrier instead of the whole project. To support this, the towncrier name setting is specified explicitly, avoiding a package import.

Fixed

  • Fixed bashisms in the generated Makefile, which broke its targets on platforms where /bin/sh is not bash, e.g. FreeBSD.

  • Fixed generating projects from non-git template copies leaking local cruft (__pycache__, bytecode, editor backups) into the project. Copier skips its default exclusions when _subdirectory is set, so the relevant patterns are now listed explicitly.

  • Fixed pylint complaining about missing members when modules in a Salt extension such as saltext.github (namespace package) import the github package (the root one)

  • Fixed release automation on repositories whose default workflow token permissions are read-only: the jobs creating/updating the release PR without a configured autorelease app and closing it on manual tags now explicitly request contents/pull-requests write permissions.

  • Fixed several issues in the bundled developer tools. Notably, virtual environment creation was broken on Windows when uv was unavailable.

  • Fixed the autodocs pre-commit hook script generating documentation for untracked Python modules in src. Only files tracked by git are considered now.

  • Fixed the autodocs pre-commit hook script rendering a separate document with the same header for each module when multiple modules of the same kind shared a virtualname. They are now collected into a single, shared document.

  • Fixed the generated .gitignore not ignoring .envrc, which the docs recommend creating and which can contain machine-specific or sensitive values.

  • Fixed the generated matcher stub’s __virtualname__, which must carry a _match suffix to be selectable as a target type, and added the required __proxyenabled__ declaration to the proxy stub.

  • Fixed the generated noxfile’s rootless Podman autodetection for container tests, which was never included.

  • Fixed the isort pre-commit hook’s --py argument, which was passed in a form isort silently ignored. The project’s minimum Python version syntax is now actually applied, which can cause new isort-induced changes when updating existing projects.

  • Fixed the pre-commit workflow running all hooks twice on pull requests that modify the pre-commit configuration.

  • Fixed workflow cancellation being resisted by if: always() jobs and steps, which GitHub runs even in cancelled workflow runs. Status bookkeeping, log uploads and cache pruning now use !cancelled(), allowing cancellation to take effect immediately.

  • Fixed SKIP_REQUIREMENTS_INSTALL never engaging in the generated CI workflows: The Test/Build Docs steps silently reinstalled all requirements the preceding --install-only step had just installed.

  • Restricted the pinned uv in the nox pre-commit hooks’ additional_dependencies to platforms with uv wheels, whose absence (e.g. on FreeBSD) previously broke hook installation since building uv from source requires a Rust toolchain. nox now falls back to the virtualenv backend there, unless uv is found on PATH.

  • Stopped rewriting tornado imports to Salt core-internal ones via the salt-rewrite pre-commit hooks. This rule is specific to old Salt core versions.

  • When SKIP is set, the initialization automation now installs the pre-commit hook without --install-hooks, which prepares environments for all hooks regardless of it. Skipped hooks thus no longer break automated setup on platforms where they cannot be built.

Added

  • Added CI test jobs for FreeBSD and OpenBSD when selected in os_support. Lacking native GitHub-hosted runners, the tests run inside VMs on Linux runners, courtesy of the vmactions project, against the OS-packaged Salt release (no onedir builds exist either), with the project’s minimum Salt requirement as a lower bound.

  • Added OS Trove classifiers to the generated package metadata, derived from the os_support answer, which now also offers FreeBSD and OpenBSD choices.

  • Added concurrency groups to the workflow entry points: an obsolete pr.yml run is now aborted when the PR receives new commits, while runs for consecutive pushes to main and duplicate release runs for the same ref are queued instead of running in parallel.

  • Added a --skip-install flag to tools/initialize.py, which only installs the project when the virtual environment has just been created. The direnv example configuration uses it to speed up shell entry.

  • Added a resource choice to the loaders question, scaffolding a module for Salt’s new resources subsystem (introduced in Salt 3008.0). The generated stub stays dormant on older Salt releases, so it does not restrict the extension’s supported Salt versions.

  • Added a new typing question, which generates support for static type checking via ty. When enabled, the project receives a pre-commit hook typechecking the complete project and corresponding [tool.ty.*] configuration in pyproject.toml.

  • Added a Clear Actions Caches workflow, allowing to purge all caches or a single key via manual dispatch.

  • Added dependency caching to the CI workflows: pre-commit environments and uv’s wheel cache are now persisted between runs on GitHub-hosted runners. Release builds never use caches, enforced via cache-mode: none and a tag ref check in the cache steps.

  • Added questions for selecting the Linux distributions (linux_test_distros) and OS releases (ubuntu_releases, debian_releases, alpine_releases, almalinux_releases, rockylinux_releases, freebsd_releases, openbsd_releases) the test suite runs on.

  • Added support for inheriting system-wide packages in the development and nox session virtual environments by setting VENV_SYSTEM_SITE_PACKAGES=1, easing development of OS-specific extensions whose dependencies are only available as system packages. This mode falls back to venv and pip since uv pip install ignores inherited packages.

  • Added the VENV_PYTHON environment variable for locally overriding the Python version of the development virtual environment, e.g. when the configured venv_python is hard to come by on the development machine.

  • Added the require_autorelease_app question, defaulting to true for repositories inside the salt-extensions organization. It renders significantly simpler release workflows that require the configured GitHub App; otherwise, they still support falling back to the default GitHub token.

  • Added the venv_python question for choosing the Python version of the development virtual environment instead of hardcoding a recommendation. The docs, package and release preparation workflows follow it as well.

  • Documented skipping pre-commit hooks that fail to install on some platforms, e.g. actionlint, via pre-commit’s standard SKIP environment variable. The generated .envrc.example includes a corresponding hint.

  • Resource types authored as packages with per-type loader overlay directories (resources/<rtype>/{modules,states,...}/) are supported by the autodocs generation, and the CLI example check covers per-resource-type execution module overlays.

  • Template updates adjust the OS release answers automatically: previously selected defaults follow the current default and releases that are not offered anymore are removed.

  • The generated noxfile now recognizes Salt release branches in SALT_REQUIREMENT: values like salt==3007.x install Salt from the corresponding upstream git branch instead of a released package, same as salt==master.

  • The new typing question also generates a utils/_types.py module, providing type aliases for common Salt objects and importable typed declarations of most loader dunders. The generated loader module stubs import the ones they use inside typing.TYPE_CHECKING blocks.

  • The scaffolded resource functional test verifies the resource type is discovered by the Salt loader and skips cleanly on Salt releases without the resources subsystem.

  • The selectable OS releases are limited to those that are still supported upstream and available in CI, kept in sync automatically by a scheduled workflow querying endoflife.date, the vmactions project and the GitHub runner images.

  • The workflows now declare least-privilege Actions cache access via the cache-mode key: release builds and workflow_run-triggered workflows are denied cache access entirely, protecting against cache poisoning.

  • The tools/initialize.py script now sports a proper CLI, providing --help output and rejecting unknown arguments instead of silently ignoring them.

  • When updating an extension that already ships resource modules, the resource type is selected automatically in the loaders answer.

0.10.0 (2026-07-02)

Changed

  • Marked Salt 3007 as no longer supported, meaning it is no longer tested against if min_salt_version == 3006.

  • Switched recommended venv Python version from 3.10 to 3.14

  • Updated dev/CI dependencies

Fixed

  • Fixed pre-commit workflow Python version if python_requires is higher than 3.10. pre-commit should always run with the minimally supported Python of the project, while it was previously hardcoded to 3.10.

Added

  • Added Salt 3008

0.9.0 (2026-03-17)

Changed

  • Refactored release workflow into separate toplevel one, which allowed to upgrade PyPI release action and publish attestations with Trusted Publishing #167

  • BREAKING: Added required environment for PyPI package releases in GHA workflow named release

Fixed

  • Fixed docs publishing failure in release workflow when the autorelease PR method was used #378

Added

  • Allowed to make use of a GitHub App for the autorelease bot, which allows CI to run on the autorelease PR

0.8.0 (2026-01-27)

Removed

  • Dropped support for Python 3.9 (EOL) and therefore Salt 3003.x

Changed

  • Updated dev/CI dependencies

0.7.5 (2025-09-18)

Changed

  • Updated dev/CI dependencies

Fixed

  • Fixed Codecov upload in PR from fork #199

0.7.4 (2025-05-02)

Fixed

  • Fixed rendering with Copier 9.7+ #196

  • Fixed nox test session when uv is unavailable

  • Updated dev/CI dependencies

0.7.3 (2025-03-27)

Changed

  • Updated dev/CI dependencies

Fixed

  • Added Salt 3006.10, which fixes the missing cryptography (rsa) dependency in integration tests

  • Fixed release workflow after the release of setuptools 77

0.7.2 (2025-03-21)

Changed

  • Updated dev/CI dependencies

Fixed

  • Fixed CI and dev environments with uv>=0.6.0 (Salt’s dependencies were never installed, causing an ImportError for looseversion)

0.7.1 (2025-03-17)

Fixed

  • Fixed broken release workflow by downgrading action

0.7.0 (2025-03-13)

Removed

  • Removed included .envrc file, provided an example envrc instead

Fixed

  • Fixed development environment compatibility with Python 3.9 #112

  • Added support for Copier 9.6+, raised minimum Copier version to 9.6.0 #148

  • Added libenchant autodiscovery for docs build on Apple Silicon macOS with Homebrew

  • Fixed release workflow with trusted publishing

  • Fixed venv Python version selection with uv

  • Updated dev/CI dependencies

Added

  • Added makefile to automate common operations

  • Enabled instant feedback on test failures in CI

0.6.0 (2024-11-03)

Fixed

  • Fixed Windows test runs after repo.saltproject.io decommission

  • Updated dev/CI dependencies

Added

  • Improved release automation: Added workflow that builds the changelog and creates/updates a PR on pushes to the default branch. Added trigger for release workflow when this PR is merged. #18

  • Added breaking news fragment type to towncrier

0.5.2 (2024-10-16)

Removed

  • Dropped Python 3.8 support

0.5.1 (2024-10-16)

Fixed

  • Fixed updates with salt_version containing a minor version

  • Updated dev/CI dependencies

0.5.0 (2024-10-07)

Removed

  • Dropped workflows question and basic and org workflow variants. All projects use the enhanced workflows from now on.

  • Removed redundant changed-files-debug job

Changed

  • Ensured minimum and maximum supported Salt versions always at least follow their default values (supported versions at the time of the template release) when updating the template.

  • Excluded default fixtures from coverage calculations

  • Pinned pre-commit hooks and actions to digests

Added

  • Added no cover: start [...] no cover: stop pragma to exclude statements from coverage

  • Added default .codecov.yml

0.4.8 (2024-10-05)

Fixed

  • Fixed PyPI uploads in enhanced workflow

0.4.7 (2024-10-04)

Fixed

  • Fixed codecov uploads in enhanced workflow

0.4.6 (2024-10-04)

Changed

  • Reduced maximum Python support of 3007 to 3.10 since 3.11 and 3.12 have issues

0.4.5 (2024-09-27)

Changed

  • Allowed specifying a minor version in max_salt_version

  • Improved test version matrix generation in enhanced workflow

Fixed

  • Fixed basic workflow tests running against .0 minor releases only

  • Fixed project environment initialization crash during first copy. This crash did not result in any issues other than a warning after copy.

  • Moved migrations into Python script, making them more platform-agnostic

  • Updated salt-rewrite URL in pre-commit config

Added

  • Added os_support question when enhanced workflows were selected, influencing the OS the tests are run on

0.4.4 (2024-09-25)

Fixed

  • Fixed RenovateBot warning about merge conflicts after update

0.4.3 (2024-09-25)

Changed

  • Made pre-commit run on all files in PRs that change lint config

  • Made repo automation reset git index after running pre-commit to allow RenovateBot to detect new files correctly

0.4.2 (2024-09-24)

Changed

  • Ignored keyword-arg-before-vararg pylint warning by default because salt.utils.args.get_function_argspec does not work with this style

0.4.1 (2024-09-23)

Fixed

  • Fixed check-merge-conflict pre-commit hook false positive in RST files with specific Saltext name lengths #52

0.4.0 (2024-09-23)

Removed

  • Removed unnecessary docs-html and gen-api-docs nox sessions

  • Removed unused saltpylint dependency

Changed

  • Changed nox pre-commit hook to local hook, added support for recent nox versions

  • Homogenized YAML syntax in org/enhanced workflows

  • Increased default pylint strictness

  • Made rolling doc releases the default when source_url is in org

  • Pinned pylint version used for linting

  • Switched nox venv backend to uv, which reduced the time for pre-commit linting and other nox sessions significantly

  • Updated pre-commit hook versions

  • Updated pylint configuration

Fixed

  • Fixed unwanted regeneration of deleted boilerplate during updates #41

  • Added Copier template test runs on macOS and Windows and fixed some template issues on Windows

  • Ensured pylint lints against the minimum required Python version

  • Fixed deploy-docs if condition in enhanced workflow

  • Fixed license classifier usage when non-apache license is selected

  • Fixed unreleased version in rendered docs changelog with enhanced workflow

  • Made merge conflict pre-commit hook always run

  • Removed duplicate pre-commit hook for merge conflict check

Added

  • Automated most post-copy/update tasks like repo initialization, dev env setup and pre-commit installation and running #45

  • Added 3006.9 to known point releases

  • Added (master|minion)_config fixtures to easily allow daemon configuration overrides

  • Added actionlint with shellcheck integration as a pre-commit hook

  • Added relax_pylint question to suppress some annoying messages, especially with legacy code

  • Added a .envrc for direnv that runs the new initialization script, ensuring that development environments are present and in sync for all developers

  • Added development environment initialization script to generated projects

  • Allowed overriding parameters to sphinx-autobuild in docs-html nox session

0.3.7 (2024-08-05)

Correct meta files, remove install note, better docs URL default

Changed

  • Defaulted docs_url to GH Pages URL when deploying docs

  • Removed install note regarding relenv bug

Fixed

  • Fixed new meta files added in 0.3.5

0.3.6 (2024-08-05)

Workflow fixes/improvements, more meta files

Changed

  • Synced enhanced workflow actions with centralized ones (docs deploy)

  • Require tests passing for deploying docs, add docs deploy to pipeline exit status

  • Default to org workflows if source_url is within org

Fixed

  • Fixed enhanced workflows

  • Removed GitHub Actions workflow creation if source_url is not on GitHub

Added

  • Added deploy_docs option

  • Added more meta files (CODE-OF-CONDUCT, CONTRIBUTING, NOTICE)

0.3.5 (2024-07-23)

SSH fixtures fixes

Changed

  • Stopped ignoring host keys in SSH tests

Fixed

  • Fixed test suite crash on Windows when ssh_fixtures is selected

0.3.4 (2024-07-23)

Workflow deprecation warning fix

Changed

  • Switched from deprecated set-output to environment file in workflows

0.3.3 (2024-07-23)

Fix black formatting

Fixed

  • Fixed default black formatting

0.3.2 (2024-07-22)

Fix docs build, update dev stuff

Fixed

  • Fixed docs build with importlib-metadata >=8

  • Fixed enhanced workflow syntax

Added

  • Added test_containers question

  • Added 3007.1 to known point releases

0.3.1 (2024-05-23)

Provide Python 3.8 migration

Changed

  • Updated actions in workflows

  • Updated test requirements

Fixed

  • Provided migration from <0.3.0 regarding min_python_version to avoid update crash with --skip-answered

  • Fixed coverage in enhanced workflow

Added

  • Added upload of html-docs artifact to enhanced workflow

0.3.0 (2024-05-07)

Drop Python 3.7 support, dev updates, default to 3006

Changed

  • Defaulted min_salt_version to 3006

  • Migrated into salt-extensions org

  • Dropped Python 3.7 support

  • Replaced import reordering tool with isort

  • Improved package_name validation

  • Updated pre-commit hooks for Python >= 3.8

Added

  • Added crossrefs for conf_(minion|master) in docs

  • Added 3005.5 to known point releases

  • Added 3006.7 to known point releases

  • Added 3006.8 to known point releases

0.2.9 (2024-02-20)

Correct autodocs path

Fixed

  • Fixed module discovery in autodocs pre-commit hook when project_name != package_name

0.2.8 (2024-02-08)

Suppress localhost linkcheck errs, update data

Changed

  • Suppressed localhost linkcheck errors

Added

  • Added 3006.6 to known point releases

  • Added Python 3.12 to 3007 version support

0.2.7 (2024-01-06)

Workflow improvements, sync with official tool

Fixed

  • Corrected unit test opts fixture confdir

Added

  • Added enhanced and centralized workflows

0.2.6 (2023-12-15)

Minor fixes, support nested utils, add install guide

Changed

  • Minor docs layout changes

Fixed

  • Fixed discovery of nested utils in autodocs hook

Added

  • Added default installation guide

0.2.5 (2023-12-13)

Cleanup docs, add changelog to docs, fix CLI scripts

Changed

  • Reduced docs nesting, removed docs/**/all.rst

Fixed

  • Fixed local pre-commit hooks paths

Added

  • Added (rolling) changelog to docs

0.2.4 (2023-12-11)

Fix typo in README

No significant changes.

0.2.3 (2023-12-11)

Community enhancements, changelog

Changed

  • Reworked default README

Added

  • Added towncrier scaffolding

  • Added GitHub issue/PR templates

0.2.2 (2023-12-10)

pyproject.toml with Salt requirement fixed

Fixed

  • Readded Salt requirement

0.2.1 (2023-12-08)

Fix docs build after pyproject migration

Fixed

  • Fixed docs build after switch to pyproject.toml

0.2.0 (2023-12-08)

Remove pinning, transition to pyproject.toml

Changed

  • Transitioned to pyproject.toml

0.1.6 (2023-12-08)

Remove pinning

Changed

  • Dropped scaffolding for requirements pinning

Fixed

  • Fixed README instructions

0.1.5 (2023-11-15)

Fix autodocs in pre-commit workflow

Fixed

  • Fixed module discovery in autodocs hook

0.1.4 (2023-11-15)

More docs build fixes

Fixed

  • Fixed 3.7 pip-compile docs

0.1.3 (2023-11-15)

Fix docs build

Fixed

  • Ensured make-autodocs works without saltext namespace

  • Fixed intersphinx URL for pytest

Added

  • parametrized docs/all.rst

0.1.2 (2023-11-15)

pre-commit pylint fixes

Fixed

  • Fixed pre-commit nox/pylint race condition

0.1.1 (2023-11-14)

salt-rewrite 2.3.0 has wrong python_requires

Fixed

  • Fixed pre-commit on Python 3.7 (salt-rewrite 2.3.0 has wrong python_requires)

0.1.0 (2023-11-14)

diverged from official salt-extension tool

Removed

  • Dropped support for Python <3.7

  • Dropped support for Salt <3003

Changed

  • Defaulted minimum supported version to 3005

  • Updated pre-commit hook versions

  • Updated workflow action versions

  • Added validation for many inputs

Fixed

  • Corrected minimum pytest-salt-factories version

  • Corrected reference to requirement files

Added

  • Parametrized versions all over the template

  • Added salt-ssh fixtures

  • Added functional tests skeleton

  • Added (minion|master)_opts unit test fixtures

0.0.2 (2023-11-14)

in sync w/ salt-extension + pre-commit applied

Fixed

  • Fixed default project pre-commit formatting

0.0.1 (2023-11-13)

Initial release based on official salt-extension tool