diff --git a/.cursor/skills/gcnv-mcp-release/SKILL.md b/.cursor/skills/gcnv-mcp-release/SKILL.md new file mode 100644 index 0000000..5c5712d --- /dev/null +++ b/.cursor/skills/gcnv-mcp-release/SKILL.md @@ -0,0 +1,145 @@ +--- +name: gcnv-mcp-release +description: >- + Release gcnv-mcp-server to npm via GitHub releases. Covers version bump draft + PRs, release notes from past GitHub format, pre-release MCP/Gemini testing, + publishing workflow, and post-release verification. Use when the user asks to + release, bump version, publish to npm, or cut a gcnv-mcp-server tag. +--- + +# gcnv-mcp-server Release + +End-to-end release for [NetApp/gcnv-mcp-server](https://github.com/NetApp/gcnv-mcp-server). + +**Hard rule:** Never commit or push directly to `main`. Always use draft PRs. + +## Quick checklist + +``` +- [ ] Decide version (semver; patch for fixes, minor for features) +- [ ] Draft PR: bump package.json + package-lock.json version +- [ ] CI green on PR; get review if required +- [ ] Merge version-bump PR to main +- [ ] Draft release notes (see template below) +- [ ] Create GitHub release (tag vX.Y.Z, publish — triggers npm) +- [ ] Verify npm + GitHub Actions publish job +``` + +## How publishing works + +- Workflow: `.github/workflows/release-publish.yml` +- Trigger: GitHub **Release published** (not draft → published) +- Action: checks out the release tag, runs `npm publish --access public --provenance` +- **Tag must match version:** tag `v1.2.1` ↔ `"version": "1.2.1"` in `package.json` on that tag + +## Step 1 — Gather changes since last release + +```bash +gh release view --repo NetApp/gcnv-mcp-server # latest tag +gh pr list --repo NetApp/gcnv-mcp-server --state merged --base main --limit 20 +gh log vPREVIOUS..origin/main --oneline +``` + +Summarize **user-facing** changes only (tools, config, docs, breaking removals). + +## Step 2 — Version bump (draft PR) + +Branch from latest `origin/main`: + +```bash +git fetch origin main +git checkout -b release/X.Y.Z origin/main +npm version X.Y.Z --no-git-tag-version +npm run build && npm test +git add package.json package-lock.json +git commit -m "chore: bump version to X.Y.Z" +git push -u origin release/X.Y.Z +gh pr create --draft --base main --title "chore: release X.Y.Z" --body "$(cat <<'EOF' +## Summary +- Bump version to X.Y.Z for npm release + +## Test plan +- [ ] CI passes (lint, build, tests, security audit) +- [ ] Version in package.json matches intended tag vX.Y.Z + +EOF +)" +``` + +Mark PR ready for review when CI is green; merge after approval. + +## Step 3 — Release notes + +Match recent patch/minor style: `## What's Changed` + bullet list (see [release-notes-examples.md](release-notes-examples.md)). + +**Patch (x.y.Z):** short bullets, no long overview sections. + +**Minor (x.Y.0):** optional title line + Highlights subsection (v1.1.0 style). + +Draft notes in the PR body or paste into GitHub when creating the release. + +## Step 4 — Create GitHub release + +After the version-bump PR merges to `main`: + +```bash +gh release create vX.Y.Z \ + --repo NetApp/gcnv-mcp-server \ + --target main \ + --title "vX.Y.Z" \ + --notes "$(cat <<'EOF' +## What's Changed + +- ... +EOF +)" +``` + +Use `--draft` first if the user wants to review before publishing. **Publishing** (non-draft) triggers npm. + +## Step 5 — Verify + +```bash +gh run list --repo NetApp/gcnv-mcp-server --workflow "Publish on release" --limit 3 +npm view gcnv-mcp-server version +gh release view vX.Y.Z --repo NetApp/gcnv-mcp-server +``` + +## Pre-release testing (recommended) + +Run when the release includes MCP schema/handler changes. + +### Cursor MCP + +- Local build: `npm run build` +- Point `~/.cursor/mcp.json` at repo `build/index.js` +- Test affected tools against a GCNV project (e.g. list/get for backup, snapshot, replication, storage pool) + +### Gemini CLI (Vertex AI) + +Personal OAuth often fails; use gcloud ADC + Vertex: + +```bash +export GEMINI_CLI_HOME=/tmp/gemini-vertex-home +export GOOGLE_GENAI_USE_VERTEXAI=true +export GOOGLE_CLOUD_PROJECT= +export GOOGLE_CLOUD_LOCATION=us-central1 +# settings: selectedType vertex-ai, model gemini-2.5-flash +gemini # invoke MCP tools from PR test plan +``` + +### CI security audit + +If `npm audit` fails on transitive deps, prefer **scoped** overrides in `package.json` (e.g. under `glob → minimatch → brace-expansion`), not global overrides. + +## Version guidance + +| Change type | Bump | Example | +|-------------|------|---------| +| Bug fix, schema fix, audit override | patch | 1.2.0 → 1.2.1 | +| New tools or features | minor | 1.2.0 → 1.3.0 | +| Breaking API/tool removal | major | 1.x → 2.0.0 | + +## Additional resources + +- Past release note formats: [release-notes-examples.md](release-notes-examples.md) diff --git a/.cursor/skills/gcnv-mcp-release/release-notes-examples.md b/.cursor/skills/gcnv-mcp-release/release-notes-examples.md new file mode 100644 index 0000000..c05c1f2 --- /dev/null +++ b/.cursor/skills/gcnv-mcp-release/release-notes-examples.md @@ -0,0 +1,47 @@ +# Release notes examples (gcnv-mcp-server) + +Copied from past GitHub releases. Prefer the **v1.2.0** style for patch releases. + +## v1.2.0 (patch/minor — preferred for small releases) + +```markdown +## What's Changed + +- Expanded setup documentation for Cursor, Claude Code, Codex CLI, Gemini CLI, and Antigravity/AGY clients. +- Added per-request Google access token support for HTTP/SSE transports, including configurable auth header support with `GCNV_AUTH_HEADER`. +- Added optional ONTAP Knowledge Graph discovery integration via `ONTAP_KG_URL`, with fallback to the bundled ONTAP API index. +- Removed delete tools for GCNV and ONTAP resources. +``` + +## v1.2.1 draft (template for schema-validation patch) + +```markdown +## What's Changed + +- Fixed MCP output schema validation for backup, replication, snapshot, storage pool, and quota rule tools so structured responses match declared Zod schemas. +- Hardened protobuf timestamp formatting to reject missing or invalid `seconds` values instead of emitting Unix epoch timestamps. +- Scoped npm audit override for `brace-expansion` to the `glob → minimatch` dependency chain only. +``` + +## v1.1.0 (minor with highlights) + +```markdown +## v1.1.0 - ONTAP Mode Support + +This release adds ONTAP Expert Mode support for Google Cloud NetApp Volumes MCP Server. + +### Highlights + +- Added support for creating FLEX Unified storage pools with `mode: ONTAP`. +- Added ONTAP Expert Mode tools for supported ONTAP REST operations through the GCNV control plane. +- Added `ontap_discover` to search bundled ONTAP REST endpoints before execution. +- Added `ontap_execute` for discovered ONTAP REST API calls. +``` + +## v1.0.2 (feature-heavy minor) + +Uses `## Overview` paragraph, then `## New Features` with `###` subsections and **Tools:** lines naming affected MCP tools. + +## v1.0.1 / v1.0.0 + +v1.0.1 was one line. v1.0.0 used a full first-release overview with `## What's included` tool categories.