Releases publish the Python and TypeScript SDKs from one GitHub release event. Do not build or upload either package from a maintainer workstation.
Create protected GitHub environments named pypi and npm, each with a
required maintainer review and deployment restricted to protected tags.
Configure PyPI pending trusted publishing with:
- project:
agentrust-telemetry - owner/repository:
agentrust-io/agentrust-telemetry - workflow:
release.yml - environment:
pypi
Configure the npm trusted publisher for @agentrust-io/telemetry with:
- organization/repository:
agentrust-io/agentrust-telemetry - workflow:
release.yml - environment:
npm - allowed action:
npm publish
The npm package must be owned by the agentrust-io npm organization before its
trusted publisher can be configured. If npm does not expose publisher settings
until the first version exists, bootstrap only that first package ownership
using npm's interactive 2FA flow, then configure trusted publishing before any
subsequent release. Never store an npm publish token in GitHub.
- Move the changelog entries from
Unreleasedinto the new dated version. - Update
spec/VERSION; the Python and npm spellings are checked bytools/check_versions.py. - Run the complete CI and artifact smoke tests through a pull request.
- Merge the release-preparation pull request to
main. - Create a GitHub prerelease or release targeting
main, with tagv<contract-version>. - Approve the
pypiandnpmdeployment jobs after inspecting their exact source commit and built artifacts. - Confirm both registry versions, GitHub release assets, and provenance before announcing the release.
The workflow fails closed if the tag differs from the contract version. It builds each distribution once, sends the same artifacts to the registries, and attaches them to the GitHub release. PyPI and npm create registry provenance through trusted publishing; GitHub also attests the downloadable release assets.