From enterspeed
Push a prepared git flow release branch and open a PR to master. Use when the user says "publish the release", "push the release branch", "open the PR", or after gitflow-release-start completes. Requires the release branch to already exist locally with the version commit. Follow up with gitflow-release-finish once the master PR is merged.
How this skill is triggered — by the user, by Claude, or both
Slash command
/enterspeed:gitflow-release-publishThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Pushes the local release branch to GitHub and opens a PR to master (production merge). The back-merge to develop happens later in **gitflow-release-finish**, after the master PR is merged — this ensures both branches share the same merge history and avoids conflicts caused by divergent commit SHAs.
Pushes the local release branch to GitHub and opens a PR to master (production merge). The back-merge to develop happens later in gitflow-release-finish, after the master PR is merged — this ensures both branches share the same merge history and avoids conflicts caused by divergent commit SHAs.
Run gitflow-release-start first to create the branch and version commit.
Stop on any error — if any step fails unexpectedly, report the full error output to the user and do not proceed to the next step.
Ask the user for the version being released (e.g. 1.53.0). Store it in a shell variable and validate the format:
VERSION="<version>"
if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Invalid version format. Must be N.N.N (e.g. 1.53.0, not v1.53.0)"
exit 1
fi
Reject and re-prompt if invalid. Use $VERSION throughout all subsequent steps.
Verify the GitHub CLI is installed:
gh --version
If not installed, stop and tell the user:
"GitHub CLI (
gh) is not installed. Install it withbrew install ghand authenticate withgh auth loginfirst."
Verify the release branch exists locally:
git branch --list "release/$VERSION"
If it returns nothing, stop and tell the user:
"No local branch
release/$VERSIONfound. Run gitflow-release-start with version$VERSIONfirst."
git push origin "release/$VERSION"
If this fails, stop and report the error.
Find the pipeline file name to reference in the PR body:
PIPELINE_FILE=$(ls azure-pipelines.yaml 2>/dev/null || ls azure-pipelines.yml 2>/dev/null || ls azure-pipeline.yaml 2>/dev/null || ls azure-pipeline.yml 2>/dev/null)
If neither file is found, use fallback with brief warning:
if [ -z "$PIPELINE_FILE" ]; then
echo "WARNING: Pipeline file not found in current directory."
PIPELINE_FILE="azure-pipeline.yaml"
fi
Open the production merge PR:
gh pr create \
--base master \
--head "release/$VERSION" \
--title "Release $VERSION" \
--body "## Release $VERSION
Bumps version to \`$VERSION\` in \`$PIPELINE_FILE\`.
### Checklist
- [ ] Version variables updated correctly in \`$PIPELINE_FILE\`
- [ ] CI passes on the release branch
- [ ] Reviewed and approved"
Capture the PR URL from the command output. Extract the PR number from the URL (the last path segment).
If this fails, stop and report the error.
Show the user the PR URL, then say:
"Master PR is open:
$MASTER_PR_URL(#$MASTER_PR_NUMBER)Once it's merged, run gitflow-release-finish with version
$VERSIONand master PR#$MASTER_PR_NUMBER. The back-merge to develop will be handled as part of the finish step."
Before the PR is merged: close the PR on GitHub, then delete the remote and local release branch:
git push origin --delete "release/$VERSION"
git branch -D "release/$VERSION"
The release is fully undone with no impact on master or develop.
npx claudepluginhub enterspeedhq/agent-skills --plugin enterspeedAutomates Git release: invokes milestone for squash/tag, rebases to main, force-pushes branch/tag, confirms merge to main. Triggers on 'release' keywords.
Guides Git release workflow: create branches, sync/rebase main, run /gate checks, push code, open GitHub PRs, handle hotfixes. Use when ready to ship.
Publishes the current branch by validating changes, committing, pushing, and creating/updating a PR with optional automerge.