Skip to content

ci: publish without a token, and actually run the newer tests - #15

Merged
hugo8xx merged 1 commit into
mainfrom
ci/trusted-publishing
Aug 25, 2026
Merged

ci: publish without a token, and actually run the newer tests#15
hugo8xx merged 1 commit into
mainfrom
ci/trusted-publishing

Conversation

@hugo8xx

@hugo8xx hugo8xx commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

No more tokens

publish.yml releases from a GitHub Release over PyPI Trusted Publishing — OIDC, so there is no API token in the repository, in a secret, or anywhere to rotate.

A token scoped to the wrong project already cost a 403 Forbidden here. The reflex fix for that is one account-wide token covering every package, which is the version worth avoiding.

One-time setup on PyPI — this project's Publishing settings (not the pending-publisher page; khwan is already published):

field value
owner khwanlabs
repository khwan-client-python
workflow publish.yml
environment pypi

Then a release is a tag and a click. Same setup already works on khwan-crewai, published this way with no token at all.

CI was checking less than half the tests

test.yml ran two of the five suites. The other three — AsyncKhwan, flush(), occurred_at — arrived after it was written and nothing added them, so 13 of 25 assertions were not checked on any push, including the subprocess test that catches a background record being killed at exit.

Installing .[async] is what lets the async suite run at all.

Publishing runs every suite before it builds — a release tag is the last place to discover they fail.

publish.yml releases from a GitHub Release over PyPI's Trusted Publishing —
OIDC, so there is no API token in the repository, in a secret, or anywhere to
rotate. A token scoped to the wrong project already cost a 403 here, and the
reflex fix for that is one account-wide token covering every package, which is
the version worth avoiding.

test.yml was running two of the five suites. The other three — AsyncKhwan,
flush(), occurred_at — arrived after it was written and nothing added them, so
13 of 25 assertions were not being checked on any push. Installing .[async] is
what lets the async suite run at all.

Publishing runs every suite before it builds. A release tag is the last place to
find out they fail.
@hugo8xx
hugo8xx merged commit 1f67bfc into main Aug 25, 2026
2 checks passed
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