@icebreakers/monorepo-templates 2.3.1 → 2.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -95,7 +95,6 @@ jobs:
95
95
  with:
96
96
  node-version: 24
97
97
  cache: pnpm
98
- registry-url: https://registry.npmjs.org
99
98
 
100
99
  - name: Install npm with trusted publishing support
101
100
  run: npm install --global npm@11.16.0 --registry=https://registry.npmjs.org
@@ -103,7 +102,8 @@ jobs:
103
102
  - name: Install Dependencies
104
103
  run: pnpm install --frozen-lockfile
105
104
 
106
- - name: Run repo release CI
105
+ - name: Release plan
106
+ id: release-plan
107
107
  env:
108
108
  GITHUB_TOKEN: ${{ steps.app-token.outputs.token || secrets.REPOCTL_RELEASE_TOKEN || secrets.CHANGESETS_RELEASE_TOKEN || github.token }}
109
109
  REPO_RELEASE_MODE: ${{ inputs.mode || 'auto' }}
@@ -111,7 +111,67 @@ jobs:
111
111
  REPO_RELEASE_VERSION: ${{ inputs.version }}
112
112
  REPO_RELEASE_DRY_RUN: ${{ inputs.dry-run }}
113
113
  REPO_RELEASE_RECOVERY_SOURCE_SHA: ${{ inputs.source-sha }}
114
- run: pnpm exec repo release ci
114
+ run: pnpm exec repo release ci --stage plan
115
+
116
+ - name: Release verify
117
+ id: release-verify
118
+ if: ${{ steps.release-plan.outputs.run == 'true' }}
119
+ env:
120
+ GITHUB_TOKEN: ${{ steps.app-token.outputs.token || secrets.REPOCTL_RELEASE_TOKEN || secrets.CHANGESETS_RELEASE_TOKEN || github.token }}
121
+ REPO_RELEASE_MODE: ${{ inputs.mode || 'auto' }}
122
+ REPO_RELEASE_PACKAGE: ${{ inputs.package }}
123
+ REPO_RELEASE_VERSION: ${{ inputs.version }}
124
+ REPO_RELEASE_DRY_RUN: ${{ inputs.dry-run }}
125
+ REPO_RELEASE_RECOVERY_SOURCE_SHA: ${{ inputs.source-sha }}
126
+ run: pnpm exec repo release ci --stage verify
127
+
128
+ - name: Release prepare
129
+ id: release-prepare
130
+ if: ${{ steps.release-plan.outputs.run == 'true' }}
131
+ env:
132
+ GITHUB_TOKEN: ${{ steps.app-token.outputs.token || secrets.REPOCTL_RELEASE_TOKEN || secrets.CHANGESETS_RELEASE_TOKEN || github.token }}
133
+ REPO_RELEASE_MODE: ${{ inputs.mode || 'auto' }}
134
+ REPO_RELEASE_PACKAGE: ${{ inputs.package }}
135
+ REPO_RELEASE_VERSION: ${{ inputs.version }}
136
+ REPO_RELEASE_DRY_RUN: ${{ inputs.dry-run }}
137
+ REPO_RELEASE_RECOVERY_SOURCE_SHA: ${{ inputs.source-sha }}
138
+ run: pnpm exec repo release ci --stage prepare
139
+
140
+ - name: Release upload
141
+ id: release-upload
142
+ if: ${{ steps.release-prepare.outputs.publish == 'true' }}
143
+ env:
144
+ GITHUB_TOKEN: ${{ steps.app-token.outputs.token || secrets.REPOCTL_RELEASE_TOKEN || secrets.CHANGESETS_RELEASE_TOKEN || github.token }}
145
+ REPO_RELEASE_MODE: ${{ inputs.mode || 'auto' }}
146
+ REPO_RELEASE_PACKAGE: ${{ inputs.package }}
147
+ REPO_RELEASE_VERSION: ${{ inputs.version }}
148
+ REPO_RELEASE_DRY_RUN: ${{ inputs.dry-run }}
149
+ REPO_RELEASE_RECOVERY_SOURCE_SHA: ${{ inputs.source-sha }}
150
+ run: pnpm exec repo release ci --stage upload
151
+
152
+ - name: Release confirm
153
+ id: release-confirm
154
+ if: ${{ steps.release-prepare.outputs.publish == 'true' }}
155
+ env:
156
+ GITHUB_TOKEN: ${{ steps.app-token.outputs.token || secrets.REPOCTL_RELEASE_TOKEN || secrets.CHANGESETS_RELEASE_TOKEN || github.token }}
157
+ REPO_RELEASE_MODE: ${{ inputs.mode || 'auto' }}
158
+ REPO_RELEASE_PACKAGE: ${{ inputs.package }}
159
+ REPO_RELEASE_VERSION: ${{ inputs.version }}
160
+ REPO_RELEASE_DRY_RUN: ${{ inputs.dry-run }}
161
+ REPO_RELEASE_RECOVERY_SOURCE_SHA: ${{ inputs.source-sha }}
162
+ run: pnpm exec repo release ci --stage confirm
163
+
164
+ - name: Release finalize
165
+ id: release-finalize
166
+ if: ${{ steps.release-prepare.outputs.publish == 'true' }}
167
+ env:
168
+ GITHUB_TOKEN: ${{ steps.app-token.outputs.token || secrets.REPOCTL_RELEASE_TOKEN || secrets.CHANGESETS_RELEASE_TOKEN || github.token }}
169
+ REPO_RELEASE_MODE: ${{ inputs.mode || 'auto' }}
170
+ REPO_RELEASE_PACKAGE: ${{ inputs.package }}
171
+ REPO_RELEASE_VERSION: ${{ inputs.version }}
172
+ REPO_RELEASE_DRY_RUN: ${{ inputs.dry-run }}
173
+ REPO_RELEASE_RECOVERY_SOURCE_SHA: ${{ inputs.source-sha }}
174
+ run: pnpm exec repo release ci --stage finalize
115
175
 
116
176
  - name: Preserve npm publish progress
117
177
  if: ${{ always() }}
@@ -122,6 +182,7 @@ jobs:
122
182
  pnpm-publish-summary.json
123
183
  repoctl-publish-progress.json
124
184
  repoctl-release-progress.json
185
+ repoctl-ci-progress.json
125
186
  if-no-files-found: ignore
126
187
  retention-days: 14
127
188
 
package/assets/gitignore CHANGED
@@ -48,3 +48,5 @@ config.ts.timestamp-*.mjs
48
48
  /repoctl-publish-progress.json.*.tmp
49
49
 
50
50
  /repoctl-release-progress.json
51
+
52
+ /repoctl-ci-progress.json
@@ -50,7 +50,9 @@
50
50
  "postinstall": "pnpm run build",
51
51
  "commit": "commit",
52
52
  "commitlint": "commitlint --edit",
53
- "sync": "turbo run sync",
53
+ "sync": "pnpm sync:npmmirror",
54
+ "sync:npmmirror": "repo release sync-npmmirror --all",
55
+ "release:sync-npmmirror": "repo release sync-npmmirror --published",
54
56
  "inspector": "npx @eslint/config-inspector",
55
57
  "build:inspector": "pnpm build && npx @eslint/config-inspector build",
56
58
  "-------": "---------------",
@@ -19,7 +19,7 @@ overrides:
19
19
  prettier: 3.9.9
20
20
  typescript: 6.0.3
21
21
  "@arethetypeswrong/core>typescript": 5.9.3
22
- vite: 8.3.3
22
+ vite: 8.3.4
23
23
  postcss: 8.5.29
24
24
  postcss-selector-parser: 7.1.6
25
25
  js-yaml: 5.4.3
@@ -6,6 +6,8 @@
6
6
  ":semanticCommitTypeAll(chore)"
7
7
  ],
8
8
  "rangeStrategy": "bump",
9
+ "minimumReleaseAge": "7 days",
10
+ "internalChecksFilter": "strict",
9
11
  "gitIgnoredAuthors": [
10
12
  "41898282+github-actions[bot]@users.noreply.github.com",
11
13
  "335527025+auto-upgrade-deps[bot]@users.noreply.github.com"
@@ -37,6 +39,17 @@
37
39
  ],
38
40
  "groupName": "Cloudflare Workers tooling",
39
41
  "groupSlug": "cloudflare-workers-tooling"
42
+ },
43
+ {
44
+ "matchManagers": [
45
+ "npm"
46
+ ],
47
+ "matchPackageNames": [
48
+ "@cloudflare/nimbus-docs"
49
+ ],
50
+ "groupName": "Nimbus documentation engine",
51
+ "groupSlug": "nimbus-documentation-engine",
52
+ "automerge": false
40
53
  }
41
54
  ]
42
55
  }
@@ -2,6 +2,11 @@ import type { MonorepoConfig } from 'repoctl'
2
2
 
3
3
  export default {
4
4
  commands: {
5
+ release: {
6
+ hooks: {
7
+ afterPublish: [{ script: 'release:sync-npmmirror', continueOnError: true, idempotent: true }],
8
+ },
9
+ },
5
10
  create: {
6
11
  defaultTemplate: 'tsdown',
7
12
  renameJson: false,
package/dist/cli.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { t as prepareAssets } from "./prepare-BYNSxvoB.mjs";
1
+ import { t as prepareAssets } from "./prepare-3Vhzg3fr.mjs";
2
2
  import process from "node:process";
3
3
  //#region src/cli.ts
4
4
  async function main() {
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { a as isGitignoreFile, c as toWorkspaceGitignorePath, d as packageDir, f as skeletonDir, h as getAssetTargets$1, i as shouldSkipTemplatePath, l as templateChoices$1, m as assetTargets$1, n as sanitizePublishedWorkspaceContent, o as toPublishGitignorePath, p as templatesDir, r as createTemplateCopyFilter, s as toWorkspaceAssetPath, t as prepareAssets, u as assetsDir } from "./prepare-BYNSxvoB.mjs";
1
+ import { a as isGitignoreFile, c as toWorkspaceGitignorePath, d as packageDir, f as skeletonDir, h as getAssetTargets$1, i as shouldSkipTemplatePath, l as templateChoices$1, m as assetTargets$1, n as sanitizePublishedWorkspaceContent, o as toPublishGitignorePath, p as templatesDir, r as createTemplateCopyFilter, s as toWorkspaceAssetPath, t as prepareAssets, u as assetsDir } from "./prepare-3Vhzg3fr.mjs";
2
2
  import path from "node:path";
3
3
  import fs, { access, open, readFile, rm } from "node:fs/promises";
4
4
  import { Buffer } from "node:buffer";
@@ -208,6 +208,7 @@ function createTemplateCopyFilter(rootDir) {
208
208
  const sourceScriptNames = /* @__PURE__ */ new Set([
209
209
  "tooling:build",
210
210
  "check:no-tracked-build-artifacts",
211
+ "check:nimbus-upgrade",
211
212
  "check:workflows",
212
213
  "test:dev-scenarios",
213
214
  "test:worker-types"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@icebreakers/monorepo-templates",
3
3
  "type": "module",
4
- "version": "2.3.1",
4
+ "version": "2.3.3",
5
5
  "description": "Built-in project templates and managed workspace assets for repoctl",
6
6
  "author": "ice breaker <hi@sonofmagic.top>",
7
7
  "license": "MIT",
@@ -39,8 +39,8 @@
39
39
  "@faker-js/faker": "^10.6.0",
40
40
  "@tanstack/vue-query": "^5.104.1",
41
41
  "@tanstack/vue-query-devtools": "^6.3.1",
42
- "@tanstack/vue-table": "^9.2.7",
43
- "@tanstack/vue-virtual": "^3.13.39",
42
+ "@tanstack/vue-table": "^9.2.8",
43
+ "@tanstack/vue-virtual": "^3.13.40",
44
44
  "@trpc/client": "^11.19.0",
45
45
  "clsx": "^2.1.1",
46
46
  "pinia": "^4.0.3",
@@ -63,7 +63,7 @@
63
63
  "hono": "^4.13.13",
64
64
  "tailwindcss": "^4.3.3",
65
65
  "typescript": "~6.0.3",
66
- "vite": "^8.3.3",
66
+ "vite": "^8.3.4",
67
67
  "vite-plugin-vue-devtools": "^8.2.1",
68
68
  "vite-tsconfig-paths": "^6.1.1",
69
69
  "vue-tsc": "3.3.12",
@@ -14,4 +14,26 @@ pnpm typecheck
14
14
 
15
15
  Edit `src/content/docs/` and its `zh/` translations. Set your project title and canonical site URL in `astro.config.ts` before publishing `dist/` to a static host. Search is available after a production build.
16
16
 
17
- 机器可读入口包括 `/llms.txt`、`/zh/llms.txt`、`/llms-full.txt`,以及页面的 `/index.md` 和 `/index.mdx`。详见 `AGENTS.md` 和 `UPSTREAM.md`。
17
+ 机器可读入口包括 `/llms.txt`、`/zh/llms.txt`、`/llms-full.txt`,以及页面的 `/index.md` 和 `/index.mdx`。Nimbus 还会生成 `/.well-known/ard.json`、`/.well-known/ai-catalog.json` 和 `dist/_headers` 中的发现响应头。静态托管需要应用这些响应头;不支持 `_headers` 的主机应配置等效规则。使用子路径部署时,发现文件仍须发布到域名根目录的 `/.well-known/`,并在那里应用对应响应头规则。详见 `AGENTS.md` 和 `UPSTREAM.md`。
18
+
19
+ ## Upgrading Nimbus / 升级 Nimbus
20
+
21
+ Nimbus updates can require review even within a minor release. Keep its dependency pinned to an exact version and review the migration report before advancing `nimbus.json`.
22
+
23
+ 更新依赖后,先在 monorepo 根目录运行 `pnpm install --ignore-scripts`,再在此目录检查迁移要求:
24
+
25
+ ```sh
26
+ pnpm exec nimbus-docs migrate --dry-run --json
27
+ ```
28
+
29
+ 逐项核对适用条件并完成必要修改,在 `UPSTREAM.md` 记录审阅结论,再通过官方命令记录基线并验证:
30
+
31
+ ```sh
32
+ pnpm exec nimbus-docs migrate --yes
33
+ pnpm exec nimbus-docs check --migrations
34
+ pnpm build
35
+ pnpm lint
36
+ pnpm typecheck
37
+ ```
38
+
39
+ 不要只修改审阅版本来跳过迁移。部署前检查发现文件、首页 Link 响应头,以及中英文页面和机器可读入口。
@@ -4,13 +4,31 @@ This template adapts the static empty starter from [Cloudflare Nimbus](https://g
4
4
 
5
5
  - Starter tag: `templates-v0.7.9`
6
6
  - Starter commit: `aae348048a8c659f84c39696ee6b20c2ad2f5ae2`
7
- - Nimbus package: `@cloudflare/nimbus-docs@0.16.0`
8
- - Astro: `7.3.6`
7
+ - Nimbus package: `@cloudflare/nimbus-docs@0.17.0`
8
+ - Nimbus release commit: `1951de5cc3e420a5e672f192c334584216716c1e`
9
+ - Astro: `7.3.8`
9
10
 
10
- Nimbus declares Astro `>=7.2.6 <8`; Astro requires Node `>=22.12.0`, so this workspace retains its stricter Node `>=22.13.0` baseline. Builds, Astro diagnostics and TypeScript checks were verified with the repository's TypeScript `6.0.3` and Vite `8.3.3` constraints. Resolved dependencies are recorded in the monorepo's root `pnpm-lock.yaml`; generated projects use their own root workspace lockfile.
11
+ Nimbus declares Astro `>=7.2.6 <8`; Astro requires Node `>=22.12.0`, so this workspace retains its stricter Node `>=22.13.0` baseline. The repository validates builds, Astro diagnostics and TypeScript checks with TypeScript `6.0.3` and Vite `8.3.4`. Resolved dependencies are recorded in the monorepo's root `pnpm-lock.yaml`; generated projects use their own root workspace lockfile.
11
12
 
12
13
  Agent endpoint routes and the content-loading approach come from that starter. The bilingual layout, navigation, search interface, examples and workspace checks are repoctl adaptations. These files are maintained locally; generating a project never downloads the upstream starter.
13
14
 
14
15
  The local head component emits page-specific language metadata because the upstream head uses the site-wide locale. Client scripts are emitted as external assets so Astro does not inline them before Vite finalizes Pagefind's dynamic import.
15
16
 
16
17
  The package version and starter tag were checked against published package metadata. `nimbus.json` records the reviewed package API baseline. The original full starter was not copied wholesale, so upstream starter diffs are not a claim that every local file is an unmodified upstream component.
18
+
19
+ ## Nimbus 0.17.0 upgrade review
20
+
21
+ The `0.16.0` → `0.17.0` review follows the installed package's `nimbus-docs migrate --dry-run --json` report and the release's [upgrade manifest](https://github.com/cloudflare/nimbus/blob/1951de5cc3e420a5e672f192c334584216716c1e/packages/nimbus-docs/src/_internal/upgrade-manifest.json).
22
+
23
+ | Required review | Template decision |
24
+ | --- | --- |
25
+ | `api-body-request-example` | No API collection or copied `ApiBody` component exists. No component replacement is needed. |
26
+ | `api-catalog-published-specs` | No API collection or versioned spec exists, so there are no specs to publish or hide. |
27
+ | `api-version-id-format` | No API versions are configured. |
28
+ | `version-switcher-keeps-query` | No query-versioned API or copied `VersionSwitcher` exists. |
29
+ | `page-collections-from-helpers` | The only collection uses `defineCollection(docsCollection())`; there are no plain-loader page collections or rendering overrides. |
30
+ | `generated-agent-discovery-routes` | Neither `public/` nor `src/pages/` owns the generated discovery paths. Nimbus generates both discovery documents and homepage Link headers; packaged regression checks validate their resources and static header rules. |
31
+
32
+ The site remains static. Its existing Markdown/MDX and LLM endpoint factories stay valid. Optional copied-sidebar, browser WebMCP and server-rendering changes are not adopted. There is no project `skills/` directory to publish. Existing `robots.txt` policy is preserved; the new starter's optional AI training Content Signals are not adopted implicitly.
33
+
34
+ For a subpath deployment, publish the generated `.well-known/` directory at the origin root and apply its header rules there. Hosts that do not consume `_headers` need equivalent native header configuration; see the [agent deployment guidance](https://nimbus-docs.com/ai/docs-for-agents/).
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "$schema": "https://nimbus-docs.com/schema/nimbus.json",
3
- "lastReviewedNimbusVersion": "0.16.0"
3
+ "lastReviewedNimbusVersion": "0.17.0"
4
4
  }
@@ -19,8 +19,8 @@
19
19
  "check:locales": "node scripts/check-locales.mjs"
20
20
  },
21
21
  "dependencies": {
22
- "@cloudflare/nimbus-docs": "0.16.0",
23
- "astro": "7.3.7"
22
+ "@cloudflare/nimbus-docs": "0.17.0",
23
+ "astro": "7.3.8"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@astrojs/check": "^0.9.10",
@@ -41,7 +41,7 @@
41
41
  "react-dom": "^19.3.0",
42
42
  "tsd": "^0.33.0",
43
43
  "typescript": "~6.0.3",
44
- "vite": "^8.3.3",
44
+ "vite": "^8.3.4",
45
45
  "vite-plugin-dts": "^5.1.2",
46
46
  "vitest": "~5.0.3"
47
47
  }
@@ -30,7 +30,7 @@
30
30
  "@vitejs/plugin-react": "^6.1.2",
31
31
  "jsdom": "^30.1.2",
32
32
  "typescript": "~6.0.3",
33
- "vite": "^8.3.3",
33
+ "vite": "^8.3.4",
34
34
  "vitest": "~5.0.3"
35
35
  }
36
36
  }
@@ -8,12 +8,14 @@ Renovate keeps dependencies current through reviewable pull requests. It is most
8
8
  {
9
9
  "extends": ["config:recommended", "group:allNonMajor"],
10
10
  "rangeStrategy": "bump",
11
+ "minimumReleaseAge": "7 days",
12
+ "internalChecksFilter": "strict",
11
13
  "automerge": true,
12
14
  "automergeType": "pr"
13
15
  }
14
16
  ```
15
17
 
16
- The repository groups compatible minor and patch updates. Cloudflare Workers tooling is grouped separately because Wrangler and its Vite plugin have a deliberate compatibility relationship.
18
+ The repository groups compatible minor and patch updates. Cloudflare Workers tooling is grouped separately because Wrangler and its Vite plugin have a deliberate compatibility relationship. Renovate waits seven days after each version is published before it can create an update branch or pull request. `internalChecksFilter: "strict"` keeps the stability check blocking, so a pending `renovate/stability-days` check does not appear as a pull request yet. The timer is evaluated for each version independently; it does not require a package to stop publishing for seven days. Security updates follow the same seven-day wait so every automated update gets the same validation window.
17
19
 
18
20
  ## Review an update
19
21
 
@@ -52,25 +52,24 @@ npx renovate
52
52
 
53
53
  ```json
54
54
  {
55
- "extends": ["config:base"],
56
- "packageRules": [
57
- {
58
- "matchUpdateTypes": ["minor", "patch"],
59
- "automerge": true
60
- },
61
- {
62
- "matchUpdateTypes": ["major"],
63
- "automerge": false
64
- }
65
- ]
55
+ "extends": ["config:recommended", "group:allNonMajor"],
56
+ "rangeStrategy": "bump",
57
+ "minimumReleaseAge": "7 days",
58
+ "internalChecksFilter": "strict",
59
+ "automerge": true,
60
+ "automergeType": "pr"
66
61
  }
67
62
  ```
68
63
 
69
64
  解释:
70
65
 
71
- - 使用基础配置 `"extends": ["config:base"]`。
72
- - **minor/patch 更新** 自动合并。
73
- - **major 更新** 需要人工 review。
66
+ - 使用推荐配置,并将兼容的非 major 更新分组。
67
+ - `"rangeStrategy": "bump"` 让版本范围随升级一起更新。
68
+ - `"minimumReleaseAge": "7 days"` 要求每个新版本发布满 7 天后才进入升级候选。
69
+ - `"internalChecksFilter": "strict"` 让 `renovate/stability-days` 稳定性检查保持阻塞状态;检查通过前不会创建升级分支或 PR。
70
+ - `"automerge": true` 和 `"automergeType": "pr"` 允许通过检查的升级 PR 自动合并。
71
+
72
+ Renovate 按版本分别计时:它等待的是当前版本发布后的 7 天,而不是等待这个包连续 7 天没有新发布。安全更新也遵循相同的 7 天等待窗口,确保自动升级都经过一致的验证时间。
74
73
 
75
74
  ### 实际效果
76
75
 
@@ -63,7 +63,7 @@
63
63
  "@vue/test-utils": "^2.5.1",
64
64
  "@vue/tsconfig": "^0.9.1",
65
65
  "jsdom": "^30.1.2",
66
- "vite": "^8.3.3",
66
+ "vite": "^8.3.4",
67
67
  "vite-plugin-dts": "^5.1.2",
68
68
  "vue": "^3.5.43",
69
69
  "vue-tsc": "^3.3.12"