This is an automated email from the ASF dual-hosted git repository.

jerryshao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 576d7d8084 [MINOR] docs: fix skill frontmatter position and document 
vote + GitHub release stages (#13640)
576d7d8084 is described below

commit 576d7d8084f80966ba50c73dd791752d05abd450
Author: Bharath Krishna <[email protected]>
AuthorDate: Wed Oct 7 23:39:55 2026 -0700

    [MINOR] docs: fix skill frontmatter position and document vote + GitHub 
release stages (#13640)
    
    ### What changes were proposed in this pull request?
    
    **Frontmatter position** — in both `gravitino-release/SKILL.md` and
    `trino-test/SKILL.md` the `---` block sat after the licence header, so
    no metadata was parsed. Moved to line 1, licence immediately after.
    
    **Release skill content** — added the vote phase (`[VOTE]` /
    `[RESULT][VOTE]`, the 72-hour minimum, the binding-vote rules) and the
    GitHub release page, neither of which appeared anywhere. Recorded that
    `finalize` needs `-r` set to the RC that passed, since
    `release-util.sh:141` derives it as (rc tag count + 1). Added `finalize`
    to the `GPG_KEY` / `GPG_PASSPHRASE` row — `release-build.sh:75` checks
    both before dispatching any stage.
    
    ### Why are the changes needed?
    
    Part of #13637
    
    Neither skill exposed a `description`, so Claude never matched either to
    a request and the `allowed-tools: Bash` grant never applied. The release
    skill also stopped short of the steps that actually gate a release.
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    Installed each skill and read back the description Claude Code parsed:
    
    ```
    before => <!--
    after  => Apache Gravitino release manager — guides through the full staged 
release pipeline stage by stage
    ```
    
    Frontmatter is read only when `---` is the first line; otherwise the
    whole file is treated as body content. The skill still answers to its
    directory name, so the symptom is missing metadata rather than a missing
    command.
    
    `agent-skills/` is not in the RAT excludes, so the reorder was checked
    with Apache RAT plus an unlicensed control file:
    
    ```
    Apache Licensed: 2
     !????? control-no-license.md
      AL    gravitino-release-SKILL.md
      AL    trino-test-SKILL.md
    ```
    
    Vote rules follow the [ASF release
    policy](https://www.apache.org/legal/release-policy.html#release-approval).
---
 agent-skills/gravitino-release/SKILL.md | 75 +++++++++++++++++++++++++++++----
 agent-skills/trino-test/SKILL.md        | 16 +++----
 2 files changed, 74 insertions(+), 17 deletions(-)

diff --git a/agent-skills/gravitino-release/SKILL.md 
b/agent-skills/gravitino-release/SKILL.md
index d9fd67c12c..da0e185de5 100644
--- a/agent-skills/gravitino-release/SKILL.md
+++ b/agent-skills/gravitino-release/SKILL.md
@@ -1,3 +1,10 @@
+---
+name: gravitino-release
+description: Apache Gravitino release manager — guides through the full staged 
release pipeline stage by stage
+argument-hint: "[branch] (e.g. branch-1.2 | mock | status)"
+allowed-tools: Bash
+---
+
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -15,13 +22,6 @@
   limitations under the License.
 -->
 
----
-name: gravitino-release
-description: Apache Gravitino release manager — guides through the full staged 
release pipeline stage by stage
-argument-hint: "[branch] (e.g. branch-1.2 | mock | status)"
-allowed-tools: Bash
----
-
 # 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/`.
@@ -48,9 +48,11 @@ You are the Apache Gravitino release manager agent. Your 
role is to guide the us
 | 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`.
 
@@ -231,8 +233,8 @@ Check each required environment variable before running any 
stage. If unset, ask
 |----------|---------------------|-------|
 | `ASF_USERNAME` | tag, package, publish, finalize | Apache committer username 
|
 | `ASF_PASSWORD` | tag, package, publish, finalize | Apache committer password 
|
-| `GPG_KEY` | package, publish | GPG key ID (typically `[email protected]`) |
-| `GPG_PASSPHRASE` | package, publish | GPG key passphrase |
+| `GPG_KEY` | package, publish, finalize | GPG key ID (typically 
`[email protected]`) |
+| `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 |
@@ -449,6 +451,25 @@ export MOCK_STAGE_DELAY=180   # stage sleeps 3 minutes 
before completing
 
 ---
 
+### Vote (between docker and finalize)
+
+No script covers this stage.
+
+**Send `[VOTE]` to [email protected]** once the RC artifacts, PyPI 
staging, Maven staging and Docker images are all verified. The mail must carry 
the git tag and commit, the `dist/dev` URL, the staging repository, the KEYS 
URL, and how to verify signatures.
+
+**The rules** ([ASF release 
policy](https://www.apache.org/legal/release-policy.html#release-approval)):
+- Open at least **72 hours**. A shorter period must be justified in the mail.
+- Needs **at least 3 binding +1**, and more binding +1 than binding -1. 
Binding means PMC member; non-binding votes are encouraged and tallied 
separately.
+- Releases **may not be vetoed** — a single -1 does not by itself block the 
vote. In practice, if anyone reports a real problem the release manager cancels 
the vote rather than carrying it.
+
+**On a -1:** answer the technical point on the thread. If it holds, cancel, 
fix, and cut the next RC — the RC number increments, the version does not.
+
+**When it passes**, send `[RESULT][VOTE]` as a **new thread**, not a reply. 
List every voter, marked binding or non-binding, and give the tally.
+
+**Then note which RC passed.** `finalize` needs `-r` set to that RC, and the 
RC number is *not* auto-detected correctly: `release-util.sh` derives it as the 
count of existing `v<version>-rc*` tags plus one, which after rc1, rc2 and rc3 
gives 4. A release that needed more than one RC will finalize against a 
`dist/dev` path that never existed unless `-r` is passed explicitly.
+
+---
+
 ### Stage 6: finalize
 
 > ⚠️ **Irreversible.** Always get explicit user confirmation before running.
@@ -534,6 +555,42 @@ The `--state-key docker-final` flag causes 
`publish-docker.sh` to write `docker-
 
 ---
 
+### Stage 9: github-release
+
+Every past release has a GitHub release page carrying the same artifacts as 
`dist/release`. Nothing in `dev/release/` creates it.
+
+**Independent of the `svn mv`.** It needs only the pushed `v{VERSION}` tag and 
the RC artifacts, so it can be done while waiting on PMC karma for 
`dist/release`.
+
+**Artifacts:** export the RC directory into a clean directory and upload 
exactly what is in it. Do not glob the release working directory — that also 
holds the Python sdists, which are not part of the ASF distribution.
+
+```bash
+mkdir -p ~/v{VERSION}-assets && cd ~/v{VERSION}-assets
+svn export --force 
https://dist.apache.org/repos/dist/dev/gravitino/v{VERSION}-rc{RC} .
+ls | wc -l                   # note this count; the release page must end up 
matching it
+shasum -a 512 -c *.sha512    # all must print OK
+```
+
+**Create it:**
+```bash
+gh release create "v{VERSION}" -R apache/gravitino \
+  --title "Apache Gravitino {VERSION} Release Notes" \
+  --notes-file notes.md \
+  *.tar.gz *.tar.gz.asc *.tar.gz.sha512
+```
+
+Use `--draft` if the release notes are still in review, then `gh release edit 
"v{VERSION}" --draft=false` to publish.
+
+**Verify the asset count, do not trust the exit code:**
+```bash
+gh release view "v{VERSION}" -R apache/gravitino --json assets --jq 
'.assets|length'   # must match the dist count above
+```
+
+A partial upload still reports success and leaves the release missing its 
signatures. If assets are missing, use `gh release upload --clobber` rather 
than re-running `create`, which fails on an existing release.
+
+**Body:** the same content as the release-note stage, plus a `**Full 
Changelog:** 
[v{PREV}...v{VERSION}](https://github.com/apache/gravitino/compare/v{PREV}...v{VERSION})`
 line and a `## Credits` section listing contributors as `@login`.
+
+---
+
 ## Error Handling
 
 When a script fails:
diff --git a/agent-skills/trino-test/SKILL.md b/agent-skills/trino-test/SKILL.md
index 0b9fec5fbb..c5520cee87 100644
--- a/agent-skills/trino-test/SKILL.md
+++ b/agent-skills/trino-test/SKILL.md
@@ -1,3 +1,11 @@
+---
+name: trino-test
+description: Run, debug, and manage Trino integration tests for the Gravitino 
project.
+argument-hint: "[command or intent] (e.g. run all | test mysql | trino 446 | 
add test)"
+allowed-tools: Bash
+disable-model-invocation: false
+---
+
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
@@ -17,14 +25,6 @@
   under the License.
 -->
 
----
-name: trino-test
-description: Run, debug, and manage Trino integration tests for the Gravitino 
project.
-argument-hint: "[command or intent] (e.g. run all | test mysql | trino 446 | 
add test)"
-allowed-tools: Bash
-disable-model-invocation: false
----
-
 # /trino-test — Trino Integration Test Skill
 
 This skill helps you **run, debug, and manage Trino integration tests** for 
the **Gravitino** project.

Reply via email to