Releases: questrail/dirwalker
Releases · questrail/dirwalker
Release list
v1.0.0
Added
- Build with hatchling from a
pyproject.toml, laid out undersrc/.
The module moved fromdirwalker.pyat the repository root to
src/dirwalker/dirwalker.py, re-exported fromsrc/dirwalker/__init__.py,
soimport dirwalkeranddirwalker.find_filenames_with_extensions()still
read the same from the outside. Thesrc/layout is what makes the test
suite import the installed package rather than the working copy sitting in
the current directory, which is the only arrangement under which the tests
say anything about what a user would get. - Type hints throughout, checked by pyright, with a
py.typedmarker so
that the annotations are visible to anyone type checking against this
package rather than stopping at its edge. - Test on Python 3.12, 3.13, and 3.14 in a CI workflow on GitHub Actions,
which lints with ruff, type checks with pyright, runs the suite, and
reports coverage to Coveralls. Travis-CI stopped running
for this repository years ago; every check since then has been whatever the
person pushing happened to run. - Audit the workflows with zizmor in CI and in
just lint. Everything
undersrc/is linted on every push, and the workflows, the part of this
repository that can mint a PyPI credential, would otherwise be read by eye
alone. It runs as a job of its own rather than as a step gated on one leg of
the matrix: that gate would mean dropping a Python version silently stops
the audit. - Require the suite to cover every statement and branch. A floor set anywhere
below that would let coverage fall without anything noticing. - Publish from a release workflow triggered by a
v*tag, in place of the
python setup.py register sdist uploadthattasks.pyran from a
developer's machine. It waits on the whole CI workflow, checks that the
tagged commit is onmaster, checks the tag against the version in
pyproject.toml, builds, and installs the built wheel somewheresrc/
cannot be reached to import it there, which is the only check that can catch
a packaging mistake that left something out of the distribution. There is no
PyPI API token anywhere: it authenticates with trusted publishing, and
that same OIDC identity signs a PEP 740 attestation for each
distribution. A GitHub release follows the upload, carrying the
CHANGELOG section for the version as its notes. - A
Justfileholding the lint, test, coverage, dependency, build, and
release recipes.just releaserefuses to start against a dirty working
tree, offmaster, on amasterbehind its upstream, with an empty
Unreleased section, or when the tag it would create already exists, then
shows the entries waiting under Unreleased next to the version each kind of
bump would produce and asks which to cut.tasks.pyasked the same
questions as printed reminders and trusted the answers. - Put the actions and the Python dependencies under Dependabot. The
actions in both workflows are pinned to commit SHAs, since a tag is mutable
and the release job can mint a PyPI credential, and a pin with nothing
updating it is a decision to stay on one commit forever.
Changed
- Require Python 3.12 or newer, dropping 2.6, 2.7, 3.3, and 3.4. All four have
been end of life for years, and thefrom __future__imports the module
carried for them are gone. - Manage the development environment with uv and its lock file, replacing
the pinnedrequirements.txt, and run the recipes with Just rather than
invoke. Test with pytest rather than nose, which does not run on
any supported Python. Lint and format with ruff rather than flake8. - Single source the version in
pyproject.toml. It used to live in
__version__in the module, whichsetup.pyread back out with a regular
expression;uv version --bumpnow owns it, and nothing has to be kept in
step by hand. - Match each extension with one
str.endswith()call over a tuple of
suffixes, rather than a loop over the extensions for every filename. The
matching is unchanged: an extension may still be given with or without its
leading period. - Remove
AUTHORS.mdand the copyright notice's reference to it. The notice
inLICENSE.txtread "The dirwalker developers (see AUTHORS.md)", and
AUTHORS.mdis not in the wheel:license-filescarriesLICENSE.txtinto
dist-info/licenses/and nothing carries the other, so every installed copy
pointed at a file that was not there. A license travels into vendored trees
and distro packages without the repository around it, so the notice has to
stand on its own. It now names the same holder the source file headers have
always named, and the file it used to defer to, which listed one person and
two empty sections, is gone. - Rewrite the suite as pytest functions with fixtures rather than a
unittest.TestCasewith asetUpthat built eleven paths for tests that
each used one or two of them. The test that searched./tests/sample_dir/
passed only when pytest was invoked from the repository root; it now sets
the working directory it depends on. - Replace
.gitignorewith the standard Python template, which covers the
tooling this project now uses.
Fixed
- A non-recursive search returned a subdirectory whose own name ended in one
of the extensions, e.g. anarchive.txt/directory for.txt. The
recursive branch never did, sinceos.walk()lists a directory underdirs
rather thanfiles, and the two branches answering differently for the same
tree is not something a caller can use.
Removed
dirwalker.__version__. It existed forsetup.pyto read. The version now
lives in the package metadata, whichimportlib.metadata.version()reads,
so the module no longer carries a copy that can fall out of step with the
one being published.- The Travis-CI configuration,
setup.py,setup.cfg,MANIFEST.in,
requirements.txt,tasks.py, andAUTHORS.md.