This repo contains three independently-versioned artifacts, each with its own release path.
| Artifact | Package name | Tag | Published to |
|---|---|---|---|
| Python engine + CLI | amplifier-agent |
v<version> |
PyPI (OIDC, publish-python.yml) |
| Python wrapper SDK | amplifier-agent-py |
py-v<version> |
PyPI (OIDC, publish-python.yml) |
| TypeScript wrapper SDK | amplifier-agent-ts |
wrapper-v<version> |
npm (OIDC, publish-wrapper.yml) |
GitHub Releases are auto-created by release-notes.yml for v* and wrapper-v* tags.
Running a release? Two skills drive the process end to end:
amplifier-agent-start-release-process(sweep, version, changelog, gate, PR) and then, after that PR merges,amplifier-agent-finish-release-process(tag, verify, downstreams). This file stays the canonical reference for the mechanical facts below; the skills own the judgment and sequencing around them.
# 1. Bump version in the root pyproject.toml
# Edit [project] version = "X.Y.Z"
# 2. Move CHANGELOG.md's [Unreleased] entries under a new [X.Y.Z] heading
# 3. Commit and merge to main. The bump may be its own release PR or folded
# into the change PR being released; either way it must be on main before
# the tag is pushed.
git add pyproject.toml CHANGELOG.md
git commit -m "chore(release): cut amplifier-agent X.Y.Z"
# PR + merge
# 4. Push the release tag from the tip of main
git fetch origin
git checkout main && git pull
git tag -a vX.Y.Z -m "amplifier-agent X.Y.Z"
git push origin vX.Y.ZThis triggers:
publish-python.yml(jobpublish-engine) — builds and publishesamplifier-agentto PyPIrelease-notes.yml— creates a GitHub Release with generated changelog
# 1. Bump version in wrappers/python-py/pyproject.toml
# Edit [project] version = "X.Y.Z"
# 2. Commit and merge to main
git add wrappers/python-py/pyproject.toml CHANGELOG.md
git commit -m "chore(release): cut amplifier-agent-py X.Y.Z"
# PR + merge
# 3. Push the wrapper release tag
git fetch origin
git checkout main && git pull
git tag -a py-vX.Y.Z -m "amplifier-agent-py X.Y.Z"
git push origin py-vX.Y.ZThis triggers publish-python.yml (job publish-wrapper) — builds and publishes
amplifier-agent-py to PyPI.
# See wrappers/typescript/package.json for the version field.
git tag -a wrapper-vX.Y.Z -m "amplifier-agent-ts X.Y.Z"
git push origin wrapper-vX.Y.ZTriggers publish-wrapper.yml → npm OIDC publish.
Before the first PyPI release of each package, configure a pending trusted publisher on PyPI. This only needs to be done once per package.
At https://pypi.org/manage/account/publishing/ add a pending publisher:
| Field | Value |
|---|---|
| PyPI project name | amplifier-agent |
| GitHub repository owner | microsoft |
| GitHub repository name | amplifier-agent |
| Workflow filename | publish-python.yml |
| Environment name | pypi |
At https://pypi.org/manage/account/publishing/ add a second pending publisher:
| Field | Value |
|---|---|
| PyPI project name | amplifier-agent-py |
| GitHub repository owner | microsoft |
| GitHub repository name | amplifier-agent |
| Workflow filename | publish-python.yml |
| Environment name | pypi |
Create an environment named pypi in repo settings
(Settings → Environments → New environment). No secrets are needed.
Optional: add a required reviewer for an extra approval gate.
Note: The OIDC trusted-publisher handshake can only be proven by a real tag-triggered run after PyPI-side configuration. No local test can fully verify this step.
When bumping the protocol version, see the Cross-component invariants section in
AGENTS.md — protocol bumps require coordinated wrapper updates and must
land in one PR.