Skip to content

feat: cut versions automatically in the release sync - #12

Merged
AmrMsCLL merged 1 commit into
mainfrom
feat/auto-cut-releases
Oct 4, 2026
Merged

AmrMsCLL merged 1 commit into
mainfrom
feat/auto-cut-releases

Conversation

@AmrMsCLL

@AmrMsCLL AmrMsCLL commented Oct 4, 2026

Copy link
Copy Markdown
Member

What changed

Removes the need to remember to tag. With --cut, which sync.yml now passes, the daily sync does this for each project with releases: auto:

  1. Attributes commits since its last version tag to the project.
    • A project with paths owns the commits that touch those folders.
    • An epic owns the remaining commits in its repository.
    • A child project without paths is never cut automatically.
  2. Tags the next version if any of those commits is user-facing. The bump is minor for feat or a removal, patch for fixes, style and perf changes, and major for ! or BREAKING CHANGE from 1.0.0 onwards (minor before that). The first version is 0.1.0, and after a prerelease the pending version is released. The tag (vX.Y.Z, or <slug>/vX.Y.Z inside an epic) goes on the project's newest commit, through the platform App.
  3. Drafts the entry in the same run, using the same PR and merge flow as today.

Tags people push by hand are still recorded. releases: manual projects (graphite-ui) are only recorded, never cut. Drafting a manual tag now also uses paths when set, instead of the sibling-name heuristic.

Without --cut, npm run sync:releases stays read-only and only reports what it would tag.

Depends on platform#22 (paths and releases in the registry, already merged and synced here), Project-Graphite/windhawk-mods#3 (mod paths) and Project-Graphite/graphite-ui#10 (releases: manual).

Verification

  • npm test: 18 pass, including the new nextVersion cases. npm run lint, format:check and build pass, and check-routes finds 25 routes.
  • Dry run against GitHub: it would tag strata@v0.2.0, which has 40 feature commits since v0.1.0. Every other project has no user-facing commits since its last tag. It drafted graphite-ui 0.2.0 and 0.2.1 from their existing tags correctly; I removed those drafts so the first real run creates them.
  • None of the auto repositories (strata, graphite-tracker, graphite-message-lab, digital-to-physical, windhawk-mods) has a workflow triggered by tags, so an automatic tag starts no build or deploy.

Checklist

  • The change is focused and contains no credentials or generated secrets.
  • Documentation and tests were updated when behavior changed. Tests were added; README.md does not describe the changelog yet.
  • Deployment or rollback considerations are described when relevant.

The sync still needs the PLATFORM_APP_CLIENT_ID and PLATFORM_APP_PRIVATE_KEY repository secrets on graphite-hub. Every scheduled run since 2026-10-02 has failed without them. Rollback: revert, or drop -- --cut in sync.yml to return to recording only.

For every project with releases: auto, the daily sync now tags the next version at its newest commit when user-facing commits have landed since the last tag: minor for features or removals, patch for fixes and other changes, major for breaking changes from 1.0.0. Commits are attributed by the project's paths, so projects inside an epic version on their own. Without --cut the script only reports what it would tag.
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying graphite-hub with  Cloudflare Pages  Cloudflare Pages

Latest commit: 15503b0
Status: ✅  Deploy successful!
Preview URL: https://477e45ec.portfolio-bo7.pages.dev
Branch Preview URL: https://feat-auto-cut-releases.portfolio-bo7.pages.dev

View logs

@github-actions github-actions Bot added the size/m 51-200 changed lines, excluding lockfiles label Oct 4, 2026
@AmrMsCLL
AmrMsCLL merged commit 2f89ddc into main Oct 4, 2026
5 checks passed
@AmrMsCLL
AmrMsCLL deleted the feat/auto-cut-releases branch October 4, 2026 12:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/m 51-200 changed lines, excluding lockfiles

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant