Cutting a release is one command. The two integrations it depends on — Zenodo and PyPI — each need a one-time manual setup that cannot be done from a workflow file, and neither is switched on yet. This document is the checklist for both.
- Bump
track2data/_version.py. That is the single source of truth;tests/test_version_consistency.pyfails ifpyproject.toml,CITATION.cff, the Windows installer or the macOS bundle disagree. - Update
CITATION.cff:versionanddate-released. - Move the
[Unreleased]section ofCHANGELOG.mdunder the new version heading. git tag vX.Y.Z && git push origin vX.Y.Z.
The tag triggers .github/workflows/release.yml, which builds the three
desktop binaries, runs the determinism gate, publishes the GitHub release
with SHA256SUMS.txt, and publishes the engine to PyPI.
The pypi job uses OIDC, so no API token is stored anywhere — PyPI
verifies the workflow's identity directly. That is the point: a stored token
in repository secrets is a credential that can leak, and a scientific tool
signing its own releases with one is a worse story than not publishing at
all.
It will fail until a publisher is registered:
-
Create the project on PyPI, or go to an existing project's Manage → Publishing.
-
Add a GitHub trusted publisher:
Field Value Owner mbel-techRepository Track2DataWorkflow release.ymlEnvironment pypi -
In the repository, create the
pypienvironment (Settings → Environments). Add a required reviewer if you want a human gate before each upload.
A version can never be re-uploaded to PyPI. The workflow runs
twine check first for that reason: a wheel whose description fails to
render is not fixable after the fact, only superseded.
To rehearse without publishing, point the publish step at TestPyPI
(repository-url: https://test.pypi.org/legacy/) and register the
equivalent publisher there.
A DOI is what makes the software citable in a way that resolves in ten years, and it is the thing reviewers ask for. Zenodo mints one per release automatically once the integration is on.
-
Sign in to zenodo.org with the GitHub account.
-
Settings → GitHub, find
mbel-tech/Track2Data, flip the switch on. -
Cut a release (or re-publish the existing one). Zenodo archives the tag and mints a DOI, reading
CITATION.cfffor the metadata. -
Zenodo issues two DOIs. Use the concept DOI — the one that always resolves to the newest version — in the README badge and in
CITATION.cff'sidentifiers:. The per-version DOI belongs in a paper's methods section, where the specific version matters. -
Add the badge to the README, above the title:
[](https://doi.org/10.5281/zenodo.XXXXXXX)
-
Fill in
CITATION.cff:identifiers: - type: doi value: 10.5281/zenodo.XXXXXXX description: Concept DOI, always resolving to the latest release.
Zenodo only sees releases created after the integration is enabled, so turning it on does not retroactively archive v0.1.0.
The project already meets most of what JOSS reviews for: an OSI licence, a test suite with CI, documented installation and usage, an issue tracker, and substantial scholarly effort. JOSS is the closest fit for the scope; SoftwareX and Methods in Ecology and Evolution's applications section are the alternatives, and both want a longer methods treatment.
Whichever route, the submission has to cite idtracker.ai (Romero-Ferrero et al. 2019) prominently as the upstream tool, and state the version range this reader was written and tested against.