• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

questrail / sdfascii / 33544641033
93%

Build:
DEFAULT BRANCH: master
Ran 01 Sep 2026 06:36PM UTC
Jobs 1
Files 2
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

01 Sep 2026 06:36PM UTC coverage: 93.168% (+3.6%) from 89.606%
33544641033

push

github

matthewrankin
Modernize the tooling, packaging, and release process

Bring sdfascii onto the same footing as the other questrail projects
(applyaf, taffmat, siganalysis): uv and a hatchling pyproject.toml in
place of setup.py, setup.cfg, requirements.txt, and MANIFEST.in; a just
Justfile in place of the Invoke tasks.py; ruff for pep8 and pep8-naming,
pyright for mypy, pytest for nose2; and a GitHub Actions CI workflow in
place of a .travis.yml that pointed at travis-ci.org and had not run in
years. CI lints, type checks, and tests on 3.12, 3.13, and 3.14, installs
the oldest numpy pyproject.toml allows so the floor is a tested promise,
and audits the workflows with zizmor.

Releases publish from a tag rather than from a laptop. `just release`
refuses a dirty tree, a branch other than master, a master behind its
upstream, an empty Unreleased section, or an existing tag; then lints and
tests; then shows the entries waiting to ship beside the version each
bump would produce and asks which to cut. Pushing the tag is what
publishes. The release workflow waits on the whole CI run, checks the tag
sits on master and matches the packaged version, installs the built wheel
where src/ cannot be reached and exercises it there, and uploads with
trusted publishing and a PEP 740 attestation per distribution, so there
is no PyPI token to store or leak. Dependabot keeps the SHA-pinned
actions and the lock file moving.

The module moves to a src layout at src/sdfascii/__init__.py, and the
block that sat under `if __name__ == "__main__":` moves to __main__.py,
where `python -m sdfascii` can reach it; under a package nothing would
ever have run it. Its output is byte for byte what the tracked
examples/*.json already hold. The `ascii` file type, a documented choice
whose body was never written, is refused rather than silently writing
nothing and exiting 0.

Three latent bugs fell out along the way. _decode_sdf_data_hdr() never
bound temp_data_hdr on the revision 3 branch, and read_sdf_f... (continued)

450 of 483 new or added lines in 2 files covered. (93.17%)

450 of 483 relevant lines covered (93.17%)

0.93 hits per line

Uncovered Changes

Lines Coverage ∆ File
32
93.18
src/sdfascii/__init__.py
1
92.86
src/sdfascii/__main__.py
Jobs
ID Job ID Ran Files Coverage
1 33544641033.1 01 Sep 2026 06:36PM UTC 2
93.17
GitHub Action Run
Source Files on build 33544641033
  • Tree
  • List 2
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #33544641033
  • 2db6ed8d on github
  • Prev Build on master (#17)
  • Next Build on master (#33546723860)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc