Skip to main content

cli-release

This skill should be used when the user asks to "release the CLI", "prepare a CLI release", "publish a new CLI version", "cut a CLI release", "do a release", "bump the CLI version", or mentions the CLI release checklist or release process. Guides through the full OpenHands CLI release workflow from version bump to binary publication, emphasizing human checkpoints.

Quellinformationen

Repository
OpenHands/OpenHands-CLI
Letzte Quellaktivität
6. April 2026 um 13:25
Erkannte Sprache von SKILL.md
Englisch
Sterne
263
Forks
120

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
2 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
cli-release
description
This skill should be used when the user asks to "release the CLI", "prepare a CLI release", "publish a new CLI version", "cut a CLI release", "do a release", "bump the CLI version", or mentions the CLI release checklist or release process. Guides through the full OpenHands CLI release workflow from version bump to binary publication, emphasizing human checkpoints.
# CLI Release Guide This skill walks through the OpenHands CLI release process step by step. > **🚨 CRITICAL**: NEVER merge the release PR, create/push tags, or publish > a GitHub release without the human's explicit approval. Release is the > last line of human defense. Always present the current status and ask for > confirmation before performing any irreversible action. > **⚠️ Tag format**: This project uses tags **without** a `v` prefix > (e.g., `1.13.0`, not `v1.13.0`). ## Phase 1: Trigger the Version Bump Workflow Determine the target version (SemVer `X.Y.Z`). Then trigger the `bump-version.yml` workflow, which creates a branch and draft PR automatically. ### Via GitHub UI Navigate to <https://github.com/OpenHands/OpenHands-CLI/actions/workflows/bump-version.yml>, click **Run workflow**, enter the version (e.g., `1.14.0`), and run it. ### Via GitHub API ```bash curl -X POST \ -H "Authorization: token $GITHUB_TOKEN" \ -H "Accept: application/vnd.github+json" \ "https://api.github.com/repos/OpenHands/OpenHands-CLI/actions/workflows/bump-version.yml/dispatches" \ -d '{ "ref": "main", "inputs": { "version": "<version>" } }' ``` The workflow will: 1. Validate version format (`X.Y.Z`) 2. Create branch `bump-version-<version>` 3. Update version in `pyproject.toml` 4. Regenerate `uv.lock` 5. Update snapshot tests (version appears in splash screen SVGs) 6. Open a draft PR titled **"Bump version to \<version\>"** Once the workflow completes, retrieve the PR number for later phases: ```bash gh pr list --repo OpenHands/OpenHands-CLI \ --head "bump-version-<version>" --json number,title,url ``` ## Phase 2: Wait for CI — Tests Must Pass The bump PR triggers the standard CI suite. **All checks must pass.** Monitor status: ```bash gh pr checks <PR_NUMBER> --repo OpenHands/OpenHands-CLI ``` Key checks to verify: - Lint - Unit / integration tests - Snapshot tests (updated by the bump workflow) - Binary build ### ⏸ Checkpoint — Human Judgment on Failures Decide with the team whether each failure is: - **Blocking** — must fix before release - **Known / pre-existing** — acceptable to release with a follow-up issue - **Flaky** — re-run the workflow Re-run failed jobs: ```bash gh run list --repo OpenHands/OpenHands-CLI \ --branch "bump-version-<version>" --limit 5 gh run rerun <RUN_ID> --repo OpenHands/OpenHands-CLI --failed ``` ## Phase 3: Tag the Release > **🚨 STOP — Do NOT tag without explicit human approval.** > Present the CI status summary and ask the human to confirm. Tag the latest commit on the version bump branch. **No `v` prefix.** ```bash git fetch origin git checkout bump-version-<version> git reset --hard origin/bump-version-<version> # ensure we're at latest # verify tag doesn't already exist if git rev-parse <version> >/dev/null 2>&1; then echo "Error: Tag <version> already exists" exit 1 fi git tag <version> git push origin --tags ``` Pushing the tag triggers two automated workflows: - **`cli-build-binary-and-optionally-release.yml`** — builds platform binaries and creates a **draft** GitHub release with assets - **`pypi-release.yml`** — builds and publishes the `openhands` package to PyPI ## Phase 4: Merge the PR > **🚨 STOP — Do NOT merge without explicit human approval.** Wait for CI to complete after tagging. Verify all checks passed, then merge: ```bash gh pr checks <PR_NUMBER> --repo OpenHands/OpenHands-CLI gh pr merge <PR_NUMBER> --repo OpenHands/OpenHands-CLI --merge ``` ## Phase 5: Edit and Publish the GitHub Release > **🚨 STOP — Do NOT publish without explicit human approval.** > Publishing finalises the release for users. Navigate to <https://github.com/OpenHands/OpenHands-CLI/releases> and edit the draft release created by CI: 1. Click **Auto-generate release notes** (or write custom notes) 2. Review the notes 3. Click **Publish release** ### ⏸ Checkpoint — Verify Release Assets After publishing, confirm all platform binaries were uploaded: | Platform | Asset name | |----------|-----------| | Linux x86_64 | `openhands-linux-x86_64` | | Linux ARM64 | `openhands-linux-arm64` | | macOS Apple Silicon | `openhands-macos-arm64` | | macOS Intel | `openhands-macos-intel` | ```bash gh release view <version> --repo OpenHands/OpenHands-CLI --json assets \ --jq '.assets[].name' ``` ### ⏸ Checkpoint — Verify PyPI Publication ```bash curl -s -o /dev/null -w "openhands: %{http_code}\n" \ "https://pypi.org/pypi/openhands/<version>/json" ``` Should return `200`. Allow a few minutes for PyPI indexing. ## Phase 6: Update Install Website After publishing the release, wait a couple of minutes. The `update-install-website.yml` workflow automatically opens a PR in [install-openhands-website](https://github.com/All-Hands-AI/install-openhands-website). ```bash gh pr list --repo All-Hands-AI/install-openhands-website \ --search "update-version-<version>" --json number,title,url ``` Approve and merge the PR so users get the latest version via: ```bash curl -fsSL https://install.openhands.dev/install.sh | sh ``` If the automated PR was not created, trigger the workflow manually: ```bash curl -X POST \ -H "Authorization: token $GITHUB_TOKEN" \ -H "Accept: application/vnd.github+json" \ "https://api.github.com/repos/OpenHands/OpenHands-CLI/actions/workflows/update-install-website.yml/dispatches" \ -d '{ "ref": "main", "inputs": { "version": "<version>" } }' ``` ## Phase 7: Post-Release — Notify the Team Compose a Slack message for the human to post: ``` 🚀 *CLI v<version> released!* • PyPI: https://pypi.org/project/openhands/<version>/ • Release: https://github.com/OpenHands/OpenHands-CLI/releases/tag/<version> • Install website PR: https://github.com/All-Hands-AI/install-openhands-website/pulls ``` See `references/post-release-checklist.md` for additional verification steps and troubleshooting. ## Quick Reference — Full Checklist - [ ] Trigger `bump-version.yml` with target version - [ ] All CI checks pass on the bump PR - [ ] **🚨 Get human approval**, then tag the release (no `v` prefix) - [ ] **🚨 Get human approval**, then merge the PR - [ ] **🚨 Get human approval**, then publish the GitHub release - [ ] Verify platform binaries are attached to the release - [ ] Verify `openhands` package is available on PyPI - [ ] Approve and merge the install website PR - [ ] Notify the team on Slack
Auf GitHub ansehen