CEXT-6367: implement skills release process and promotion workflow#540
Conversation
🦋 Changeset detectedLatest commit: d5e5f4f The changes in this PR will be included in the next version bump. This PR includes changesets to release 2 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
9e30f3d to
d4a0809
Compare
# Conflicts: # plugins/commerce/app-management/skills/commerce-app-admin-ui/SKILL.md
iivvaannxx
left a comment
There was a problem hiding this comment.
I have a feeling many logic in the promote-skills script can probably be removed and repalced by one of the many packages that changesets offers to work with their files. See their packages (many are published to npm and you can pull them in as deps in the scripts workspace)
|
Also, do we want to handle promotion/publish to the Tessl registry? |
Only one set of skills in adobe/skills is published in Tessl registry. From my perspective, the tool is under evaluation, I'd keep it to asses if is useful for us for testing without wasting much effort. |
This reverts commit d4a0809.
Looked into this TLDR; none of the packages under changesets actually cover what this script needs.
|
- derive TARGET_REPOSITORY_URL from TARGET_OWNER/TARGET_REPO - collapse promotion cp calls into a loop over PROMOTED_ENTRIES - explain why the changed-plugins workflow step gates on hasChangesets - move sync-plugin-version.mjs into scripts/ as an sdk-sync-plugin-version bin, wired the same way as sdk-prepack/sdk-postpack, and dedupe its readJson/writeJson helpers with promote-skills.ts via ci/release/utils.ts
# Conflicts: # plugins/commerce/app-management/skills/commerce-app-storage/SKILL.md
writeJson wrote plain JSON.stringify output, which always expands arrays onto multiple lines. Biome collapses short arrays onto one line, so any plugin version bump touching a manifest with an array field (e.g. tile.json/plugin.json keywords) failed the pre-commit hook. writeJson now runs biome check --write on the file after writing it. Also fixes plugins/commerce/app-management's package.json version, which was left at 1.1.2 after merging main: main directly bumped tile.json and .claude-plugin/plugin.json to 1.1.3 for #553 before this branch introduced package.json as the source of truth.
iivvaannxx
left a comment
There was a problem hiding this comment.
Approving. Regarding the Changesets utility packages, I did run Opus to check and it did actually find one potential replacement. Find below what it said.
Review: new scripts/ code vs. Changesets built-ins
I read the three new source files against the upstream Changesets v3 clone in changesets/. One clear reinvention, a couple of weak/partial overlaps, and one thing that is not reinventable. Details:
- Solid replacement — readChangelogEntries → getChangelogEntry
promote-skills.ts:295-324 hand-rolls a changelog parser: indexOf("## " + version), slice to the next ## , keep lines starting with - .
Changesets already ships this as getChangelogEntry(changelog, version) from @changesets/release-utils (changesets/packages/release-utils/src/utils.ts:33), and it's exported from the package root. It's strictly more robust than the local version — it skips fenced code blocks so it won't match ## headings inside example snippets, and it matches the closing heading by depth instead of any ## .
- Drop: readChangelogEntries (30 lines).
- Replace with: import { getChangelogEntry } from "@changesets/release-utils" (add it as a devDependency — it's not in the lockfile yet, only @changesets/git is present transitively).
- Caveat (behavior change): the local fn returns only - bullet lines as string[]; getChangelogEntry returns { content, highestLevel } where content is the full markdown block (including ### Minor Changes sub-headings). Your buildPromotionPullRequestBody (promote-skills.ts:227) would need to embed content instead of joining a bullet array. The resulting PR body is arguably better (keeps the bump-level subheadings), but it's a visible format change — worth a glance at the promote-skills test snapshots.
@iivvaannxx looked into this, the mentioned function it is not stable yet and is part of a major changesets upgrade (3.0.0). Therefore, I just added a note in our function so when the new changesets version is released we revaluate if we can change the impl to rely on the changesets' counterpart. |
promote-skills.ts and sync-plugin-version.ts only exist on this branch, so the aa985d5 lint fixup missed them. Parallelize the independent per-item loops with Promise.all to satisfy noAwaitInLoops, and let biome sort the object keys it flagged.
…f tile.json The tessl migration (353577d) replaced tile.json with .tessl-plugin/plugin.json for app-management and app-migration but never updated the code and docs that still pointed at the old path, breaking version-consistency.test.ts. That migration also manually bumped the manifest versions (1.1.3->1.1.4 for app-management, 1.0.0->1.1.1 for app-migration) without bumping package.json, which is supposed to be the authoritative source. Bump package.json to match since the manifest versions are the ones already reflected downstream.
* CEXT-6367: extract MAINTAINERS.md from DEVELOPMENT.md Move maintainer-only release execution steps (triggering promote.yml, hotfixes, deploy key rotation, ADOBE_SKILLS_TOKEN provisioning) out of the contributor-facing DEVELOPMENT.md into a dedicated MAINTAINERS.md, per discussion on PR #540. * CEXT-6367: add labeler entries for commerce plugin packages plugins/commerce/* was registered as a workspace member for the skills release process, but the PR labeler never got matching entries, so PRs touching plugin packages received no package-specific label. Also note in AGENTS.md that new packages need a labeler-config.yml entry, since the create-package generator doesn't add one automatically. * CEXT-6367: move /snapshot PR command to MAINTAINERS.md The docs claimed any open PR could request a snapshot via /snapshot, but the workflow that handles the comment requires admin permission on the repo, making it a maintainer-only action. * Update .github/labeler-config.yml Co-authored-by: Ivan Porto Wigner <iporto@adobe.com> * Update .github/CONTRIBUTING.md Co-authored-by: Ivan Porto Wigner <iporto@adobe.com> * CEXT-6367: move Back-sync section to MAINTAINERS.md --------- Co-authored-by: Ivan Porto Wigner <iporto@adobe.com>
Description
Implements the skills release process defined in the spec PR. Plugin packages gain
package.jsonfiles so changesets can version them, thepublish-public.ymlworkflow gains a promotion step that opens a PR inadobe/skillson release, and a shared sync script keepstile.jsonand.claude-plugin/plugin.jsonin sync with the authoritativepackage.jsonversion.Related Issue
https://jira.corp.adobe.com/browse/CEXT-6367
Motivation and Context
Commerce plugins in
adobe/aio-commerce-sdkhave no automated path toadobe/skills. Without this, production consumers cannot install them through the stable channel and promotion requires manual file copying with no traceability.How Has This Been Tested?
Unit tests cover the full promotion script: plugin version detection, artifact preparation, the full git path (checkout → copy → commit → push → PR create/update), and idempotent reruns. A version-consistency regression test asserts that
package.json,tile.json, and.claude-plugin/plugin.jsonall carry the same version for every plugin.Types of changes
Checklist: