Add changelog automation for sdk's 9 publishable packages#15
Merged
Conversation
docs/superpowers/ (specs, plans) and .superpowers/ (subagent-driven progress ledger) are local working files, never meant to land in this repo's history.
- changelog-publish.yml: also trigger on `prereleased` (GitHub fires that, not `released`, for a pre-release publish), and add a `concurrency` group so two releases published close together can't race pushing to master. - changelog-draft.yml: write generated notes to $RUNNER_TEMP/notes.md instead of the shared /tmp, since the self-hosted runner is persistent. - generate.mjs: resolve a "no prior tag" `git describe` failure to no previous tag instead of throwing, so a package's first-ever tagged release generates notes from full history instead of crashing.
fbdbf19 to
47783bd
Compare
Also adds packages/sdk-reactnative/CHANGELOG.md, which didn't exist yet. Both use the corrected/complete history (fixes typos and dates vs. the previous partial sdk-flutter file), formatted so future entries from changelog-publish.yml still insert above this content correctly (verified: prependSection anchors on the leading title block since none of these legacy headings match the `## v` pattern).
Also adds the same 4.0.2 entry to sdk-maui, above its existing 0.1.0 entry. Both wrappers were missing a changelog entry for the native Android/iOS 4.0.2 bump that sdk-flutter and sdk-reactnative already document. sdk-kmp had no CHANGELOG.md at all yet.
The pasted historical content had lost its markdown links along the way (plain "Release Notes" text). Restored them using the same per-platform Notion URLs sdk-maui's original entry already used, applied consistently across all four mobile SDK changelogs.
Adds packages/sdk-android/CHANGELOG.md and packages/sdk-ios/CHANGELOG.md with their full historical release notes, and repoints every wrapper changelog's "Release Notes" link (sdk-flutter, sdk-reactnative, sdk-kmp, sdk-maui) from the old Notion pages to these files. Absolute GitHub blob URLs, not relative paths: these wrapper packages get published standalone to pub.dev/npm/NuGet/Maven, which don't preserve sibling directories. Not yet wired into changelog-draft/publish.yml — native releases don't happen via tags in this repo, so these two files are hosted here as the source of truth for now, pending the sdk-ios/sdk-android automation phase.
The quoted form relied on node --test's own glob support, which differs between Node versions: works on Node 26 (local), but Node 24 (this repo's CI runner) treats the literal '*.test.mjs' string as a single file path and fails with "Could not find". Unquoting lets the shell expand the glob before node ever sees it, which is portable across Node versions.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
scripts/changelog/packages.mjs) instead of duplicating 18 workflow files.changelog-draft.yml: on a package tag push, generates release notes from that package's commit range viaclaude -pand opens a DRAFT GitHub release.changelog-publish.yml: when a human publishes that draft, syncs the final notes intopackages/<dir>/CHANGELOG.mdand commits straight tomaster(no branch protection on this repo, so no bot PAT needed).sync.mjs'sprependSectionnow correctly inserts new entries above legacy content inpackages/sdk-flutter/CHANGELOG.mdandpackages/sdk-maui/CHANGELOG.md, which predate the## vX.Y.Zheading convention (the ported original would have silently appended at the bottom instead).Design spec and implementation plan (local-only, not part of this repo — see
.gitignore) are available on request if useful for review context.Test plan
npm run test:changelog— 46/46 tests pass (package mapping, secret-scan gate, generator, sync, resolve-package CLI)npm test— full existing suite green, no regressionsnode scripts/changelog/generate.mjs --tag @screeb/sdk-browser@0.7.0 --format=releaseproduced correct, properly-grouped Markdown against real repo historyyaml.safe_loadpackages/sdk-flutter/CHANGELOG.mdandpackages/sdk-maui/CHANGELOG.mdare untouched by this PR (only affected the next time a real release runs throughchangelog-publish.yml)CLAUDE_CODE_OAUTH_TOKENrepo secret must be added toScreebApp/sdk(same as already exists onScreebApp/screeb) beforechangelog-draft.ymlcan run in CI🤖 Generated with Claude Code