chore: harden release process (test gate, PyPI verify, single version source)#12
Open
ebowman wants to merge 2 commits into
Open
chore: harden release process (test gate, PyPI verify, single version source)#12ebowman wants to merge 2 commits into
ebowman wants to merge 2 commits into
Conversation
… source) - publish.yml: add a test gate (pytest tests/unit on macOS) that build/publish depend on; run test+build on push/PR so the gate is exercised before release; publish only on a published Release; add a verify-pypi job that polls PyPI for the released version and fails loudly (would have caught v1.4.4 never shipping). - pyproject: single source of version truth via setuptools dynamic attr=things_mcp.__version__ (stop hand-editing pyproject + __init__); fix placeholder author metadata. - tests: fix stale test_retrieve_completed_todos (patched things.logbook but the code calls things.todos(status='completed')); now hermetic and green. - CLAUDE.md: document CI as the authoritative release path; manual twine upload is break-glass only; version bump now touches only __init__.py. - mitigate GitHub Actions Node 20 runtime deprecation. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
get_todos() reads via things.todos(status='incomplete'), not the operation queue, so the stale queue mock left it hitting the real (empty in CI) database and asserting on []. Patch things.todos instead. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #11. Addresses the release-process weaknesses exposed while shipping v1.4.5 (CI publishing had been silently broken since v1.4.4, which never reached PyPI).
Changes
publish.ymlnow runspytest tests/uniton macOS, andbuild/publishdepend on it. Tests also run onpush/pull_request, so the gate is exercised before any release (previously nothing ran tests in CI).verify-pypijob polls PyPI for the released version and fails loudly if it never appears. This is the guard that would have caught v1.4.4 silently never publishing.pyproject.tomlnow derives the version dynamically fromthings_mcp.__version__(setuptoolsdynamic+attr). Releases bump onlysrc/things_mcp/__init__.py.CLAUDE.mddocuments CI as the way releases publish; manualtwine uploadis now explicitly break-glass only.Also fixes a stale unit test (
test_retrieve_completed_todospatchedthings.logbook, butget_logbookcallsthings.todos(status='completed')), so the gate is green.Publish flow after this PR
test → build → publish-to-pypi (release only) → verify-pypi (release only)Publishing only happens on a published GitHub Release; pushes/PRs stop at
test → build.Testing
pytest tests/unit→ 597 passed locally.python -m buildconfirms the dynamic version resolves to the value in__init__.py.🤖 Generated with Claude Code