Release

Validate, version bump, create release, and monitor CI

evannagle 1 updated 1mo ago
Claude CodeGeneric
View source ↗
---
name: release
description: Validate, version bump, create release, and monitor CI
---

# /release - Release to Production

Validate the codebase, bump version, create GitHub release, and monitor CI until all builds pass.

## Prerequisites

- On `develop` branch
- Working directory clean
- Pi SSH configured (`ssh pi` works)
- GitHub CLI configured (`gh auth status`)

## Process

1. Pre-flight validation
2. Check version not already released
3. Bump version (prompt for major/minor/patch)
4. Commit and push to develop + production
5. Create GitHub release
6. Monitor CI until complete
7. Print deploy instructions

## Steps

### Step 1: Pre-flight Validation

Check branch:
```bash
git branch --show-current

Must be develop. If not, abort: "Must be on develop branch to release."

Check working directory:

git status --porcelain

Must be empty. If not, abort: "Working directory not clean. Commit or stash changes first."

Run Rust checks (stop on first failure):

cargo fmt --check
cargo clippy -- -D warnings
cargo test

Run Python checks:

find src/mcp -name "*.py" -exec python3 -m py_compile {} \;

Test ARM build on Pi (includes clippy to catch Linux-specific warnings):

ssh pi "source ~/.cargo/env && cd ~/ludolph && git fetch origin develop && git checkout origin/develop && cargo clippy --all-features -- -D warnings && cargo test && cargo build --release"
ssh pi "~/.ludolph/bin/lu --version || ~/ludolph/target/release/lu --version"

If any check fails, abort with error output.

Step 2: Check Version Not Released

Get current version:

grep '^version' Cargo.toml | head -1 | cut -d'"' -f2

Check if tag exists:

gh release view v${VERSION} 2>/dev/null && echo "EXISTS" || echo "NEW"

If EXISTS, abort: "Version ${VERSION} already released. Bump version first."

Step 3: Prompt for Version Bump

Display current version and ask:

Current version: 0.5.6

Version bump type?
1. patch (0.5.6 → 0.5.7) - Bug fixes
2. minor (0.5.6 → 0.6.0) - New features
3. major (0.5.6 → 1.0.0) - Breaking changes

Wait for user selection (default: patch).

Calculate new version and update Cargo.toml:

# For patch bump example:
NEW_VERSION="0.5.7"
sed -i '' "s/^version = \".*\"/version = \"${NEW_VERSION}\"/" Cargo.toml

Step 4: Commit and Push

Create commit:

git add Cargo.toml
git commit -m "chore: release v${NEW_VERSION}"

Push to both branches:

git push origin develop
git push origin develop:production

Step 5: Create GitHub Release

Generate release notes from commits since last tag:

LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
if [ -n "$LAST_TAG" ]; then
  NOTES=$(git log ${LAST_TAG}..HEAD --pretty=format:"- %s" | grep -E "^- (feat|fix|docs|refactor):")
else
  NOTES="Initial release"
fi

Create release:

gh release create v${NEW_VERSION} --title "v${NEW_VERSION}" --notes "${NOTES}"

Print release URL.

Step 6: Monitor CI

Get workflow run ID:

sleep 5  # Wait for workflow to start
RUN_ID=$(gh run list --limit 1 --json databaseId -q '.[0].databaseId')

Poll until complete (check every 30 seconds, timeout after 20 minutes):

gh run view ${RUN_ID}

Print status for each job as it completes:

Monitoring CI...
  package-mcp: passed (7s)
  x86_64-linux: passed (3m54s)
  aarch64-linux: running...
  x86_64-macos: running...
  aarch64-macos: passed (4m37s)

If any job fails, print error and link to logs.

Step 7: Print Deploy Instructions

If all jobs passed:

Release v${NEW_VERSION} complete!

All 5 assets uploaded:
  - lu-x86_64-unknown-linux-gnu
  - lu-aarch64-unknown-linux-gnu
  - lu-x86_64-apple-darwin
  - lu-aarch64-apple-darwin
  - ludolph-mcp-v${NEW_VERSION}.tar.gz

Run /deploy to install on Pi and Mac.

If any job failed:

Release v${NEW_VERSION} created but some builds failed.

Check: https://github.com/evannagle/ludolph/actions/runs/${RUN_ID}

You may need to fix issues and create a new release.

Troubleshooting

See RELEASE.md for CI requirements and known issues. ```

Maintain Release?

Let people know it's listed here — add the badge (live metrics, light/dark aware) or a plain link to your README or docs.

[Release on getagentictools](https://getagentictools.com/loops/evannagle-release-release-to-production?ref=badge)