Releases: questrail/tektronix
Releases · questrail/tektronix
Release list
v0.5.0
Added
- Test, lint, and type check on every push through a CI workflow, across
Python 3.12, 3.13, and 3.14. The.travis.ymlthat was here had been
pointing at travis-ci.org, which shut down, so nothing had actually run
against a push in years and the badge in the README linked to a service
that no longer answers. - Check the lowest dependency versions
pyproject.tomlallows in a job of
its own. The version floors are a promise to anyone installing tektronix
alongside something else that holds numpy back, and the matrix never
tested them: it installs whateveruv.lockpins, which is the newest
numpy rather than the oldest allowed one. - Audit the workflows with zizmor in CI and in
just lint. They are the
part of this repository that can mint a PyPI credential, and everything
else here is linted on every push. - Publish from a tag through a release workflow using trusted
publishing, which mints a short lived credential from the GitHub OIDC
identity of the run, so there is no PyPI API token to store, rotate, or
leak. That same identity signs a PEP 740 attestation for each
distribution. The workflow waits on the whole CI workflow, checks the
tagged commit is onmaster, checks the tag against the version in
pyproject.toml, smoke tests the built wheel, and creates a GitHub
release carrying this file's section for that version as its notes. - Smoke test the built wheel from outside the source tree, in
scripts/smoke_test_wheel.py. Every other check runs againstsrc/, so a
packaging mistake that left a module orpy.typedout of the distribution
would have passed all of them and shipped. - Ship
py.typedand annotate the public API, so that a project depending on
tektronix type checks against real signatures rather thanAny. - Put the actions and the Python dependencies under Dependabot. The actions
are pinned to commit SHAs, and a pin with nothing updating it is a decision
to stay on one commit forever. - Report coverage to Coveralls from CI, with a 100% floor enforced by
pytest --cov. The floor is set at what the suite already covers, so
uncovered code now has to arrive with either a test or a deliberate edit. - Test that an unrecognized file type stops the read. The three recognized
layouts are told apart by the first cell of the first row alone, and
nothing had covered what happens to a file that matches none of them.
Changed
- Replace the
invoketasks andrequirements.txtwith uv and a
Just recipe file, and lock the dependencies inuv.lock. The
requirements file was apip-chilldump that pinned the dev tools without
distinguishing them from the runtime dependency, and it namednose,
which has not run on a supported Python in years. - Cut releases with
just release, which refuses 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.
It then shows the entries waiting here beside the version each kind of
bump would produce and asks which to cut. Theinvoke releasetask it
replaces took the version as an argument and trusted it, and pushed the
tag itself before anything had been checked. - Lint and format with ruff and type check with pyright, both pinned
inuv.lockand reached throughuv run, so a recipe and a CI job use the
same version. Theblackandpylintconfiguration this replaces
configured tools that were not installed, and the pyright section pointed
atsrc/web,src/sdk, andsrc/typestubs, none of which exist here. - Run the suite with pytest rather than
nose2, and locate the sample data
withpathlibrather thanunipath, which was an undeclared dependency of
the tests and has not been released since 2014. - Split the CSV parser into named helpers, one per section of the file. It
had been one function of 88 statements and 21 branches, in which the
meaning of a row depended on how manynext(reader)calls had already
gone by. - Require Python 3.12 and numpy 2.2. The package claimed 3.9 while the CI
configuration tested 3.8, and neither is supported upstream any more. - Date the entries below in ISO format, which is what the release workflow
reads when it collects the notes for a GitHub release.
Fixed
read_csv_file()rebuilt the entire trace array inside the row loop,
reallocating and recopying every point read so far on each of the up to
2401 rows in a file. It is built once now, after the loop, which also
means a file whose header claims no points at all returns an empty array
rather than raisingNameErroron an unbound local.
Removed
tasks.py,requirements.txt, and.travis.yml, replaced by the
Justfile,uv.lock, and the workflows under.github/.