Skip to content

Publish tack-core to PyPI; tack-vis from the repository at the release tag - #366

Open
berkgeveci wants to merge 2 commits into
Kitware:mainfrom
berkgeveci:release/pypi-tack-core
Open

berkgeveci wants to merge 2 commits into
Kitware:mainfrom
berkgeveci:release/pypi-tack-core

Conversation

@berkgeveci

Copy link
Copy Markdown
Collaborator

For #306. Only tack-core goes to PyPI for 0.7; tack-vis is installed from this repository at the release tag.

Do not merge yet. Once merged, the docs on main say pip install tack-core, which only works after 0.7 is published. Merge just before tagging, or split the workflow and CI from the docs.

Publishing (.github/workflows/publish.yml, new)

  • On a v* tag:
    • checks that the tag matches tack-core's version;
    • builds the wheel and the sdist and runs twine check --strict on both;
    • installs tack-core alone from each and runs a kernel;
    • uploads to PyPI with trusted publishing (GitHub OIDC, no stored token), after the pypi environment's approval.
  • Run by hand: the same build goes to TestPyPI, for the dry run.

CI's wheel job also builds tack-core's sdist, runs twine check on it, and installs tack-core alone from the wheel and from the sdist (tools/check_core_install.py):

  • a kernel runs on the CPU;
  • tack.dataset says tack-vis is not installed and gives the command that installs it.

Docs and messages

  • Install page: pip install 'tack-core[cpu]' first, then tack-vis from the Git tag. The clone and uv sync stay, under "Work on Tack from a clone".
  • READMEs: tack-core's README is its PyPI page; both READMEs are updated, as are the backends page, the MPI page and the device-errors page.
  • Missing backend: the message gives pip install 'tack-core[cuda]' (in a clone, uv sync --extra cuda).
  • Missing tack-vis: asking for tack.dataset names pip install 'tack-vis @ git+https://github.com/Kitware/tack@v<version>#subdirectory=packages/tack-vis'.

RELEASING.md (new) has:

  • The one-time setup: trusted publishers on PyPI and TestPyPI for Kitware/tack, publish.yml, and environments pypi and testpypi; the GitHub environments, with required reviewers for pypi.
  • Each release's steps:
    1. versions, with tack-vis's tack-core>= requirement raised to the release;
    2. the @v0.7.0 in the install commands;
    3. the changelog release;
    4. merge;
    5. the TestPyPI dry run;
    6. tag and approve;
    7. check the install, with the GPU extras on jura, illyad and headroom.

Tested locally (CPU)

  • Both packages build, and twine check --strict passes.
  • tack-core alone, installed from the wheel and from the sdist, runs a kernel and gives the tack-vis hint.
  • Both workflows pass actionlint.
  • Lint, the SPDX and changelog checks, the related tests and the strict docs build pass.

🤖 Generated with Claude Code

@berkgeveci

Copy link
Copy Markdown
Collaborator Author

Split: the publish workflow, CI's wheel checks, tools/check_core_install.py, RELEASING.md and the tack.dataset hint are in #367, to merge now for the TestPyPI dry run. Once #367 merges, this PR is rebased onto it and keeps only the docs and the backend messages (pip install tack-core[...]), still to merge just before the 0.7 tag.

berkgeveci added a commit that referenced this pull request Nov 5, 2026
The workflow publishes tack-core to PyPI on a release tag, after the
pypi environment's approval, with trusted publishing; run by hand it
uploads to TestPyPI, the dry run. It checks the tag is the version, builds
the wheel and the sdist, twine-checks both and installs tack-core alone
from each. CI's wheel job does the same checks on every pull request
(tools/check_core_install.py). RELEASING.md has the setup and the steps.

tack.dataset without tack-vis names the command that installs it from the
repository at this release's tag.

Split from #366, whose docs and backend messages (pip install tack-core)
wait for the release.
…e tag

Only tack-core goes to PyPI for 0.7. A publish workflow builds its wheel
and sdist on a release tag, checks the tag is the version, twine-checks
both, installs tack-core alone from each and runs a kernel, then uploads
with trusted publishing once the pypi environment approves; run by hand it
uploads to TestPyPI. CI's wheel job builds the sdist and installs
tack-core alone too (tools/check_core_install.py).

The install docs, the READMEs (tack-core's is its PyPI page) and the
missing-backend messages give pip install "tack-core[...]"; a clone's uv
sync stays, for working on Tack. tack.dataset without tack-vis names the
command that installs it from the repository at this release's tag.
RELEASING.md has the one-time setup and the steps of a release.
@berkgeveci
berkgeveci force-pushed the release/pypi-tack-core branch from 09fb2be to b5ffb19 Compare November 5, 2026 20:47

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant