--- name: Release description: Create a new version release by analyzing changes, bumping version, updating changelogs, committing, tagging, and pushing --- # Release Skill This skill automates the entire release process for this project. ## Workflow ### Step 1: Analyze Changes Since Last Release ```bash # Get the last release tag git describe --tags --abbrev=0 # List all commits since the last tag git log $(git describe --tags --abbrev=0)..HEAD --oneline --no-merges # Check for uncommitted changes git status --short ``` Categorize all changes into: - **Added**: New features - **Changed**: Modifications to existing functionality - **Fixed**: Bug fixes - **Removed**: Removed features - **Breaking**: Breaking changes (triggers major version bump) ### Step 2: Determine Version Bump Follow [Semantic Versioning](https://semver.org/): - **MAJOR** (X.0.0): Breaking changes or major rewrites - **MINOR** (x.Y.0): New features, backward compatible - **PATCH** (x.y.Z): Bug fixes, metadata updates, backward compatible Current version can be found in: - `Cargo.toml` (line ~3): `version = "X.Y.Z"` - `meson.build` (line ~2): `version: 'X.Y.Z'` ### Step 3: Update Version Numbers Update the version in these files: 1. **`Cargo.toml`**: `version = "X.Y.Z"` 2. **`meson.build`**: `version: 'X.Y.Z'` ### Step 4: Update CHANGELOG.md Move content from `[Unreleased]` section to a new version section: ```markdown ## [X.Y.Z] - YYYY-MM-DD ### Added - Feature description ### Changed - Change description ### Fixed - Fix description ``` Reset the `[Unreleased]` section to empty placeholders. ### Step 5: Update README.md Update the version header section (around line 14): ```markdown ## 🎉 Version X.Y.Z - [Short Title] **Karere X.Y.Z** brings [brief description of main changes]. ### 🆕 What's New in X.Y.Z - **Feature 1**: Description - **Feature 2**: Description ``` ### Step 6: Update metainfo.xml.in Add a new `` entry at the TOP of the `` section (after line 97): ```xml
  • Change description 1
  • Change description 2
``` **File location**: `data/io.github.tobagin.karere.metainfo.xml.in` ### Step 7: Update Cargo Lock and Sources // turbo ```bash cargo generate-lockfile python3 tools/flatpak-cargo-generator.py Cargo.lock -o packaging/cargo-sources.json ``` ### Step 8: Commit All Changes Stage and commit with a detailed message: ```bash git add . git commit -m "Release vX.Y.Z Changes in this release: - [List main changes] - [One per line] Files updated: - Cargo.toml, meson.build (version bump) - CHANGELOG.md (release notes) - README.md (version header) - metainfo.xml.in (AppStream release) - Cargo.lock, cargo-sources.json (dependencies)" ``` ### Step 9: Create and Push Tag ```bash # Create annotated tag git tag -a vX.Y.Z -m "Release vX.Y.Z" # Push commits and tags git push origin HEAD --tags ``` ## Important Notes - Always use the format `vX.Y.Z` for tags (with the `v` prefix) - Date format in CHANGELOG.md and metainfo.xml is `YYYY-MM-DD` - The metainfo.xml release entries should be concise (no emojis in `
  • ` items) - Keep README.md "What's New" section brief and user-friendly - CHANGELOG.md can be more detailed and technical ## File Locations Summary | File | Version Location | Purpose | |------|------------------|---------| | `Cargo.toml` | Line ~3 | Rust package version | | `meson.build` | Line ~2 | Build system version | | `CHANGELOG.md` | New section after line 8 | Detailed release notes | | `README.md` | Lines 14-22 | User-facing highlights | | `data/io.github.tobagin.karere.metainfo.xml.in` | After line 97 | AppStream metadata |