--- name: create-new-release description: 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. --- # 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 -m "Release " git push origin ``` 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.