Skip to content

Commit 09e8472

Browse files
authored
refactor: Move publishing docs to /release skill (CYPACK-667) (#705)
* refactor: Move publishing docs to /release skill (CYPACK-667) - Create new .claude/skills/release/SKILL.md with complete publishing workflow - Replace verbose CLAUDE.md publishing section with skill reference - Skill includes pre-publishing checklist, dependency order, and Linear issue updates * docs: Add changelog entry for /release skill refactor (CYPACK-667) * fix: Correct CHANGELOG.internal.md versioning and update release skill (CYPACK-667) - Move CYPACK-547 entry to [0.2.6] section (was already released) - Update release skill to mention updating both CHANGELOG.md and CHANGELOG.internal.md * fix: Address PR review feedback (CYPACK-667) - Remove allowed-tools from skill frontmatter (not respected by SDK) - Clarify that /release is invoked within Claude Code or Claude Agent SDK * fix: Update release skill with correct package list (CYPACK-667) - Remove obsolete ndjson-client package - Add missing packages: cloudflare-tunnel-client, config-updater, linear-event-transport, gemini-runner - Update dependency order to match current package structure * feat: Add GitHub release step to /release skill (CYPACK-667) - Add step 6 for creating GitHub release with changelog notes - Renumber 'Update Linear Issues' to step 7 * chore: Prepare release v0.2.7 - Update all package versions to 0.2.7 - Update CHANGELOG.md with v0.2.7 release notes - Update CHANGELOG.internal.md with v0.2.7 section
1 parent daf983a commit 09e8472

13 files changed

Lines changed: 177 additions & 87 deletions

File tree

.claude/skills/release/SKILL.md

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
---
2+
name: release
3+
description: Run a Cyrus release by publishing all packages to npm in the correct dependency order, updating changelogs, and creating git tags.
4+
---
5+
6+
# Release
7+
8+
Publish Cyrus packages to npm and create a release.
9+
10+
## Pre-Publishing Checklist
11+
12+
1. **Update CHANGELOG.md and CHANGELOG.internal.md**:
13+
- Move items from `## [Unreleased]` to a new versioned section in both files
14+
- Use the CLI version number (e.g., `## [0.1.22] - 2025-01-06`)
15+
- CHANGELOG.md: Focus on end-user impact from the perspective of the `cyrus` CLI
16+
- CHANGELOG.internal.md: Internal development changes, refactors, and tooling updates
17+
18+
2. **Check Linear Issues**:
19+
- Review all Linear issues mentioned in the Unreleased changelog
20+
- These will be moved from 'MergedUnreleased' to 'ReleasedMonitoring' after release
21+
22+
3. **Commit all changes**:
23+
```bash
24+
git add -A
25+
git commit -m "Prepare release v0.1.XX"
26+
git push
27+
```
28+
29+
## Publishing Workflow
30+
31+
### 1. Install dependencies from root
32+
```bash
33+
pnpm install # Ensures all workspace dependencies are up to date
34+
```
35+
36+
### 2. Build all packages from root first
37+
```bash
38+
pnpm build # Builds all packages to ensure dependencies are resolved
39+
```
40+
41+
### 3. Publish packages in dependency order
42+
43+
**IMPORTANT**: Publish in this exact order to avoid dependency resolution issues:
44+
45+
```bash
46+
# 1. Packages with no internal dependencies
47+
cd packages/cloudflare-tunnel-client && pnpm publish --access public --no-git-checks
48+
cd ../..
49+
pnpm install # Update lockfile
50+
51+
cd packages/claude-runner && pnpm publish --access public --no-git-checks
52+
cd ../..
53+
pnpm install # Update lockfile
54+
55+
# 2. Core package (depends on claude-runner)
56+
cd packages/core && pnpm publish --access public --no-git-checks
57+
cd ../..
58+
pnpm install # Update lockfile
59+
60+
# 3. Simple agent runner (depends on claude-runner)
61+
cd packages/simple-agent-runner && pnpm publish --access public --no-git-checks
62+
cd ../..
63+
pnpm install # Update lockfile
64+
65+
# 4. Packages that depend on core
66+
cd packages/linear-event-transport && pnpm publish --access public --no-git-checks
67+
cd ../..
68+
pnpm install # Update lockfile
69+
70+
cd packages/config-updater && pnpm publish --access public --no-git-checks
71+
cd ../..
72+
pnpm install # Update lockfile
73+
74+
# 5. Gemini runner (depends on claude-runner, core, simple-agent-runner)
75+
cd packages/gemini-runner && pnpm publish --access public --no-git-checks
76+
cd ../..
77+
pnpm install # Update lockfile
78+
79+
# 6. Edge worker (depends on all packages above)
80+
cd packages/edge-worker && pnpm publish --access public --no-git-checks
81+
cd ../..
82+
pnpm install # Update lockfile
83+
```
84+
85+
### 4. Publish the CLI
86+
```bash
87+
pnpm install # Final install to ensure all deps are latest
88+
cd apps/cli && pnpm publish --access public --no-git-checks
89+
cd ../..
90+
```
91+
92+
### 5. Create git tag and push
93+
```bash
94+
git tag v0.1.XX
95+
git push origin <branch-name>
96+
git push origin v0.1.XX
97+
```
98+
99+
### 6. Create GitHub Release
100+
Create a GitHub release using the changelog notes as the content:
101+
```bash
102+
gh release create v0.1.XX --title "v0.1.XX" --notes-file - << 'EOF'
103+
<paste the changelog notes for this version here>
104+
EOF
105+
```
106+
107+
Or interactively:
108+
```bash
109+
gh release create v0.1.XX --title "v0.1.XX" --notes "$(cat CHANGELOG.md | sed -n '/## \[0.1.XX\]/,/## \[/p' | head -n -1)"
110+
```
111+
112+
### 7. Update Linear Issues
113+
After a successful release, move each Linear issue mentioned in the changelog from 'MergedUnreleased' (Done) status to 'ReleasedMonitoring' (also Done) status.
114+
115+
## Key Notes
116+
117+
- Always use `--no-git-checks` flag to publish from feature branches
118+
- Run `pnpm install` after each publish to update the lockfile
119+
- The `simple-agent-runner` package MUST be published before `edge-worker`
120+
- Build all packages once at the start, then publish without rebuilding
121+
- This ensures `workspace:*` references resolve to published versions
122+
123+
## Examples
124+
125+
- "release" - Run the full release process
126+
- "/release" - Invoke the release skill

CHANGELOG.internal.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,12 @@ This changelog documents internal development changes, refactors, tooling update
44

55
## [Unreleased]
66

7+
## [0.2.7] - 2025-12-28
8+
9+
### Changed
10+
- Moved publishing docs from CLAUDE.md to `/release` skill for cleaner documentation and easier invocation ([CYPACK-667](https://linear.app/ceedar/issue/CYPACK-667), [#705](https://github.com/ceedaragents/cyrus/pull/705))
11+
12+
## [0.2.6] - 2025-12-22
13+
714
### Fixed
815
- Fixed the CLI issue tracker's `labels()` method to return actual label data instead of an empty array, enabling correct runner selection (Codex/Gemini) in F1 tests ([CYPACK-547](https://linear.app/ceedar/issue/CYPACK-547), [#624](https://github.com/ceedaragents/cyrus/pull/624))

CHANGELOG.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,40 @@ All notable changes to this project will be documented in this file.
44

55
## [Unreleased]
66

7+
## [0.2.7] - 2025-12-28
8+
79
### Fixed
810
- **AskUserQuestion UI cleanup** - The AskUserQuestion tool no longer appears as raw JSON in Linear's activity stream. Since the tool is custom-handled via Linear's select signal elicitation, the tool call and result are now suppressed from the activity UI for a cleaner experience. ([CYPACK-654](https://linear.app/ceedar/issue/CYPACK-654), [#698](https://github.com/ceedaragents/cyrus/pull/698))
911

12+
### Packages
13+
14+
#### cyrus-cloudflare-tunnel-client
15+
- cyrus-cloudflare-tunnel-client@0.2.7
16+
17+
#### cyrus-config-updater
18+
- cyrus-config-updater@0.2.7
19+
20+
#### cyrus-linear-event-transport
21+
- cyrus-linear-event-transport@0.2.7
22+
23+
#### cyrus-claude-runner
24+
- cyrus-claude-runner@0.2.7
25+
26+
#### cyrus-core
27+
- cyrus-core@0.2.7
28+
29+
#### cyrus-simple-agent-runner
30+
- cyrus-simple-agent-runner@0.2.7
31+
32+
#### cyrus-gemini-runner
33+
- cyrus-gemini-runner@0.2.7
34+
35+
#### cyrus-edge-worker
36+
- cyrus-edge-worker@0.2.7
37+
38+
#### cyrus-ai (CLI)
39+
- cyrus-ai@0.2.7
40+
1041
## [0.2.6] - 2025-12-22
1142

1243
### Changed

CLAUDE.md

Lines changed: 4 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -342,85 +342,11 @@ This integration is automatically available in all Cyrus sessions - the EdgeWork
342342

343343
## Publishing
344344

345-
**Important: Always publish packages in the correct order to ensure proper dependency resolution.**
345+
For publishing and release instructions, use the `/release` skill (within Claude Code or Claude Agent SDK) which provides a complete guide for publishing packages to npm in the correct dependency order. Invoke it with:
346346

347-
### Pre-Publishing Checklist
348-
349-
1. **Update CHANGELOG.md**:
350-
- Move items from `## [Unreleased]` to a new versioned section
351-
- Use the CLI version number (e.g., `## [0.1.22] - 2025-01-06`)
352-
- Focus on end-user impact from the perspective of the `cyrus` CLI
353-
354-
2. **Commit all changes**:
355-
```bash
356-
git add -A
357-
git commit -m "Prepare release v0.1.XX"
358-
git push
359-
```
360-
361-
### Publishing Workflow
362-
363-
1. **Install dependencies from root**:
364-
```bash
365-
pnpm install # Ensures all workspace dependencies are up to date
366-
```
367-
368-
2. **Build all packages from root first**:
369-
```bash
370-
pnpm build # Builds all packages to ensure dependencies are resolved
371-
```
372-
373-
3. **Publish packages in dependency order**:
374-
375-
**IMPORTANT**: Publish in this exact order to avoid dependency resolution issues:
376-
377-
```bash
378-
# 1. Packages with no internal dependencies
379-
cd packages/ndjson-client && pnpm publish --access public --no-git-checks
380-
cd ../..
381-
pnpm install # Update lockfile
382-
383-
# 2. Packages that depend on external deps only
384-
cd packages/claude-runner && pnpm publish --access public --no-git-checks
385-
cd ../..
386-
pnpm install # Update lockfile
387-
388-
# 3. Core package (depends on claude-runner)
389-
cd packages/core && pnpm publish --access public --no-git-checks
390-
cd ../..
391-
pnpm install # Update lockfile
392-
393-
# 4. Simple agent runner (depends on claude-runner)
394-
cd packages/simple-agent-runner && pnpm publish --access public --no-git-checks
395-
cd ../..
396-
pnpm install # Update lockfile
397-
398-
# 5. Edge worker (depends on core, claude-runner, ndjson-client, simple-agent-runner)
399-
cd packages/edge-worker && pnpm publish --access public --no-git-checks
400-
cd ../..
401-
pnpm install # Update lockfile
402-
```
403-
404-
4. **Finally publish the CLI**:
405-
```bash
406-
pnpm install # Final install to ensure all deps are latest
407-
cd apps/cli && pnpm publish --access public --no-git-checks
408-
cd ../..
409-
```
410-
411-
5. **Create git tag and push**:
412-
```bash
413-
git tag v0.1.XX
414-
git push origin <branch-name>
415-
git push origin v0.1.XX
416-
```
417-
418-
**Key Notes:**
419-
- Always use `--no-git-checks` flag to publish from feature branches
420-
- Run `pnpm install` after each publish to update the lockfile
421-
- The `simple-agent-runner` package MUST be published before `edge-worker`
422-
- Build all packages once at the start, then publish without rebuilding
423-
- This ensures `workspace:*` references resolve to published versions
347+
```
348+
/release
349+
```
424350

425351

426352
## Gemini CLI for Testing

apps/cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cyrus-ai",
3-
"version": "0.2.6",
3+
"version": "0.2.7",
44
"description": "AI-powered Linear issue automation using Claude",
55
"main": "dist/src/app.js",
66
"types": "dist/src/app.d.ts",

packages/claude-runner/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cyrus-claude-runner",
3-
"version": "0.2.6",
3+
"version": "0.2.7",
44
"description": "Claude CLI execution wrapper for Cyrus",
55
"type": "module",
66
"main": "dist/index.js",

packages/cloudflare-tunnel-client/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cyrus-cloudflare-tunnel-client",
3-
"version": "0.2.6",
3+
"version": "0.2.7",
44
"description": "Cloudflare tunnel client for receiving config updates and webhooks from cyrus-hosted",
55
"type": "module",
66
"main": "./dist/index.js",

packages/config-updater/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cyrus-config-updater",
3-
"version": "0.2.6",
3+
"version": "0.2.7",
44
"description": "Configuration update handlers for Cyrus agent",
55
"type": "module",
66
"main": "./dist/index.js",

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cyrus-core",
3-
"version": "0.2.6",
3+
"version": "0.2.7",
44
"description": "Core business logic for Cyrus",
55
"type": "module",
66
"main": "dist/index.js",

packages/edge-worker/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cyrus-edge-worker",
3-
"version": "0.2.6",
3+
"version": "0.2.7",
44
"description": "Unified edge worker for processing Linear issues with Claude",
55
"type": "module",
66
"main": "dist/index.js",

0 commit comments

Comments
 (0)