---
name: pop-cli-release
description: Use when releasing Pop CLI versions, including version bump, changelog prep, publishing crates, and release announcements.
---

# New Release Workflow

Complete checklist for releasing a new version of Pop CLI.

## Prerequisites

- Must have push access to `r0gue-io/pop-cli`
- Must be in the crates.io `pop-cli` team for publishing
- Clean working directory recommended

## Release Checklist

### Phase 1: Pre-Release Preparation

#### 1.1 Code Complete
- [ ] All planned features merged
- [ ] All PRs for this release approved and merged
- [ ] No blocking issues remaining

#### 1.2 Documentation
- [ ] Update docs to reflect new functionalities
- [ ] If PR still under review near deadline, have docs PR ready to merge
- [ ] Ensure new features have external messaging ready (Twitter draft)

#### 1.3 Cleanup Deprecated Code
- [ ] Remove deprecated code NOT introduced in this release
- [ ] Search for deprecation patterns:
  ```bash
  rg -i "deprecated|todo.*remove|fixme.*remove" --type rust
  ```
- [ ] Reference: https://github.com/r0gue-io/pop-cli/pull/331/commits/3cd8194b165693f06d9001c8b543a968c920d3ce

### Phase 2: Version Bump & Changelog

#### 2.1 Bump Versions
- [ ] Update `workspace.package.version` in root `Cargo.toml`
  ```toml
  [workspace.package]
  version = "X.Y.Z"
  ```
- [ ] Verify all crate versions align (they inherit from workspace)

#### 2.2 Update Changelog
- [ ] Run git-cliff to generate changelog:
  ```bash
  git cliff --bump -o CHANGELOG.md
  ```
- [ ] Review generated changelog for accuracy
- [ ] Add any missing notable changes manually

#### 2.3 Create Release PR
- [ ] Create PR with version bump + changelog
- [ ] Reference format: https://github.com/r0gue-io/pop-cli/pull/244
- [ ] Recent examples:
  - https://github.com/r0gue-io/pop-cli/pull/760
  - https://github.com/r0gue-io/pop-cli/pull/756

### Phase 3: Publish to crates.io

#### 3.1 Dry Run
```bash
cargo publish -p pop-common --dry-run
cargo publish -p pop-telemetry --dry-run
cargo publish -p pop-chains --dry-run
cargo publish -p pop-contracts --dry-run
cargo publish -p pop-fork --dry-run
cargo publish -p pop-cli --dry-run
```

#### 3.2 Publish (in order)
```bash
cargo publish -p pop-common
cargo publish -p pop-telemetry
cargo publish -p pop-chains
cargo publish -p pop-contracts
cargo publish -p pop-fork
cargo publish -p pop-cli
```

**Note**: If permission denied, request access at https://github.com/orgs/r0gue-io/teams

### Phase 4: GitHub Release

#### 4.1 Create Release
- [ ] Confirm all crates from Phase 3 are available on crates.io
- [ ] Go to https://github.com/r0gue-io/pop-cli/releases
- [ ] Click "Draft a new release"
- [ ] Create new tag: `vX.Y.Z`
- [ ] Generate release notes automatically
- [ ] Add **Community Contributions** section manually
- [ ] Match format of previous releases

### Phase 5: Announcements

#### 5.1 Website Update
- [ ] Create PR to `r0gue-io/pop-website`
- [ ] Add release highlights
- [ ] Reference: https://github.com/r0gue-io/pop-website/pull/65

#### 5.2 Social Announcements
- [ ] Post on Twitter/X
- [ ] Post on Telegram

## Version Format

Current version location: `Cargo.toml` → `[workspace.package]` → `version`

```toml
[workspace.package]
version = "X.Y.Z"
```

## Quick Commands

```bash
# Check current version
grep -A5 "\[workspace.package\]" Cargo.toml | grep version

# Generate changelog
git cliff --bump -o CHANGELOG.md

# Dry run all publishes
for crate in pop-common pop-telemetry pop-chains pop-contracts pop-fork pop-cli; do
  cargo publish -p $crate --dry-run
done

# Find deprecated code
rg -i "deprecated" --type rust
```

## Notes

- Always dry-run before actual publish
- Publish crates in dependency order (common → cli)
- Wait for each crate to be available on crates.io before publishing dependents
- Community contributions section in release notes is manual
