Skip to content

feat: Replace changesets with lightweight .changes system and automate release#436

Open
hhvrc wants to merge 4 commits intodevelopfrom
chore/replace-changesets-with-changes
Open

feat: Replace changesets with lightweight .changes system and automate release#436
hhvrc wants to merge 4 commits intodevelopfrom
chore/replace-changesets-with-changes

Conversation

@hhvrc
Copy link
Copy Markdown
Contributor

@hhvrc hhvrc commented Mar 26, 2026

This pull request introduces a new automated release workflow for the project, centered around a file-based changelog system and a Python release helper script. It migrates changelog entries to individual markdown files in a .changes directory, adds a comprehensive release management script (scripts/release.py), and updates CI/CD workflows to use these new mechanisms. The changes streamline release candidate and stable release creation, changelog enforcement, and frontend/release note presentation.

Key changes include:

Release Management System:

  • Added .changes/README.md describing the new changelog file format and release workflow, including YAML frontmatter, changelog/summary/notice sections, and usage instructions.
  • Introduced scripts/release.py, a Python script to collect, parse, and process .changes/*.md files, determine the correct version bump, generate and prepend changelog entries, export a release.json for the website, and manage git tags for RC and stable releases.

CI/CD Workflow Updates:

  • Added .github/workflows/release.yml to automate release candidate and stable tag creation based on the beta and master branches, using the new release script and a personal access token for downstream workflow triggers.
  • Updated .github/scripts/get-vars.js to enforce changelog requirements only for stable tags, allow RC/beta/dev tags without changelog entries, and ensure changelog entries are at the top for stable releases. Also, only stable tags are now required to be present in the changelog. [1] [2] [3] [4]
  • Modified .github/workflows/ci-build.yml to only trigger on the develop branch and version tags, removing direct CI runs on master and beta (these are now handled by the new release workflow).

Changelog Migration:

  • Migrated all pending changelog entries to the new .changes/*.md format, including bug fixes, major features (setup wizard, REST API migration, frontend rewrite, LED driver overhaul), and device support. [1] [2] [3] [4] [5]
  • Removed old .changeset/*.md files that are now obsolete under the new system. [1] [2] [3]

These changes modernize and automate the project's release process, making it easier to track, review, and publish releases with structured changelog data and improved CI/CD integration.

hhvrc and others added 2 commits March 27, 2026 00:06
Remove @changesets/cli dependency and .changeset directory. Add a simple
.changes/ directory with markdown files using YAML frontmatter for semver
bump type, technical changelog entry (title + body), optional user-facing
summary, and optional structured notices (info/warning/error) for the
website UI.

Add scripts/release.py to automate:
- status: show pending changes and computed next version
- rc: create or bump a release candidate tag
- stable: consume changes into CHANGELOG.md, export release.json, tag

Clean up CHANGELOG.md to remove all RC entries, keeping only stable
release notes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add release.yml workflow:
- Beta push: auto-creates RC tag (1.6.0-rc.N)
- Master push: consumes .changes/, updates CHANGELOG.md, creates stable tag
- Requires RELEASE_TOKEN PAT secret for cross-workflow triggering

Update ci-build.yml:
- Remove master/beta from push triggers (handled by tags from release.yml)
- Keep develop push deploys and tag-triggered builds

Update get-vars.js:
- Only validate stable tags against CHANGELOG.md (skip RC/beta/dev)
- RC tags no longer require changelog entries

Update release.py:
- Output release JSON to stdout for CI to send to repository API
- No longer writes release.json to disk

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Require PRs into develop to include a .changes/*.md file. PRs labeled
"no-changelog" are exempt (for dependency bumps, CI-only changes, etc.).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@hhvrc hhvrc moved this from Todo to In Progress in Roadmap Mar 26, 2026
@hhvrc hhvrc added this to the 1.6.0 Release milestone Mar 26, 2026
@hhvrc hhvrc requested a review from Copilot April 20, 2026 08:56
@hhvrc hhvrc self-assigned this Apr 20, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR replaces the existing changesets-based release process with a lightweight .changes/*.md changelog system, a Python release helper (scripts/release.py), and updated GitHub workflows to automate RC and stable releases.

Changes:

  • Added scripts/release.py to compute semver bumps from .changes files, generate/prepend CHANGELOG.md entries, and create git tags for RC/stable.
  • Introduced new release automation (.github/workflows/release.yml) and PR enforcement (.github/workflows/check-changes.yml) around .changes/*.md.
  • Updated changelog/tag enforcement logic in .github/scripts/get-vars.js and removed legacy RC entries from CHANGELOG.md.

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
scripts/release.py New release helper that parses .changes files, generates changelog content, and tags/commits releases.
CHANGELOG.md Removes historical RC entries and minor text tweaks to align with new release process.
.github/workflows/release.yml New workflow to auto-tag RC (beta) and stable (master) using the release script.
.github/workflows/ci-build.yml Adjusts CI triggers to stop running on direct master/beta pushes.
.github/workflows/check-changes.yml New PR workflow requiring a .changes/*.md file unless labeled no-changelog.
.github/scripts/get-vars.js Updates changelog validation to only require entries for stable tags and excludes prerelease tags from enforcement.
.changes/*.md Migrated pending changes into the new .changes markdown format.
.changes/README.md Documentation for the new .changes file format and release workflow.
.changeset/*.md Removes obsolete changeset files.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread scripts/release.py Outdated
Comment thread scripts/release.py Outdated
Comment thread scripts/release.py
Comment thread .github/scripts/get-vars.js Outdated
Comment thread .github/workflows/check-changes.yml Outdated
Comment thread .github/workflows/check-changes.yml Outdated
Comment thread .changes/README.md Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

2 participants