# Release

> Cut a Memoria release. Version bump, CHANGELOG, CI workflows, Docker image. Use when publishing a new version.

- Skill: `matrixorigin/release` (Agent Skill)
- Install (CLI): `npx skillmds@latest add matrixorigin/release`
- Raw SKILL.md: https://api.skillmd.com/api/skills/matrixorigin/release/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: matrixorigin (https://skillmd.com/u/matrixorigin)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/matrixorigin/release

---


## Flow

| Step | Who | How |
|------|-----|-----|
| Bump version, tag, push | You | `make release VERSION=x.y.z` |
| Build binaries (4 platforms) | CI | `release-rust.yml` |
| Build + push Docker image | CI | `release-docker.yml` |
| Create GitHub Release | CI | `softprops/action-gh-release` |

## Stable Release

```bash
git status              # Must be clean
make release VERSION=0.2.0
```

Does: update `Cargo.toml` version → `cargo check` → generate CHANGELOG (git-cliff) → commit → tag → push.

CI then: test → build binaries (x86_64/aarch64 linux/macos) → GitHub Release → Docker image (`:0.2.0` + `:latest`).

## Pre-Release

```bash
make release-rc VERSION=0.2.0-rc1
```

Same but: no CHANGELOG, GitHub Release marked prerelease, Docker gets `:0.2.0-rc1` (not `:latest`).

Typical: `rc1` → `rc2` → stable.

## Manual Docker Push

```bash
make release-docker                  # :latest
make release-docker VERSION=0.2.0   # :0.2.0 + :latest
```

## CI Workflows

| Workflow | Trigger | What |
|----------|---------|------|
| `test.yml` | Push main/develop, PRs | check + clippy + tests |
| `pr-title.yml` | PR open/edit | Conventional Commits validation |
| `release-rust.yml` | Tag `v*` | Test → build → GitHub Release |
| `release-docker.yml` | Tag `v*` | Test → build → Docker Hub |

Both release workflows run full test suite before publishing.

## Version Locations

- `memoria/Cargo.toml` — source of truth
- `memoria --version` — binary
- `mcp.json` — `_version` field
- Steering rules — `<!-- memoria-version: x.y.z -->`

## Checklist

- [ ] Clean working tree, CI green on main
- [ ] README/docs updated for user-facing changes
- [ ] Steering rules updated if tool behavior changed
- [ ] `make release VERSION=x.y.z`
- [ ] Verify GitHub Release has 4 binaries + checksums
- [ ] Verify Docker Hub has new tag

