Skip to content

Migrate release pipeline to changesets (PUBLISHING.md standard)#44

Merged
himerus merged 4 commits intodevfrom
feature/migrate-release-pipeline-to-changesets
Mar 12, 2026
Merged

Migrate release pipeline to changesets (PUBLISHING.md standard)#44
himerus merged 4 commits intodevfrom
feature/migrate-release-pipeline-to-changesets

Conversation

@himerus
Copy link
Copy Markdown
Contributor

@himerus himerus commented Mar 12, 2026

Summary

Migrate helixir's npm release pipeline from semantic-release to @changesets/cli + changesets/action@v1, following the exact patterns documented in PUBLISHING.md (the org-wide release standard authored by the helix team).

Read PUBLISHING.md in the repo root before starting — it is the source of truth for this migration.


Context

helixir is a MONOREPO with three publishable packages:

  • helixir (root — the CLI/MCP server, already published at v0.1.0)
  • @helixir/core (packages/core — w...

Recovered automatically by Automaker post-agent hook

Summary by CodeRabbit

  • Chores

    • Migrated release and publishing pipeline from semantic-release to Changesets, removed legacy release config, added Changesets-driven publish on main, and updated package scripts/dev tooling accordingly.
    • Added CI checks to require a changeset on PRs (with a skip option for infra-only changes) and added a publish workflow for main.
  • Documentation

    • Added a Changesets README and a migration guide explaining usage, bump types, and the publish process.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 12, 2026

Warning

Rate limit exceeded

@himerus has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 1 minutes and 14 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 29228dd5-020e-4c30-ac58-8624bddf84ee

📥 Commits

Reviewing files that changed from the base of the PR and between 3848df0 and 4a57285.

📒 Files selected for processing (3)
  • .changeset/release-pipeline-migration.md
  • .github/workflows/changeset.yml
  • .github/workflows/publish.yml

Note

.coderabbit.yaml has unrecognized properties

CodeRabbit is using all valid settings from your configuration. Unrecognized properties (listed below) have been ignored and may indicate typos or deprecated fields that can be removed.

⚠️ Parsing warnings (1)
Validation error: Unrecognized key(s) in object: 'version'
⚙️ Configuration instructions
  • Please see the configuration documentation for more information.
  • You can also validate your configuration using the online YAML validator.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Walkthrough

Replaces semantic-release with Changesets: adds Changesets config, docs, PR-level changeset validation workflow, and a Changesets-based publish workflow; removes semantic-release config/workflow and updates package.json scripts/devDependencies accordingly.

Changes

Cohort / File(s) Summary
Changesets configuration & docs
\.changeset/README.md, \.changeset/config.json, \.changeset/release-pipeline-migration.md
Add Changesets configuration, README explaining usage/bump types/publish process, and a migration release note describing pipeline migration and Zod validation mention.
PR validation workflow
\.github/workflows/changeset.yml
New CI job that checks PR labels and diffs to ensure a .changeset/*.md (excluding README.md) exists unless skip-changeset label is present; fails PR when missing.
Publish workflow
\.github/workflows/publish.yml
New publish workflow triggered on pushes to main: checkout, pnpm/Node setup, build, and run changesets/action to version/publish to npm using provided tokens.
Removed semantic-release config & workflow
\.github/workflows/release.yml, \.releaserc.json
Deletes semantic-release workflow and configuration including commit analysis, changelog rules, npm/git/github integrations, and associated CI steps.
Package metadata & scripts
package.json
Remove semantic-release-related scripts/devDeps; add @changesets/cli and scripts: changeset, changeset:version, changeset:publish.

Sequence Diagram(s)

sequenceDiagram
  participant Author as PR Author
  participant GitHub as GitHub Actions
  participant Repo as Repository (git)
  participant Changesets as changesets/action
  participant NPM as npm Registry

  Author->>Repo: Open PR with changes & labels
  GitHub->>Repo: Checkout PR/ref and compute diff
  GitHub->>Repo: Read PR labels
  alt no skip-changeset label
    GitHub->>Repo: Search for `.changeset/*.md` (excl README.md)
    alt changeset present
      GitHub-->>Author: Pass (log changeset paths)
    else no changeset
      GitHub-->>Author: Fail (request changeset or add skip label)
    end
  else skip-changeset label present
    GitHub-->>Author: Bypass check
  end

  Note over GitHub,Changesets: On push to main
  GitHub->>Repo: Checkout full history
  GitHub->>Changesets: Run changesets/action (version & publish)
  Changesets->>NPM: Publish packages
  Changesets-->>Repo: Commit/version bump commits (if configured)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive The PR description provides context about the migration, identifies the monorepo structure, and references PUBLISHING.md as the source of truth, but appears incomplete (truncated with 'Recovered automatically by Automaker post-agent hook'). Complete the PR description to ensure it covers all required template sections: type of change, related issue, tests added, and the full checklist of verification steps.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main change: migrating the release pipeline from semantic-release to changesets, following the PUBLISHING.md standard.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/migrate-release-pipeline-to-changesets
📝 Coding Plan
  • Generate coding plan for human review comments

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.changeset/README.md:
- Around line 1-31: Run Prettier on the Changesets README to fix CI formatting
failures: format the "Changesets" README.md (ensure fenced code blocks, lists,
headings and spacing conform to Prettier rules), save the changes, stage the
updated README.md, and push so CI can re-run; this targets the markdown file
whose top-level heading is "Changesets".

In @.changeset/release-pipeline-migration.md:
- Around line 1-7: Prettier formatting in the changeset was flagged—run prettier
--write on the changeset files (including
".changeset/release-pipeline-migration.md") to fix formatting, then commit the
formatted file; additionally, if you want finer-grained changelog entries, split
the single changeset that currently lists multiple package bumps ("helixir",
"@helixir/core", "@helixir/github-action") and mixed changes into separate
changeset files, each describing one logical change (e.g., one for release
pipeline migration, one for Zod schema validation, one for miscellaneous
tooling/bugfixes) so the changelog entries are distinct.

In @.github/workflows/changeset.yml:
- Around line 1-30: Add an explicit permissions block to the GitHub Actions
workflow named "Changeset Required" (job "changeset", step "Check for
changeset") to declare minimal read-only access; update the top-level of the
workflow to include permissions: contents: read and pull-requests: read so the
job no longer relies on default permissions and documents the least-privilege
intent.
- Around line 18-22: The LABELS extraction and check using echo "$LABELS" | grep
-q "skip-changeset" is fragile because it can match partial label names; update
the check so it only matches an exact label by either parsing LABELS with jq
(e.g., check if any element equals "skip-changeset") or, if avoiding jq, change
the grep usage to enforce exact matching (word boundaries or a JSON-aware
exact-match regex) when evaluating the if condition that references LABELS and
the grep call.

In @.github/workflows/publish.yml:
- Around line 26-28: The workflow pin currently allows any pnpm major >=9 via
the pnpm/action-setup step (the with: version field), which can cause
non-reproducible runs; change the version value to a fixed release or a tighter
constraint (e.g., "9" or a specific patch like "9.15.0") in the
pnpm/action-setup@v4 step so CI always installs a known pnpm version that
matches your package.json engines.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 57a31896-c36f-4f06-b12b-bd078e2b0bd5

📥 Commits

Reviewing files that changed from the base of the PR and between 433eb5d and 2308edf.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (8)
  • .changeset/README.md
  • .changeset/config.json
  • .changeset/release-pipeline-migration.md
  • .github/workflows/changeset.yml
  • .github/workflows/publish.yml
  • .github/workflows/release.yml
  • .releaserc.json
  • package.json
💤 Files with no reviewable changes (2)
  • .releaserc.json
  • .github/workflows/release.yml

Comment thread .changeset/README.md
Comment thread .github/workflows/changeset.yml
Comment thread .github/workflows/changeset.yml
Comment thread .github/workflows/publish.yml Outdated
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.changeset/release-pipeline-migration.md:
- Line 7: The changeset summary uses the vague phrase "Various tool improvements
and bug fixes" which is not actionable for release notes; replace that phrase in
the .changeset entry with a concise, user-facing bulleted list of the concrete
changes (or split this single changeset into multiple changeset files), e.g.
list the migration from semantic-release, the added Zod schema validation for
design tokens, and each notable tool fix or user-impacting bug by name so the
generated release notes are specific and actionable.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: b4009ce3-a0b9-4dd9-b0f9-114d2f4d2525

📥 Commits

Reviewing files that changed from the base of the PR and between 2308edf and 6249d2d.

📒 Files selected for processing (2)
  • .changeset/README.md
  • .changeset/release-pipeline-migration.md

Comment thread .changeset/release-pipeline-migration.md Outdated
…abel match, changeset description

- Add permissions: contents: read / pull-requests: read to changeset.yml
- Use jq exact match for skip-changeset label (prevent partial name collision)
- Pin pnpm to '9' in publish.yml (reproducible CI installs)
- Replace vague changeset description with specific user-facing bullets

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
.changeset/release-pipeline-migration.md (1)

5-5: ⚠️ Potential issue | 🟡 Minor

Changeset summary is too vague for release notes.

"Various tool improvements and bug fixes" is not actionable for users reading the changelog. Consider either:

  1. Replacing with specific, user-impacting changes (e.g., list the actual tool improvements and bug fixes)
  2. Splitting into separate changesets for the release pipeline migration, Zod schema validation, and individual bug fixes

This ensures the generated release notes clearly communicate what changed to end users.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.changeset/release-pipeline-migration.md at line 5, The changeset summary
"Migrate release pipeline from semantic-release to changesets. Add Zod schema
validation for design token files. Various tool improvements and bug fixes." is
too vague for release notes; update this changeset by either expanding the
summary to list specific, user-facing tool improvements and the concrete bug
fixes (e.g., name the tools changed, specific bugs fixed, and user impact) or
split into multiple changesets so one is titled "Migrate release pipeline to
changesets," another "Add Zod schema validation for design token files," and
separate ones for each distinct bugfix or tooling change; ensure each changeset
body contains actionable, user-facing descriptions so generated release notes
are clear.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.changeset/config.json:
- Around line 1-11: Update the Changesets schema reference in
.changeset/config.json to track the newer minor releases: replace the explicit
"$schema" value "https://unpkg.com/@changesets/config@3.1.2/schema.json" with
either "https://unpkg.com/@changesets/config@3.1.3/schema.json" or the more
future-proof "https://unpkg.com/@changesets/config@3/schema.json" so the config
(including "changelog", "commit", "access", and "ignore") benefits from current
minor updates.

---

Duplicate comments:
In @.changeset/release-pipeline-migration.md:
- Line 5: The changeset summary "Migrate release pipeline from semantic-release
to changesets. Add Zod schema validation for design token files. Various tool
improvements and bug fixes." is too vague for release notes; update this
changeset by either expanding the summary to list specific, user-facing tool
improvements and the concrete bug fixes (e.g., name the tools changed, specific
bugs fixed, and user impact) or split into multiple changesets so one is titled
"Migrate release pipeline to changesets," another "Add Zod schema validation for
design token files," and separate ones for each distinct bugfix or tooling
change; ensure each changeset body contains actionable, user-facing descriptions
so generated release notes are clear.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: b4bc13e3-ebc4-4ff3-a922-b4efa7d9b5db

📥 Commits

Reviewing files that changed from the base of the PR and between 6249d2d and 3848df0.

📒 Files selected for processing (3)
  • .changeset/README.md
  • .changeset/config.json
  • .changeset/release-pipeline-migration.md

Comment thread .changeset/config.json
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant