Verifying a release

September 17, 2026 ยท View on GitHub

For anyone who repackages or rolls out aTrain and wants to check that a downloaded file is what the project published: Flatpak and distribution maintainers, IT departments, and the Microsoft Store submission. End users installing from the Store or Flathub do not need any of this; those channels verify packages themselves.

What a release consists of

Every release is a git tag v<version> and a GitHub release built from it by release.yml. It publishes:

FileWhereNotes
aTrain-<version>.msixZenodoWindows installer, Authenticode-signed.
checksums.txtGitHub release and ZenodoSHA-256 of every file below, computed after signing. Both copies are identical.
aTrain-<version>-windows.cdx.jsonGitHub releaseCycloneDX SBOM of the Windows build.
aTrain-<version>-source.tar.gzGitHub (tag archive)Source at the tag; its hash is in checksums.txt.

Do not take the installer from the workflow run under Actions: that artifact is the build before signing, and its hash is not the one in checksums.txt. The signed installer only exists on Zenodo.

1. Compare the checksum

Download checksums.txt from the GitHub release, then compare.

Windows:

(Get-FileHash .\aTrain-<version>.msix -Algorithm SHA256).Hash

PowerShell prints the hash in upper case, checksums.txt uses lower case; compare case-insensitively.

Linux/macOS:

sha256sum -c checksums.txt --ignore-missing

A mismatch means a corrupted download or a file that is not the released one. Do not install it; download again, then report if it persists (see below).

2. Check the Authenticode signature (Windows installer)

Get-AuthenticodeSignature .\aTrain-<version>.msix | Format-List Status, SignerCertificate

Status must be Valid and the signer must be the certificate named in the Code signing policy: issued to SignPath Foundation, applied through SignPath.io. The policy page also lists who may approve a signing request.

3. Verify the source

For builds from source (Flatpak, distribution packages), work from the tag, not from a branch:

git clone --branch v<version> https://github.com/aTrainTranscription/aTrain

The tag archive aTrain-<version>-source.tar.gz is listed in checksums.txt, so a downloaded tarball can be checked the same way as the installer.

4. Read the SBOM

aTrain-<version>-windows.cdx.json lists every Python package in the Windows build with version and licence, plus the bundled ML models and their Hugging Face revisions. Use it to scan for known vulnerabilities, for example with pip-audit, grype, or trivy sbom, or to review licences before redistribution.

Reporting a mismatch

If a checksum or signature does not match what the release publishes, do not distribute the file. Report it to the maintainers as described in SECURITY.md.