# Install
bun add -g @r5n/sisyphus
# Initialize
sisyphus init
# Create a version "stone"
sisyphus version
# Release
sisyphus roll --npm --githubTraditional versioning forces immediate releases. Stones let you stack changes and release when ready:
# Monday: Bug fix
sisyphus version --bump patch --filter @org/auth
# Tuesday: New feature
sisyphus version --bump minor --filter @org/api
# Friday: Ship it
sisyphus check # Review pending changes
sisyphus roll --npm --github # Release all at onceBenefits:
- Stack changes throughout the week
- Coordinate multi-package updates
- Review before releasing
- Git-friendly (stones are markdown files)
Initialize config in your project.
sisyphus init # Interactive
sisyphus init --single # Single package mode
sisyphus init --nonInteractive # Skip promptsCreate a version stone (changeset).
# Interactive
sisyphus version
# Specify packages and bump
sisyphus version --bump minor --filter @org/core
# Snapshot/prerelease
sisyphus version --snapshot --tag devOptions:
-b, --bump— Bump type: major, minor, patch-f, --filter— Package name filter-s, --snapshot— Create snapshot version-t, --tag— Release tag (alpha, beta, rc, etc.)-y, --yes— Skip confirmation
Review pending stones.
sisyphus check
sisyphus check --json # JSON outputShows:
- Pending stones
- Package version changes
- Dependency updates
- Last release info
Process stones and release.
# Full release
sisyphus roll --npm --github --changelog
# Dry run
sisyphus roll --dry-run
# Just changelogs
sisyphus roll --changelogOptions:
-n, --npm— Publish to npm-g, --github— Create GitHub releases-c, --changelog— Generate changelogs-t, --withTags— Create git tags-d, --dryRun— Preview without changes--npmToken— NPM authentication token--githubToken— GitHub authentication token
Manage prerelease versions.
# Create beta prerelease
sisyphus prerelease --type beta --bump minor
# Promote prereleases interactively
sisyphus prerelease --promotePromotion flow:
- Alpha → Beta, RC, or Stable
- Beta → RC or Stable
- RC → Stable
Manage individual stones.
sisyphus stone list # List all stones
sisyphus stone show <id> # Show stone details
sisyphus stone delete <id> # Remove a stone
sisyphus stone edit <id> # Edit stone message
sisyphus stone merge # Combine multiple stonesVisualize package dependencies.
sisyphus graph # Show full graph
sisyphus graph --filter @org/core # Focus on package
sisyphus graph --json # Export as JSONSisyphus uses .sisyphus/config.json:
{
"$schema": "https://raw.githubusercontent.com/r5n-labs/clis/main/packages/sisyphus/schema.json",
"tag": "latest",
"ignore": ["*-internal"],
"single": false,
"commit": {
"message": "chore(release): ${message}"
},
"release": {
"github": true,
"npm": true,
"tags": true
},
"changelog": {
"generate": true
}
}Stones are stored in .sisyphus/stones/ as markdown:
### feat: add authentication
Added OAuth2 support.
---
| minor | patch |
| :-------: | :-----------------: |
| @org/auth | @org/core, @org/api |your-project/
├── .sisyphus/
│ ├── config.json
│ └── stones/
│ ├── feat-auth.md
│ └── fix-bug.md
├── packages/
│ ├── core/
│ │ ├── package.json
│ │ └── CHANGELOG.md
│ └── auth/
│ ├── package.json
│ └── CHANGELOG.md
└── CHANGELOG.md
# Feature work
sisyphus version --bump minor --filter @app/core
# Bug fix
sisyphus version --bump patch --filter @app/auth
# Breaking change
sisyphus version --bump major --filter @app/api
# Release all
sisyphus check
sisyphus roll --npm --github --changelog# Create beta
sisyphus prerelease --type beta --bump minor --filter @org/new-feature
# Release beta
sisyphus roll --npm
# Promote to stable
sisyphus prerelease --promote# .github/workflows/release.yml
name: Release
on:
push:
branches: [main]
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v1
- run: bun install
- name: Check for stones
id: check
run: |
if [ -d ".sisyphus/stones" ] && [ "$(ls -A .sisyphus/stones)" ]; then
echo "has_stones=true" >> $GITHUB_OUTPUT
fi
- name: Release
if: steps.check.outputs.has_stones == 'true'
run: bunx @r5n/sisyphus roll --npm --github --changelog
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}- NPM: Requires
NPM_TOKENenv var or--npmToken - GitHub: Requires
GITHUB_TOKENenv var or--githubToken - Never store tokens in config files
- Use environment variables in CI/CD
- Review stones before rolling (
sisyphus check) - Test with dry-run mode
- Commit stones to version control
- Use branch protection for releases
No stones found:
- Create stones with
sisyphus versionfirst - Check
.sisyphus/stones/directory exists
Package not found:
- Verify package name
- Check if package is ignored in config
Publish failed:
- Verify NPM token permissions
- Check if version already exists
- Ensure package.json has required fields
Debug mode:
DEBUG=* sisyphus roll --dry-run
cat .sisyphus/config.json
ls -la .sisyphus/stones/Apache 2.0 — see LICENSE