Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/align-release-token-dry.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@sfmc-bds/tools": patch
---

发版编排:GitHub Release 缺失态回退复用 listPackagesWithExistingVersionTags;文档/workflow 对齐 SFMC_GITHUB_TOKEN(兼容旧名)
4 changes: 2 additions & 2 deletions .github/workflows/changeset-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
# Version PR 需要「创建 PR」权限。仅用 GITHUB_TOKEN 且仓库关闭
# Settings→Actions→General→「Allow GitHub Actions to create and approve pull requests」时,
# changesets/action 会 HttpError(分支已推送但 PR 未创建)。
# 优先 PAT Secret CHANGESETS_GITHUB_TOKEN;未配置则回退 GITHUB_TOKEN(需上述勾选)
# 优先 PAT:SFMC_GITHUB_TOKEN(权威名);兼容旧名 CHANGESETS_GITHUB_TOKEN;再回退 GITHUB_TOKEN。
- name: Create Release Pull Request or Publish
id: changesets
uses: changesets/action@v1
Expand All @@ -63,6 +63,6 @@ jobs:
commit: "chore(release): version packages"
createGithubReleases: false
env:
GITHUB_TOKEN: ${{ secrets.SFMC_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.SFMC_GITHUB_TOKEN || secrets.CHANGESETS_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
4 changes: 2 additions & 2 deletions docs/dev/npm-publish.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
任选其一:

1. **推荐(零 Secret)**:Repo Settings → Actions → General → Workflow permissions → 勾选 *Allow GitHub Actions to create and approve pull requests*。
2. **PAT**:写入 Secret **`CHANGESETS_GITHUB_TOKEN`**(能开本仓 PR);workflow 优先用该 token,未配置时回退 `GITHUB_TOKEN`。
2. **PAT**:写入 Secret **`SFMC_GITHUB_TOKEN`**(能开本仓 PR);workflow 优先用该 token,其次兼容旧名 `CHANGESETS_GITHUB_TOKEN`,再回退 `GITHUB_TOKEN`。

### 本地一键发版(`npm-run-all2`)

Expand Down Expand Up @@ -108,7 +108,7 @@ npm run pack:verify

1. npm 账号登录并确认 org [sfmc-bds](https://www.npmjs.com/org/sfmc-bds)
2. Granular Access Token(Automation)写入 GitHub Secret `NPM_TOKEN`
3. (可选)若无法开启 Actions「create and approve pull requests」:写入 `CHANGESETS_GITHUB_TOKEN`(见上文 Version PR 权限)
3. (可选)若无法开启 Actions「create and approve pull requests」:写入 `SFMC_GITHUB_TOKEN`(见上文 Version PR 权限;旧名 `CHANGESETS_GITHUB_TOKEN` 仍可用

## 模块包

Expand Down
15 changes: 3 additions & 12 deletions tools/changeset-github-release.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,8 @@ import path from "node:path";
import {
ROOT,
extractChangelogNotes,
gitCapture,
listPublishablePackages,
listPackagesWithExistingVersionTags,
packageDirFor,
packageTagName,
readReleaseTagsState,
resolveReleaseTagEntries,
run,
Expand All @@ -26,17 +24,10 @@ const forceLatest = process.argv.includes("--latest");

function loadTargets() {
const state = readReleaseTagsState();
/* DRY:缺失态回退与 tag-packages / resolvePackagesNeedingTags 共用同一权威实现 */
const entries = resolveReleaseTagEntries(state, () => {
/* 仅状态文件缺失时回退:当前版本对应 tag 已在本地的可发包 */
console.warn("[changeset] 无 .sfmc-release-tags.json,回退扫描本地 name@version tag");
const out = [];
for (const p of listPublishablePackages()) {
const tag = packageTagName(p.name, p.version);
if (gitCapture(["tag", "-l", tag])) {
out.push({ name: p.name, version: p.version, tag });
}
}
return out;
return listPackagesWithExistingVersionTags();
});
return entries.map((t) => ({
name: t.name,
Expand Down
10 changes: 10 additions & 0 deletions tools/changeset-release.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
packageTagName,
extractChangelogNotes,
listPendingChangesetFiles,
listPackagesWithExistingVersionTags,
resolveReleaseTagEntries,
RELEASE_TAGS_STATE,
PRE_JSON,
Expand Down Expand Up @@ -71,6 +72,15 @@ describe("resolveReleaseTagEntries (LSP)", () => {
const out = resolveReleaseTagEntries({ tags, createdAt: "t" }, () => []);
assert.equal(out, tags);
});

it("gh-release missing-state fallback is listPackagesWithExistingVersionTags (DRY)", () => {
/* 契约:changeset-github-release 不得再手写一遍 tag -l 扫描 */
const out = resolveReleaseTagEntries(null, () => listPackagesWithExistingVersionTags());
assert.ok(Array.isArray(out));
for (const e of out) {
assert.equal(e.tag, packageTagName(e.name, e.version));
}
});
});

describe("listPendingChangesetFiles (pre mode LSP)", () => {
Expand Down