chilly-france-44439
04/30/2026, 4:48 PMchilly-france-44439
04/30/2026, 4:48 PMlimited-student-10747
04/30/2026, 4:54 PMlimited-student-10747
04/30/2026, 4:55 PMlimited-student-10747
04/30/2026, 4:55 PMlimited-student-10747
04/30/2026, 4:55 PMchilly-france-44439
04/30/2026, 5:06 PMchilly-france-44439
04/30/2026, 5:06 PMnutritious-balloon-65098
04/30/2026, 5:07 PMnutritious-balloon-65098
04/30/2026, 5:11 PM.github/workflows/create-release.yml — a new workflow that:
◦ Triggers on pull_request: closed targeting main
◦ Only runs when the PR is merged AND the branch starts with rel- (matching the prepare-release.yml convention)
◦ Extracts the version from the branch name (e.g., rel-1.19.1 → 1.19.1)
◦ Checks if a release already exists (idempotent/safe to re-run)
◦ Creates a GitHub release with tag vX.Y.Z, targeting main, with auto-generated release notes
◦ This chains into the existing pypi-release.yml → version-bump-prs.yml pipeline
1. Updated .github/workflows/prepare-release.yml — the PR body template and summary now explain the automated post-merge flow instead of listing manual release creation steps.
2. Updated .agents/skills/sdk-release/SKILL.md — Phase 6 now documents the automated pipeline, and the checklist marks post-merge steps as (Automated). Checklist • chilly-france-44439
04/30/2026, 5:12 PMnutritious-balloon-65098
04/30/2026, 5:12 PMnutritious-balloon-65098
04/30/2026, 5:13 PM.github/workflows/create-release.yml — a new workflow that:
◦ Triggers on pull_request: closed targeting main
◦ Guards on merged == true and branch prefix rel-
◦ Extracts and validates the version from the branch name
◦ Skips if a release already exists (idempotent)
◦ Creates a GitHub release with tag v<version>, targeting main, with auto-generated notes
1. Updated .github/workflows/prepare-release.yml — replaced the manual release creation checklist items in the PR body template with a "What happens on merge" section describing the automated pipeline.
2. Updated .agents/skills/sdk-release/SKILL.md — rewrote Phase 6 to document the automated pipeline and updated the checklist to mark post-merge steps as (Automated).
3. Pushed to branch ci/auto-create-release-on-merge and created PR #3023. Checklist • rel-* PRsnutritious-balloon-65098
04/30/2026, 5:16 PMmain because other unreleased changes could land there first. What was done (since last summary) Fixed the --target in create-release.yml from main to github.event.pull_request.merge_commit_sha, ensuring the tag always points at exactly the release PR's merge commit — even if other PRs land on main before the workflow runs. This was pushed to the existing PR: https://github.com/OpenHands/software-agent-sdk/pull/3023 Checklist • mainnutritious-balloon-65098
04/30/2026, 5:19 PM.github/workflows/create-release.yml — Triggers on pull_request: closed for main, guards on merged == true and rel-* branch prefix, extracts the version, and creates a GitHub release with:
◦ Tag v<version> targeting the merge commit SHA (not main) to avoid picking up unreleased changes if other PRs land first
◦ --notes-start-tag set to the latest existing release tag, exactly replicating the "Previous tag" selection in the GitHub UI for auto-generated release notes
◦ Idempotency check to skip if the release already exists
1. Updated .github/workflows/prepare-release.yml — Release PR body template now describes the automated post-merge pipeline instead of listing manual release creation steps.
2. Updated .agents/skills/sdk-release/SKILL.md — Phase 6 rewritten to document the automated pipeline; checklist marks post-merge steps as (Automated). Checklist • main (per user feedback about race conditions)nutritious-balloon-65098
04/30/2026, 5:22 PM.github/workflows/create-release.yml — a new workflow that triggers on pull_request: closed targeting main, gated on the PR being merged and the branch matching rel-*. It:
◦ Extracts the version from the branch name (e.g., rel-1.19.1 → 1.19.1)
◦ Checks if the release already exists (idempotent)
◦ Finds the previous release tag and passes it via --notes-start-tag (matching the GitHub UI's "Previous tag" behavior)
◦ Creates the release targeting the PR's merge commit SHA (not main, to avoid picking up unrelated commits)
◦ gh release create also creates the lightweight tag v<version> at that commit, matching the existing tag convention
1. Updated .github/workflows/prepare-release.yml — the PR body template now explains the automated post-merge flow instead of listing manual release creation steps.
2. Updated .agents/skills/sdk-release/SKILL.md — Phase 6 now documents the automated pipeline, and the checklist marks post-merge steps as (Automated). Checklist of user feedback addressed • main (to avoid including unreleased changes)gh release create)nutritious-balloon-65098
04/30/2026, 5:26 PM.github/workflows/create-release.yml — a new workflow that triggers on pull_request: closed for main, checks the PR was merged from a rel-* branch, extracts the version, finds the previous release tag, and creates a GitHub release with auto-generated notes.
2. Updated .github/workflows/prepare-release.yml — revised the PR body template and summary to reflect the automated post-merge flow (removed manual release creation checklist items).
3. Updated .agents/skills/sdk-release/SKILL.md — rewrote Phase 6 to document the automated pipeline and updated the checklist to mark post-merge steps as (Automated).
4. End-to-end tested in xingyaoww/release-exp — set up the repo, ran the full flow (prepare-release → merge PR → auto-create release), and confirmed everything works. Evidence posted as a comment on PR #3023. Checklist • rel-* PR is mergedmain tip) to avoid including unreleased changes--notes-start-tag for correct release noteschilly-france-44439
04/30/2026, 5:26 PM