# Create New Release

> Create and push a new semver release tag. Asks for release type (patch/minor/major), validates commit exists on remote, bumps version, and pushes the tag. Use when this capability is needed.

- Skill: `tomevault-io/create-new-release` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/create-new-release`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/create-new-release/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/create-new-release

---


# Create New Release

Create and push a new semantic version release tag.

## Steps

1. **Ask release type**: Use AskUserQuestion to ask if this is a patch, minor, or major release.

2. **Fetch latest tags from remote**:
   ```bash
   git fetch --tags origin
   ```

3. **Get the latest semver tag** (assumes `v` prefix like `v1.2.3`):
   ```bash
   git tag --sort=-version:refname -l 'v*' | head -1
   ```

4. **Parse and bump version** based on user selection:
   - **patch**: `v1.2.3` → `v1.2.4`
   - **minor**: `v1.2.3` → `v1.3.0`
   - **major**: `v1.2.3` → `v2.0.0`

5. **Verify META.json version matches the new tag**:
   Read `META.json` and check that both `version` and `provides.pg_stat_ch.version` match the new version (without the `v` prefix). If they don't match, abort and tell the user to update `META.json` first — PGXN uses this file for the release version.

6. **Validate current commit exists on remote**:
   ```bash
   git fetch origin
   git branch -r --contains HEAD
   ```
   If no remote branch contains HEAD, abort with an error asking the user to push their commits first.

7. **Create and push the tag**:
   ```bash
   git tag -a <new_version> -m "Release <new_version>"
   git push origin <new_version>
   ```

8. **Report success** with the new tag name.

## Version Parsing

Parse version from tag like `v1.2.3`:
- Extract numbers after `v` prefix
- Split by `.` to get major, minor, patch components
- Handle edge case: if no tags exist, start at `v0.1.0`

## Error Handling

- If current commit is not on remote: "Current commit is not pushed to remote. Please push your changes first."
- If tag already exists: "Tag already exists. Please check existing tags."
- If git operations fail: Report the specific error.

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/clickhouse) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-11 -->

