Agent Skill · Apollo Config
apollo-release
Automate Apollo server formal release operations end-to-end with checkpoint-gated external actions and resume support. Use when preparing a non-SNAPSHOT Apollo release in apolloconfig/apollo, creating release PR/prerelease, triggering GitHub Action package and docker publish workflows, promoting release, posting announcement discussion, and opening post-release SNAPSHOT PR.
Skill body
Apollo Release
Run this skill when you want to execute the Apollo server formal release workflow in a controlled and resumable way.
Workflow Contract
- Work only in the current directory.
- Require current directory to be Apollo repository root (
apollo+ rootpom.xmlartifactIdapollo). - Require at least one git remote URL that normalizes to
github.com/apolloconfig/apollo. - Require explicit checkpoint confirmation before each external publish action.
- Persist progress in a state file under
.git/by default and support resume without repeating completed steps.
Command Entry
python3 scripts/release_flow.py run \
--release-version X.Y.Z \
--next-snapshot A.B.C-SNAPSHOT \
--highlight-prs PR_ID_1,PR_ID_2,PR_ID_3 \
[--state-file .git/apollo-release-state.json] \
[--previous-tag vP.Q.R] \
[--target-branch master] \
[--confirm-checkpoint CHECKPOINT]
Use --target-branch 2.x for maintenance-line releases. If omitted, the flow targets master.
Supported checkpoints
PUSH_RELEASE_PRCREATE_PRERELEASETRIGGER_PACKAGE_WORKFLOWTRIGGER_DOCKER_WORKFLOWPROMOTE_RELEASECREATE_ANNOUNCEMENT_DISCUSSIONMANAGE_MILESTONESPUSH_POST_RELEASE_PR
If execution stops at a checkpoint, rerun with --confirm-checkpoint <NAME>.
Step Mapping (1~7)
- Bump root
pom.xmlrevision fromX.Y.Z-SNAPSHOTtoX.Y.Z, create release branch/commit/PR draft. - Wait for release PR merge, generate release note and announcement drafts from
CHANGES.md, and create GitHub prerelease (vX.Y.Z, target--target-branch). - Trigger
.github/workflows/release-packages.ymlwith JDK 8 build in GitHub Action; workflow uploads three zip packages and three sha1 assets to release. - Verify release assets exist in release page after package workflow succeeds.
- Trigger
.github/workflows/docker-publish.ymlon--target-branchwith release version and wait for completion. - Promote prerelease to official release, mark it as
latest, and publish announcement discussion inAnnouncements. - Post-release housekeeping: bump to next SNAPSHOT, archive
CHANGES.md, auto-manage milestones, and open post-release PR.
Scripts
scripts/release_flow.py- Main orchestrator.
- Handles preflight, checkpoint gating, workflow execution, release asset verification, milestone management, resume state, and final summary.
scripts/release_notes_builder.py- Uses
CHANGES.mdas the source forWhat's Changed. - Merges GitHub generated notes for
New Contributorsand changelog link. - Builds
Highlightsonly from user-selected PRs (--highlight-prs), then extracts practical usage hints from those PRs’ body/comments/docs changes. - Builds upgrade section from SQL delta inspection.
- Uses
scripts/github_discussion.py- Creates discussions via GraphQL using category name/slug.
scripts/test_release_helpers.py- Unit tests for parser and helper behavior.
Referencee
references/templates.md: Release note and announcement templates.
Operational Notes
- Prefer
--dry-runfirst to validate step order and checkpoint prompts. - Default state file lives under
.git/so preflight clean-tree checks are not polluted by the workflow state itself. - Default release target is
master; set--target-branchfor release branches such as2.x. - Keep release operations on a clean working tree unless explicitly using
--allow-dirty. - Do not push, create PRs/releases, trigger workflows, edit milestones, or publish discussions without checkpoint confirmation.
- Build
What's ChangedfromCHANGES.mdentries, but render each PR item as... by @<author> in <PR URL>so contributor mentions are preserved. HighlightsPR list must be provided explicitly via--highlight-prs; do not auto-pick highlights.- Always review generated
Highlightsdraft and confirm wording before checkpointCREATE_PRERELEASE. - Resume runs with the same
--target-branch; the state file now records and validates it. - After a successful full run, the workflow auto-cleans generated temp artifacts such as the state file and
.gitdraft files (release-notes,announcement,release-pr,post-release-pr). If announcement posting falls back tomanual_required, temp artifacts are kept for manual recovery.