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.

来源信息

仓库
OpenHands/OpenHands-CLI
最近来源活动
2026年4月6日 13:25
检测到的 SKILL.md 语言
英语
星标
263
分支
120

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
2 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
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
在 GitHub 查看