# Changesets Workflow Guide This guide explains how to use Changesets to manage versions and publish packages to npm. ## Overview The monorepo uses Changesets to: - Track changes across multiple packages - Automatically version packages using semver - Convert `workspace:*` dependencies to proper semver versions - Publish packages to npm in the correct dependency order ## Published Packages The following packages are published to npm: - `@cossistant/types` - Shared TypeScript types - `@cossistant/core` - Core library for API and data fetching - `@cossistant/react` - React SDK with hooks and primitives (depends on core & types) - `@cossistant/next` - Next.js bindings (depends on react) All packages use **fixed versioning** - they always have the same version number. ## Automated Workflow ### 1. Create a Changeset When you make changes to any publishable package, create a changeset: ```bash bun changeset ``` This will: - Prompt you to select which packages changed - Ask for the type of change (patch/minor/major) - Request a summary of the changes - Create a markdown file in `.changeset/` ### 2. Commit and Push Commit the generated changeset file with your changes: ```bash git add .changeset/*.md git commit -m "feat: add new feature" git push ``` ### 3. Automatic Version PR When your PR merges to main, the CI will: 1. Detect pending changesets 2. Create or update a "Version Packages" PR 3. Update all package versions and CHANGELOGs ### 4. Publish When the "Version Packages" PR is merged: 1. Packages are automatically published to npm 2. Git tags are created 3. GitHub releases are generated ## Using the Release CLI For a more streamlined experience, use the AI-powered release CLI: ```bash bun release create ``` This tool will guide you through the entire process with AI-generated changelogs. ## Configuration ### `.changeset/config.json` ```json { "changelog": ["@changesets/changelog-github", { "repo": "cossistantcom/cossistant" }], "commit": false, "fixed": [["@cossistant/core", "@cossistant/react", "@cossistant/types", "@cossistant/next"]], "access": "public", "baseBranch": "main", "updateInternalDependencies": "minor", "ignore": ["@cossistant/api", "@cossistant/web", "@cossistant/location", "@cossistant/transactional"] } ``` Key settings: - `changelog`: Uses GitHub-style changelogs with PR links - `fixed`: Packages that version together - `updateInternalDependencies`: Bump internal deps on minor changes - `ignore`: Packages excluded from versioning ## Troubleshooting ### "workspace:\* dependency not found" after npm install This means `changeset version` wasn't run before publishing. The CI handles this automatically. ### Publishing fails with "You need to be logged in" Ensure the `NPM_ACCESS_TOKEN` secret is set in GitHub repository settings.