Skip to content

Release Guide

This guide explains how to create releases and publish packages for the RCL monorepo.

The RCL project uses a release branch workflow:

  • Development happens on main branch
  • Releases are triggered by pushing to release branch
  • Tags are automatically synced back to main
  1. Develop on main branch using Conventional Commits:

    • feat: - New features (bumps minor version)
    • fix: - Bug fixes (bumps patch version)
    • feat!: or BREAKING CHANGE: - Breaking changes (bumps major version)
    • docs:, chore:, test:, etc. - Non-release changes
  2. Use the automated release commands when ready to release:

    Terminal window
    # These commands handle everything automatically:
    bun run release:patch # For bug fixes (1.0.0 → 1.0.1)
    bun run release:minor # For new features (1.0.0 → 1.1.0)
    bun run release:major # For breaking changes (1.0.0 → 2.0.0)
  3. The release command automatically:

    • Ensures you're on main branch
    • Pulls latest changes
    • Bumps version in all packages
    • Creates release commit
    • Pushes to release branch
    • Triggers GitHub Actions workflow
  4. GitHub Actions then automatically:

    • Builds and tests all packages
    • Creates version tag
    • Publishes to NPM
    • Publishes VSCode extension
    • Creates GitHub release with changelog
    • Syncs tag back to main branch
Terminal window
# Develop features on main
git checkout main
git add .
git commit -m "feat(compiler): add support for async actions"
git push origin main
# When ready to release (one command!)
bun run release:minor
# Monitor the release progress
gh run list --limit 3
# After release completes, pull the synced tag
git pull origin main --tags
Terminal window
# Patch release (1.0.0 → 1.0.1)
bun run release:patch
# Minor release (1.0.0 → 1.1.0)
bun run release:minor
# Major release (1.0.0 → 2.0.0)
bun run release:major
# Dry run (see what would happen)
bun run release:dry
Terminal window
# Feature (minor version bump)
feat(parser): add support for nested flows
feat(cli): add --watch flag for development
# Bug fix (patch version bump)
fix(compiler): resolve state transition validation
fix(extension): fix syntax highlighting for strings
# Breaking change (major version bump)
feat(ast)!: change AST node structure for flows
fix(compiler)!: require explicit state declarations
# Multiple packages
feat: update parser and compiler for new syntax

The manual workflow is available for special cases:

  • Emergency patches
  • Pre-releases/beta versions
  • Testing release process
  1. Go to GitHub Actions → "Manual Release & Publish"
  2. Click "Run workflow"
  3. Select:
    • Release type: patch, minor, or major
    • Prerelease: true for beta releases
    • Packages: "all" or comma-separated list
  4. Click "Run workflow"
  • Trigger: Push to release branch
  • When: Ready to release new version
  • Process: Automatic build → test → publish → tag
  • Trigger: Manual workflow dispatch
  • When: Emergency releases or testing
  • Process: Direct release with options

The following packages are published to NPM:

PackagePathPublic
@rcs-lang/astpackages/ast
@rcs-lang/compilerpackages/compiler
@rcs-lang/csmpackages/csm
@rcs-lang/language-servicepackages/language-service
@rcs-lang/clipackages/cli
@rcs-lang/corepackages/core
@rcs-lang/file-systempackages/file-system
@rcs-lang/validationpackages/validation
@rcs-lang/parserpackages/parser❌ (private)

Important: The publish:packages script has been disabled to enforce the proper release workflow. Always use the release commands:

  • bun run release:patch
  • bun run release:minor
  • bun run release:major

Attempting to use publish:packages will show an error directing you to use the proper release flow.

  • Name: rcl-language-support
  • Path: apps/extension
  • Marketplace: Visual Studio Code Marketplace
  • Publishing: Automatic when extension changes

All packages share the same version number for simplicity and consistency.

  • patch (1.0.0 → 1.0.1): Bug fixes
  • minor (1.0.0 → 1.1.0): New features
  • major (1.0.0 → 2.0.0): Breaking changes
  • Format: 1.1.0-beta.0
  • Published with beta tag on NPM
  • Not published to VSCode marketplace

Configure these in GitHub repository settings:

SecretDescriptionRequired For
NPM_TOKENNPM automation tokenPublishing packages
VSCODE_PUBLISH_TOKENVSCode marketplace Personal Access TokenPublishing extension
GITHUB_TOKENAutomatically providedCreating releases
  • Ensure commits follow conventional format
  • Check if there are releasable changes
  • Verify Release Please app has permissions
  • Check NPM_TOKEN is valid
  • Verify package.json is not private
  • Ensure version doesn't already exist
  • Verify VSCODE_PUBLISH_TOKEN is valid
  • Check extension manifest version
  • Ensure all required files are built
  1. Use conventional commits for automatic versioning
  2. Group related changes in single PRs
  3. Review Release PRs before merging
  4. Test locally before releasing
  5. Document breaking changes clearly
  6. Use pre-releases for testing major changes

If a release has issues:

  1. Revert the release commit on main
  2. Deprecate bad NPM versions: npm deprecate @rcs-lang/package@version "Contains critical bug"
  3. Create fix and release patch version
  4. Update release notes with known issues

A: Release when you have meaningful changes. Weekly or bi-weekly is common for active projects.

A: Yes, use the manual workflow with specific package names.

A: Use manual workflow with "patch" type for fastest release.

A: Use manual workflow immediately, document in SECURITY.md.