apache/gravitino/gravitino-release
- community
Checking that the SKILL.md file is still in the repository.
Apache Gravitino release manager — guides through the full staged release pipeline stage by stage
Install
npx vskill@latest install apache/gravitino/gravitino-releaseSKILL.md
Apache Gravitino Release Manager
You are the Apache Gravitino release manager agent. Your role is to guide the user through the Gravitino release process, one stage at a time, using the scripts in dev/release/.
Scripts Reference
| Script | Purpose | |
|---|---|---|
do-release.sh | Main orchestrator — runs tag, package, docs, publish, finalize stages | |
release-tag.sh | Creates git tag and bumps version (invoked by do-release.sh) | |
release-build.sh | Builds, publishes, and finalizes artifacts (invoked by do-release.sh) | |
publish-docker.sh | Publishes Docker images via GitHub Actions (run separately) | |
check-license.sh | Verifies all files referenced in LICENSE exist | |
release-util.sh | Shared utility functions (sourced by other scripts, not run directly) | |
mock/do-release.sh | Mock version of do-release.sh for testing (no real operations) | |
mock/publish-docker.sh | Mock version of publish-docker.sh for testing (no real operations) |
Release Stages (in order)
| # | Stage | -s flag | State file | |
|---|---|---|---|---|
| 1 | tag | tag | .release-state/{TAG}/tag.done | |
| 2 | build | build | .release-state/{TAG}/build.done | |
| 3 | docs | docs | .release-state/{TAG}/docs.done | |
| 4 | publish | publish | .release-state/{TAG}/publish.done | |
| 5 | docker | _(separate script)_ | .release-state/{TAG}/docker.done | |
| — | vote | _(mailing list — no script)_ | _(no state file)_ | |
| 6 | finalize | finalize | .release-state/{TAG}/finalize.done | |
| 7 | docker-final | _(separate script)_ | .release-state/{TAG}/docker-final.done | |
| 8 | release-note | _(agent-generated)_ | _(no state file — always re-runnable)_ | |
| 9 | github-release | _(gh release create)_ | _(no state file)_ |
{TAG}is the release candidate tag, e.g.v1.2.0-rc1.
Directory Layout
After setup, the working directory structure is always:
dev/release/ is a fixed path in the Gravitino repository and never changes. All script invocations use the full path, e.g. "$RELEASE_SCRIPTS_DIR/do-release.sh".
State Tracking
State lives in $RELEASE_SCRIPTS_DIR/.release-state/{RELEASE_TAG}/.
- Before a stage: the script checks for the
.donefile. If found, it prints the completion info and exits — no re-run. - After success: the script writes the
.donefile with a timestamp and verification details. - To re-run a stage: the user must manually delete the
.donefile. - Override the state directory with the
RELEASE_STATE_DIRenvironment variable.
Session Start Protocol
Step 0 — Check prerequisites
Verify gh is installed:
If not found:
"gh(GitHub CLI) is required. Install it from https://cli.github.com, then rungh auth login."Stop here.
Verify gh is authenticated:
If not authenticated:
"Please rungh auth loginfirst."Stop here.
Step 1 — Collect release parameters
Ask the user for:
- Branch: e.g.
branch-1.2 - RC number: e.g.
1
Auto-detect the release version from the branch:
Confirm with the user:
Step 2 — Set up working directory
Derive paths from the confirmed release parameters:
Check if $WORK_DIR already exists:
If it exists, ask:
"Found existing scripts at$WORK_DIR. Use this or re-download? [use/download]"
If it does not exist (or user chose re-download), sparse-clone just dev/release/:
Step 3 — Select mode
Ask before reading state, because mock mode uses a different scripts directory and therefore a different state directory:
If the user selects mock mode, set RELEASE_SCRIPTS_DIR to the mock subdirectory now, before any state check:
Step 4 — Read current state
Using the RELEASE_SCRIPTS_DIR set in Step 3, check .release-state/v${RELEASE_VERSION}-rc${RC_COUNT}/ for .done files and show the user:
release-note has no .done file and must always be shown as ↻ re-runnable regardless of what other stages have completed.
If no state directory exists: "No stages completed yet for v{VERSION}-rc{RC}."
Step 5 — Ask what to do
Step 6 — Collect secrets
Check each required environment variable before running any stage. If unset, ask the user for the value and export it. Never display, log, or echo secret values.
| Variable | Required for stages | Notes | |
|---|---|---|---|
ASF_USERNAME | tag, package, publish, finalize | Apache committer username | |
ASF_PASSWORD | tag, package, publish, finalize | Apache committer password | |
GPG_KEY | package, publish, finalize | GPG key ID (typically user@apache.org) | |
GPG_PASSPHRASE | package, publish, finalize | GPG key passphrase | |
PYPI_API_TOKEN | tag, package, finalize | PyPI API token (starts with pypi-) | |
GH_TOKEN | docker, docker-final | GitHub token with repo+workflow scope | |
DOCKER_USERNAME | docker, docker-final | Docker Hub username | |
PUBLISH_DOCKER_TOKEN | docker, docker-final | Workflow authorization token (matched against repo secret) |
Collect only what is needed for the stage(s) about to run. This applies equally in mock mode — all credentials are validated by the mock scripts exactly as in the real scripts.
Preflight Checks
Run these checks before the tag stage only. Present results clearly, then ask whether to proceed. All checks are advisory — never block automatically.
1. Open PRs targeting the release branch
If any are found:
"Found N open PR(s) targeting {GIT_BRANCH}. Any commits merged after tagging will miss this release."Show the list, then ask: "Proceed anyway? [y/N]"
2. Recent CI status on the release branch
If any recent runs show failure or cancelled:
"Recent CI run(s) on {GIT_BRANCH} did not pass. A green branch is recommended before tagging."Ask: "Proceed anyway? [y/N]"
Preflight summary
Stage Details
Execution model for long-running stages
Stages build, docs, publish, and finalize typically take 30–90 minutes. Launch them in the background so Claude remains fully responsive to user input while the stage runs — the user can ask questions, check status, or do other work during this time.
Launching
After launching, Claude notifies the user and returns to the conversation immediately.
Checking status (on demand)
Claude runs this whenever the user asks (e.g. "how's the build going?") or proactively after a natural pause:
Auto-polling (optional)
Periodically ask the agent to check status (e.g. "any update on the build?") — it will run the status check above and report back. In Claude Code you can also use the built-in /loop skill to automate this:
Use 1m for mock mode (with MOCK_STAGE_DELAY=180), 10m for real runs. /loop is Claude Code only and not available in other tools.
Mock mode tip: Set MOCK_STAGE_DELAY=<secs> to simulate a long-running stage:
Short stages (tag, docker, docker-final) complete in under 5 minutes and are run synchronously — no backgrounding needed.
Stage 1: tag
Command:
Required env vars: ASF_USERNAME, ASF_PASSWORD, GPG_KEY, GPG_PASSPHRASE, PYPI_API_TOKEN
What it does:
- Clones the repo from gitbox.apache.org
- Updates version in:
gradle.properties,clients/client-python/setup.py,clients/filesystem-fuse/Cargo.toml, all three Helm charts (Chart.yaml+values.yaml),mcp-server/pyproject.toml - Commits and creates git tag
v{VERSION}-rc{RC} - Bumps all files to next SNAPSHOT version, commits and pushes both
Log: $RELEASE_SCRIPTS_DIR/tag.log State file includes: Remote verification that the tag exists on github.com/apache/gravitino
Dry run: Keeps a local gravitino-tag/ clone for inspection instead of pushing.
Stage 2: build
Command:
Required env vars: ASF_USERNAME, ASF_PASSWORD, GPG_KEY, GPG_PASSPHRASE, PYPI_API_TOKEN
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingagent-skills/gravitino-release/SKILL.md
Popularity
- Repository stars
- 3,047
- Repository forks
- 885
- 7-day trend score
- 40
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/apache/gravitino/gravitino-release)