---
name: release
description: Bump version, tag, and prepare for next development cycle
version: 1.0.0
author: Taylor Eernisse
category: automation
tags: ["release", "versioning", "semver", "git"]
---
# Release

Automate SemVer version bumps for the `lore` CLI.

## Invocation

```
/release <type>
```

Where `<type>` is one of:
- **major** — breaking changes (0.5.0 -> 1.0.0)
- **minor** — new features (0.5.0 -> 0.6.0)
- **patch** / **hotfix** — bug fixes (0.5.0 -> 0.5.1)

If no type is provided, ask the user.

## Procedure

Follow these steps exactly. Do NOT skip any step.

### 1. Determine bump type

Parse the argument. Accept these aliases:
- `major`, `breaking` -> MAJOR
- `minor`, `feature`, `feat` -> MINOR
- `patch`, `hotfix`, `fix` -> PATCH

If the argument doesn't match, ask the user to clarify.

### 2. Read current version

Read `Cargo.toml` and extract the `version = "X.Y.Z"` line. Parse into major, minor, patch integers.

### 3. Compute new version

- MAJOR: `(major+1).0.0`
- MINOR: `major.(minor+1).0`
- PATCH: `major.minor.(patch+1)`

### 4. Check preconditions

Run `git status` and `git log --oneline -5`. Show the user:
- Current version: X.Y.Z
- New version: A.B.C
- Bump type: major/minor/patch
- Working tree status (clean or dirty)
- Last 5 commits (so they can confirm scope)

If the working tree is dirty, warn: "You have uncommitted changes. They will NOT be included in the release tag. Continue?"

Ask the user to confirm before proceeding.

### 5. Update Cargo.toml

Edit the `version = "..."` line in Cargo.toml to the new version.

### 6. Update Cargo.lock

Run `cargo check` to update Cargo.lock with the new version. This also verifies the project compiles.

### 7. Commit the version bump

```bash
git add Cargo.toml Cargo.lock
git commit -m "release: v{NEW_VERSION}"
```

### 8. Tag the release

```bash
git tag v{NEW_VERSION}
```

### 9. Report

Print a summary:
```
Release v{NEW_VERSION} created.

  Previous: v{OLD_VERSION}
  Bump:     {type}
  Tag:      v{NEW_VERSION}
  Commit:   {short hash}

  To push:  git push && git push --tags
```

Do NOT push automatically. The user decides when to push.

## Examples

```
/release minor       -> 0.5.0 -> 0.6.0
/release hotfix      -> 0.5.0 -> 0.5.1
/release patch       -> 0.5.0 -> 0.5.1
/release major       -> 0.5.0 -> 1.0.0
```
