This guide is for maintainers preparing a public RepoAgents release.
Use the consolidated preflight when you want one command that runs the release checklist and leaves every artifact you need for the tag cut:
uv run repoagents release check --format all
bash scripts/release_preflight.shBy default, repoagents release check runs the full preflight:
- release preview target inference
- release announcement copy pack generation
uv run pytest -quv build- temporary-wheel smoke install for
repoagents --help - open-source governance and CI file presence checks
It exports:
.ai-repoagents/reports/release-checklist.json.ai-repoagents/reports/release-checklist.md.ai-repoagents/reports/release-preview.json.ai-repoagents/reports/release-announce.json.ai-repoagents/reports/release-assets.json
The command exits with code 0 only when the repository is ready to publish. Any blocking issue or follow-up item keeps the exit code non-zero so you can use it as the last local gate before tagging.
Use the built-in preview before you touch tags:
uv run repoagents release preview
uv run repoagents release preview --format all
uv run repoagents release announce --format all
uv run repoagents release check --format allThe preview works even if the repository has not been bootstrapped with repoagents init.
It produces:
.ai-repoagents/reports/release-preview.json.ai-repoagents/reports/release-preview.md.ai-repoagents/reports/release-notes-v<version>.md.ai-repoagents/reports/release-announce.json.ai-repoagents/reports/release-announce.md.ai-repoagents/reports/announcement-v<version>.md.ai-repoagents/reports/discussion-v<version>.md.ai-repoagents/reports/social-v<version>.md.ai-repoagents/reports/release-cut-v<version>.md
The preview checks:
pyproject.tomlandsrc/repoagents/__init__.pyversion alignment- whether
CHANGELOG.mdstill has usableUnreleasednotes - whether the inferred or requested target tag already exists in the changelog
- current branch and working-tree cleanliness
If the current project version already has a dated changelog section and Unreleased still contains notes, RepoAgents infers the next patch tag for the preview. For example, 0.1.0 plus new Unreleased notes previews v0.1.1.
repoagents release announce --format all reuses the same inferred target tag and writes a copy pack for maintainers:
- short public announcement
- pinned discussion draft
- short social copy
- release-cut checklist
- GitHub release notes markdown
Use this when you want one place to copy the release message set instead of assembling each post by hand.
If you want a full disposable rehearsal, run:
bash scripts/demo_release_rehearsal.shThat script copies the current repository into a temporary workspace, generates preview/announcement artifacts, creates a local annotated rehearsal tag, runs uv build, and records tag/build evidence under .ai-repoagents/reports/release-rehearsal/.
Use the asset report when you want to validate wheel/sdist output and the post-tag upload commands without touching an external package index:
uv run repoagents release assets --format all
uv run repoagents release assets --build --smoke-install --format allThis exports:
.ai-repoagents/reports/release-assets.json.ai-repoagents/reports/release-assets.md.ai-repoagents/reports/release-assets-v<tag>.md
The asset report captures:
- wheel/sdist presence
- artifact size and sha256
- target-version alignment
- optional
uv buildresult - optional wheel install smoke via a temporary venv
- suggested
gh release uploadandtwine uploadcommands
For a disposable end-to-end rehearsal, run:
bash scripts/demo_release_publish_dry_run.shThat script patches the copied workspace to the inferred preview version, creates a local annotated rehearsal tag, runs repoagents release assets --build --smoke-install --format all, and records tag/build evidence under .ai-repoagents/reports/release-publish-dry-run/.
- Confirm the working tree is clean.
- Confirm the changelog is updated.
- Confirm README, quickstart, and docs index links still match the current surface.
- Confirm major examples still run.
Run from the repository root:
uv sync --dev
uv run pytest -q
uv buildOptional but recommended install smoke:
python3.12 -m venv /tmp/repoagents-release-smoke
/tmp/repoagents-release-smoke/bin/pip install dist/*.whl
/tmp/repoagents-release-smoke/bin/repoagents --helpIf you changed live GitHub or Codex surfaces, also consider the opt-in smoke paths:
CODEX_E2E=1 uv run pytest tests/test_codex_backend.py -k live_smoke -rs
GITHUB_E2E=1 REPOREPUBLIC_GITHUB_TEST_REPO=owner/name uv run pytest tests/test_tracker.py -k live_read_only -rsOnly run write-path live GitHub checks against a dedicated sandbox repo.
Make sure the release notes cover:
- headline user-visible features
- safety or policy changes
- migration or config notes
- known limitations that still apply
- Bump
versionin pyproject.toml. - Move release notes from
Unreleasedto a dated version section in CHANGELOG.md. - Commit the release prep.
- Create an annotated tag, for example
v0.1.1. - Push
mainand the tag. - Create the GitHub release using the changelog notes.
- If you are publishing to PyPI, publish only after CI for the tagged commit is green.
The preview exports a ready-to-copy GitHub release body file. The default publish command is:
gh release create v0.1.1 --title "RepoAgents v0.1.1" --notes-file .ai-repoagents/reports/release-notes-v0.1.1.md- verify install and
repoagents --helpfrom the released artifact - verify docs links in the GitHub release description
- update any roadmap or backlog notes that changed because of the release