@icebreakers/monorepo-templates 3.0.0 → 3.0.1
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.
- package/assets/.agents/skills/repoctl/references/commands.md +1 -1
- package/assets/.github/workflows/ci.yml +3 -3
- package/assets/.github/workflows/release-intent-auto.yml +1 -1
- package/assets/.github/workflows/release.yml +3 -3
- package/assets/.github/workflows/repoctl-docs-deploy.yml +1 -1
- package/assets/.github/workflows/repoctl-docs.yml +1 -1
- package/assets/AGENTS.md +10 -2
- package/assets/CONTRIBUTING.md +1 -1
- package/assets/Dockerfile +1 -1
- package/assets/package.json +4 -4
- package/assets/pnpm-workspace.yaml +1 -1
- package/package.json +2 -2
- package/templates/cli/package.json +1 -1
- package/templates/client/package.json +4 -4
- package/templates/next/README.md +1 -1
- package/templates/next/package.json +4 -4
- package/templates/nimbus/UPSTREAM.md +2 -2
- package/templates/nimbus/package.json +2 -2
- package/templates/react-lib/package.json +5 -5
- package/templates/react-vite/package.json +3 -3
- package/templates/server/package.json +1 -1
- package/templates/tsdown/package.json +1 -1
- package/templates/vitepress/package.json +2 -2
- package/templates/vitepress/reference/devcontainer.md +1 -1
- package/templates/vitepress/start/index.md +3 -1
- package/templates/vitepress/start/install-repoctl.md +2 -0
- package/templates/vitepress/start/install.md +3 -1
- package/templates/vitepress/tasks/adopt-existing.md +1 -1
- package/templates/vitepress/tasks/ci.md +2 -2
- package/templates/vitepress/tasks/release.md +2 -2
- package/templates/vitepress/zh/reference/devcontainer.md +1 -1
- package/templates/vitepress/zh/start/index.md +3 -1
- package/templates/vitepress/zh/start/install-repoctl.md +2 -0
- package/templates/vitepress/zh/start/install.md +3 -1
- package/templates/vitepress/zh/tasks/adopt-existing.md +1 -1
- package/templates/vitepress/zh/tasks/ci.md +2 -2
- package/templates/vitepress/zh/tasks/release.md +2 -2
- package/templates/vue-lib/package.json +2 -2
|
@@ -159,7 +159,7 @@ The command uses `GITHUB_TOKEN`, `GITHUB_REPOSITORY`, `GITHUB_API_URL`, and
|
|
|
159
159
|
`GITHUB_SHA` to upsert the Release PR, package tags, and GitHub Releases. It
|
|
160
160
|
consumes `pnpm-publish-summary.json` and is safe to retry.
|
|
161
161
|
|
|
162
|
-
`oidc-audit` independently checks every versioned public child package using the current GitHub-hosted job's OIDC identity and the official npm registry. It returns safe JSON (`schemaVersion: 1`) with allowlisted identity fields, per-package HTTP status/message and aggregate success. The CLI fails if any exchange fails, but still checks all packages. It does not load release configuration, consume intents, execute quality scripts/hooks, publish, or create tags/Releases. Recovery flags (`source-sha`, `dry-run`, `package`, `version`) are incompatible. The managed workflow has a separate read-only audit job with Node 24, `id-token: write` and installation lifecycle scripts disabled; generated projects need only installed repoctl, while the source workspace builds its tooling closure.
|
|
162
|
+
`oidc-audit` independently checks every versioned public child package using the current GitHub-hosted job's OIDC identity and the official npm registry. It returns safe JSON (`schemaVersion: 1`) with allowlisted identity fields, per-package HTTP status/message and aggregate success. The CLI fails if any exchange fails, but still checks all packages. It does not load release configuration, consume intents, execute quality scripts/hooks, publish, or create tags/Releases. Recovery flags (`source-sha`, `dry-run`, `package`, `version`) are incompatible. The managed workflow has a separate read-only audit job with Node.js 24.22.1, `id-token: write` and installation lifecycle scripts disabled; generated projects need only installed repoctl, while the source workspace builds its tooling closure.
|
|
163
163
|
|
|
164
164
|
Use `auditReleaseOidc({ cwd, env?, fetch? })` for the same programmatic report. JWTs, request tokens and exchange tokens are never included or saved. A 404 alone cannot identify expired trust: check npm package settings and repository/workflow/environment matching. If npm explicitly says `Expired`, delete/recreate the configuration and perform the first successful publish within 48 hours under [npm's policy](https://github.blog/changelog/2026-10-02-unvalidated-npm-trusted-publishing-configurations-now-expire/). A successful exchange does not complete that initial publish validation; auditing immediately before publishing narrows that gap.
|
|
165
165
|
|
|
@@ -28,7 +28,7 @@ jobs:
|
|
|
28
28
|
fail-fast: false
|
|
29
29
|
matrix:
|
|
30
30
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
|
31
|
-
node-version: [ 22, 24 ]
|
|
31
|
+
node-version: [ 22.23.4, 24.22.1, 26.12.1 ]
|
|
32
32
|
runs-on: ${{ matrix.os }}
|
|
33
33
|
# Remote Caching enabled - configure TURBO_TOKEN and TURBO_TEAM in repository settings
|
|
34
34
|
env:
|
|
@@ -65,11 +65,11 @@ jobs:
|
|
|
65
65
|
run: pnpm build
|
|
66
66
|
|
|
67
67
|
- name: Typecheck
|
|
68
|
-
if: ${{ matrix.os != 'windows-latest' || matrix.node-version != 22 }}
|
|
68
|
+
if: ${{ matrix.os != 'windows-latest' || matrix.node-version != '22.23.4' }}
|
|
69
69
|
run: pnpm typecheck
|
|
70
70
|
|
|
71
71
|
- name: Typecheck (Windows Node 22)
|
|
72
|
-
if: ${{ matrix.os == 'windows-latest' && matrix.node-version == 22 }}
|
|
72
|
+
if: ${{ matrix.os == 'windows-latest' && matrix.node-version == '22.23.4' }}
|
|
73
73
|
run: pnpm exec turbo run typecheck --concurrency=1
|
|
74
74
|
|
|
75
75
|
- name: TSD
|
|
@@ -33,7 +33,7 @@ jobs:
|
|
|
33
33
|
- name: Setup Node.js environment
|
|
34
34
|
uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
|
|
35
35
|
with:
|
|
36
|
-
node-version: 24
|
|
36
|
+
node-version: 24.22.1
|
|
37
37
|
|
|
38
38
|
- name: Validate GitHub App configuration
|
|
39
39
|
if: ${{ github.event_name == 'workflow_dispatch' || github.event.pull_request.head.repo.full_name == github.repository }}
|
|
@@ -98,7 +98,7 @@ jobs:
|
|
|
98
98
|
- name: Setup Node.js environment
|
|
99
99
|
uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
|
|
100
100
|
with:
|
|
101
|
-
node-version: 24
|
|
101
|
+
node-version: 24.22.1
|
|
102
102
|
cache: pnpm
|
|
103
103
|
|
|
104
104
|
- name: Install npm with trusted publishing support
|
|
@@ -239,7 +239,7 @@ jobs:
|
|
|
239
239
|
- name: Setup Node.js environment
|
|
240
240
|
uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
|
|
241
241
|
with:
|
|
242
|
-
node-version: 24
|
|
242
|
+
node-version: 24.22.1
|
|
243
243
|
cache: pnpm
|
|
244
244
|
|
|
245
245
|
- name: Install npm with trusted publishing support
|
|
@@ -296,7 +296,7 @@ jobs:
|
|
|
296
296
|
- name: Setup Node.js environment
|
|
297
297
|
uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
|
|
298
298
|
with:
|
|
299
|
-
node-version: 24
|
|
299
|
+
node-version: 24.22.1
|
|
300
300
|
cache: pnpm
|
|
301
301
|
|
|
302
302
|
- name: Install Dependencies without lifecycle scripts
|
|
@@ -47,7 +47,7 @@ jobs:
|
|
|
47
47
|
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
|
|
48
48
|
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
|
|
49
49
|
with:
|
|
50
|
-
node-version: 24
|
|
50
|
+
node-version: 24.22.1
|
|
51
51
|
cache: pnpm
|
|
52
52
|
- run: pnpm install --frozen-lockfile
|
|
53
53
|
- id: sites
|
package/assets/AGENTS.md
CHANGED
|
@@ -26,7 +26,15 @@ Preview without writing files: `pnpm exec repo new <name> --template <key> --dry
|
|
|
26
26
|
|
|
27
27
|
If the user asks you to create a new business project, do not add it inside an
|
|
28
28
|
existing unrelated repository. Use a new or empty directory outside the repoctl
|
|
29
|
-
source checkout.
|
|
29
|
+
source checkout.
|
|
30
|
+
|
|
31
|
+
Node.js 25+ does not bundle Corepack. On those versions, or if `corepack` is
|
|
32
|
+
unavailable, first run `npm install --global corepack@0.36.0`. Then run
|
|
33
|
+
`corepack enable` before the first pnpm command. After entering the generated
|
|
34
|
+
project, run `corepack enable` again as shown below so pnpm uses that workspace's
|
|
35
|
+
`packageManager` field.
|
|
36
|
+
|
|
37
|
+
Start a new workspace with:
|
|
30
38
|
|
|
31
39
|
```bash
|
|
32
40
|
pnpm create repoctl@latest <dir> -- --yes --templates <keys>
|
|
@@ -52,7 +60,7 @@ pnpm exec repo check
|
|
|
52
60
|
|
|
53
61
|
## Requirements
|
|
54
62
|
|
|
55
|
-
- Node.js 22.
|
|
63
|
+
- Node.js matching `^22.23.4 || ^24.22.1 || >=26.12.1` (24.22.1 LTS recommended)
|
|
56
64
|
- pnpm (run `corepack enable` so the declared workspace version is used)
|
|
57
65
|
- CLI output is English by default; `--lang zh-CN` or `REPOCTL_LANG=zh-CN` selects Simplified Chinese
|
|
58
66
|
|
package/assets/CONTRIBUTING.md
CHANGED
|
@@ -6,7 +6,7 @@ repoctl accepts bug fixes, documentation improvements, tests, and focused featur
|
|
|
6
6
|
|
|
7
7
|
## Development setup
|
|
8
8
|
|
|
9
|
-
1. Use Node.js 22.
|
|
9
|
+
1. Use Node.js matching `^22.23.4 || ^24.22.1 || >=26.12.1` (24.22.1 LTS recommended). On Node.js 25+ or if `corepack` is unavailable, first run `npm install --global corepack@0.36.0`; then run `corepack enable`.
|
|
10
10
|
2. Run `pnpm install`.
|
|
11
11
|
3. Create a focused branch from `main`.
|
|
12
12
|
4. Add or update tests with the implementation.
|
package/assets/Dockerfile
CHANGED
package/assets/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"type": "module",
|
|
4
4
|
"version": "0.0.0",
|
|
5
5
|
"private": true,
|
|
6
|
-
"packageManager": "pnpm@12.
|
|
6
|
+
"packageManager": "pnpm@12.14.0",
|
|
7
7
|
"description": "Source workspace for repoctl and Icebreaker's shared development packages",
|
|
8
8
|
"author": "ice breaker <hi@sonofmagic.top>",
|
|
9
9
|
"license": "MIT",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"typescript"
|
|
24
24
|
],
|
|
25
25
|
"engines": {
|
|
26
|
-
"node": "
|
|
26
|
+
"node": "^22.23.4 || ^24.22.1 || >=26.12.1"
|
|
27
27
|
},
|
|
28
28
|
"scripts": {
|
|
29
29
|
"build": "turbo run build",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"@commitlint/cli": "^21.2.3",
|
|
72
72
|
"@eslint/config-inspector": "^3.5.0",
|
|
73
73
|
"@types/node": "^26.6.5",
|
|
74
|
-
"@vitest/coverage-v8": "~5.0.
|
|
74
|
+
"@vitest/coverage-v8": "~5.0.5",
|
|
75
75
|
"eslint": "^10.12.0",
|
|
76
76
|
"execa": "^10.1.1",
|
|
77
77
|
"lefthook": "2.2.2",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"tsdown": "0.23.1",
|
|
84
84
|
"turbo": "^2.11.8",
|
|
85
85
|
"typescript": "^6.0.3",
|
|
86
|
-
"vitest": "~5.0.
|
|
86
|
+
"vitest": "~5.0.5",
|
|
87
87
|
"yaml": "^2.9.1"
|
|
88
88
|
},
|
|
89
89
|
"publishConfig": {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@icebreakers/monorepo-templates",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.1",
|
|
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",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"templates"
|
|
44
44
|
],
|
|
45
45
|
"engines": {
|
|
46
|
-
"node": "
|
|
46
|
+
"node": "^22.23.4 || ^24.22.1 || >=26.12.1"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@inquirer/checkbox": "^5.2.6",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"template"
|
|
23
23
|
],
|
|
24
24
|
"engines": {
|
|
25
|
-
"node": "
|
|
25
|
+
"node": "^22.23.4 || ^24.22.1 || >=26.12.1"
|
|
26
26
|
},
|
|
27
27
|
"scripts": {
|
|
28
28
|
"dev": "pnpm cf-typegen && vite --host",
|
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@faker-js/faker": "^10.6.0",
|
|
40
|
-
"@tanstack/vue-query": "^5.104.
|
|
41
|
-
"@tanstack/vue-query-devtools": "^6.3.
|
|
40
|
+
"@tanstack/vue-query": "^5.104.3",
|
|
41
|
+
"@tanstack/vue-query-devtools": "^6.3.3",
|
|
42
42
|
"@tanstack/vue-table": "^9.3.1",
|
|
43
|
-
"@tanstack/vue-virtual": "^3.13.
|
|
43
|
+
"@tanstack/vue-virtual": "^3.13.46",
|
|
44
44
|
"@trpc/client": "^11.19.0",
|
|
45
45
|
"clsx": "^2.1.1",
|
|
46
46
|
"pinia": "^4.1.0",
|
package/templates/next/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Next.js App Router workspace
|
|
2
2
|
|
|
3
|
-
This TypeScript template follows `create-next-app@16.3.8`'s App Router layout and uses the shared repoctl tooling. It includes a server page, a client counter and `GET /api/health`. It
|
|
3
|
+
This TypeScript template follows `create-next-app@16.3.8`'s App Router layout and uses the shared repoctl tooling. It includes a server page, a client counter and `GET /api/health`. It supports Node.js `^22.23.4 || ^24.22.1 || >=26.12.1` (24.22.1 LTS recommended) and shares the workspace's pnpm version and lockfile.
|
|
4
4
|
|
|
5
5
|
Run these from the generated workspace root:
|
|
6
6
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"description": "Internal Next.js App Router and TypeScript application template shipped with repoctl",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"engines": {
|
|
9
|
-
"node": "
|
|
9
|
+
"node": "^22.23.4 || ^24.22.1 || >=26.12.1"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
12
|
"dev": "next dev",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"test:dev": "vitest"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"next": "16.4.
|
|
22
|
+
"next": "16.4.2",
|
|
23
23
|
"react": "^19.3.1",
|
|
24
24
|
"react-dom": "^19.3.1"
|
|
25
25
|
},
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"@types/react": "^19.3.0",
|
|
30
30
|
"@types/react-dom": "^19.3.0",
|
|
31
31
|
"@vitejs/plugin-react": "^6.1.2",
|
|
32
|
-
"jsdom": "^30.1.
|
|
32
|
+
"jsdom": "^30.1.3",
|
|
33
33
|
"typescript": "~6.0.3",
|
|
34
|
-
"vitest": "~5.0.
|
|
34
|
+
"vitest": "~5.0.5"
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -6,9 +6,9 @@ This template adapts the static empty starter from [Cloudflare Nimbus](https://g
|
|
|
6
6
|
- Starter commit: `aae348048a8c659f84c39696ee6b20c2ad2f5ae2`
|
|
7
7
|
- Nimbus package: `@cloudflare/nimbus-docs@0.17.0`
|
|
8
8
|
- Nimbus release commit: `1951de5cc3e420a5e672f192c334584216716c1e`
|
|
9
|
-
- Astro: `7.
|
|
9
|
+
- Astro: `7.4.0`
|
|
10
10
|
|
|
11
|
-
Nimbus declares Astro `>=7.2.6 <8`; Astro requires Node `>=22.
|
|
11
|
+
Nimbus declares Astro `>=7.2.6 <8`; Astro `7.4.0` requires Node `>=22.22.0`. This workspace applies the stricter security baseline `^22.23.4 || ^24.22.1 || >=26.12.1` and recommends Node.js 24.22.1 LTS. 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.
|
|
12
12
|
|
|
13
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.
|
|
14
14
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"description": "Bilingual Nimbus documentation starter",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"engines": {
|
|
9
|
-
"node": "
|
|
9
|
+
"node": "^22.23.4 || ^24.22.1 || >=26.12.1"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
12
|
"dev": "astro dev",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@cloudflare/nimbus-docs": "0.17.0",
|
|
23
|
-
"astro": "7.
|
|
23
|
+
"astro": "7.4.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@astrojs/check": "^0.9.10",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"main": "./dist/index.js",
|
|
17
17
|
"types": "./dist/index.d.ts",
|
|
18
18
|
"files": ["LICENSE", "README.md", "dist"],
|
|
19
|
-
"engines": { "node": "
|
|
19
|
+
"engines": { "node": "^22.23.4 || ^24.22.1 || >=26.12.1" },
|
|
20
20
|
"scripts": {
|
|
21
21
|
"build": "vite build",
|
|
22
22
|
"lint": "eslint . && stylelint \"src/**/*.css\"",
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"test:dev": "vitest"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
|
-
"react": "^19.3.
|
|
31
|
-
"react-dom": "^19.3.
|
|
30
|
+
"react": "^19.3.1",
|
|
31
|
+
"react-dom": "^19.3.1"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@testing-library/dom": "^10.4.2",
|
|
@@ -36,13 +36,13 @@
|
|
|
36
36
|
"@types/react": "^19.3.0",
|
|
37
37
|
"@types/react-dom": "^19.3.0",
|
|
38
38
|
"@vitejs/plugin-react": "^6.1.2",
|
|
39
|
-
"jsdom": "^30.1.
|
|
39
|
+
"jsdom": "^30.1.3",
|
|
40
40
|
"react": "^19.3.1",
|
|
41
41
|
"react-dom": "^19.3.1",
|
|
42
42
|
"tsd": "^0.33.0",
|
|
43
43
|
"typescript": "~6.0.3",
|
|
44
44
|
"vite": "^8.3.4",
|
|
45
45
|
"vite-plugin-dts": "^5.1.2",
|
|
46
|
-
"vitest": "~5.0.
|
|
46
|
+
"vitest": "~5.0.5"
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"description": "Internal React, Vite and TypeScript application template shipped with repoctl",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"engines": {
|
|
9
|
-
"node": "
|
|
9
|
+
"node": "^22.23.4 || ^24.22.1 || >=26.12.1"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
12
|
"dev": "vite",
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
"@types/react": "^19.3.0",
|
|
29
29
|
"@types/react-dom": "^19.3.0",
|
|
30
30
|
"@vitejs/plugin-react": "^6.1.2",
|
|
31
|
-
"jsdom": "^30.1.
|
|
31
|
+
"jsdom": "^30.1.3",
|
|
32
32
|
"typescript": "~6.0.3",
|
|
33
33
|
"vite": "^8.3.4",
|
|
34
|
-
"vitest": "~5.0.
|
|
34
|
+
"vitest": "~5.0.5"
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"monorepo"
|
|
23
23
|
],
|
|
24
24
|
"engines": {
|
|
25
|
-
"node": "
|
|
25
|
+
"node": "^22.23.4 || ^24.22.1 || >=26.12.1"
|
|
26
26
|
},
|
|
27
27
|
"scripts": {
|
|
28
28
|
"dev": "vitepress dev",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"tailwindcss": "^4.3.3",
|
|
45
45
|
"vitepress": "2.0.0-alpha.20",
|
|
46
46
|
"vitepress-plugin-llms": "^1.14.0",
|
|
47
|
-
"vitest": "~5.0.
|
|
47
|
+
"vitest": "~5.0.5",
|
|
48
48
|
"vue-tsc": "^3.3.13",
|
|
49
49
|
"wrangler": "^4.135.0"
|
|
50
50
|
}
|
|
@@ -10,7 +10,7 @@ repo tooling devcontainer --apply ../devcontainer-plan.json
|
|
|
10
10
|
|
|
11
11
|
Review the JSON plan before applying it. Four files are proposed under the root `.devcontainer`: `devcontainer.json`, `Dockerfile`, `setup.mjs` and `README.md`. Existing custom files and an alternate root `.devcontainer.json` block application and are preserved. JSON contains per-file hashes and unified diffs; replaying a fully applied plan is a no-op. Input or target changes require a fresh preview. `--out` creates a new plan file and refuses to overwrite one.
|
|
12
12
|
|
|
13
|
-
The preset chooses the first pinned Node version compatible with root `engines.node`: `24.
|
|
13
|
+
The preset chooses the first pinned Node version compatible with root `engines.node`: `24.22.1`, then `22.23.4`, then `26.12.1`. Node.js 24.22.1 LTS is recommended. Use `--node-version <exact-version>` for another stable Node version that satisfies both the security baseline `^22.23.4 || ^24.22.1 || >=26.12.1` and root `engines.node`. The requested `node:<version>-bookworm` image must exist when Docker starts; preview does not contact a registry. Root `packageManager` must pin a stable pnpm version, optionally with a Corepack integrity hash.
|
|
14
14
|
|
|
15
15
|
Open the generated workspace with the Dev Containers extension, or explicitly run the [Dev Containers CLI](https://github.com/devcontainers/cli). Container creation installs Corepack `0.36.0`, enables pnpm, checks its exact version and installs the workspace with engine enforcement. A present `pnpm-lock.yaml` is frozen; initial setup without a lockfile creates it. Corepack or installation failures stop setup.
|
|
16
16
|
|
|
@@ -25,4 +25,6 @@ The CLI works with pnpm workspaces and understands Turborepo task graphs. It doe
|
|
|
25
25
|
|
|
26
26
|
## Before you continue
|
|
27
27
|
|
|
28
|
-
You need Node.js 22.
|
|
28
|
+
You need Node.js matching `^22.23.4 || ^24.22.1 || >=26.12.1` (24.22.1 LTS recommended) and pnpm available on your path. Run commands from the repository root so repoctl can read the workspace configuration.
|
|
29
|
+
|
|
30
|
+
On Node.js 25+ or if `corepack` is unavailable, first run `npm install --global corepack@0.36.0`, then run `corepack enable`. See [installation prerequisites](./install.md#prerequisites).
|
|
@@ -7,6 +7,8 @@ description: Install repoctl in a pnpm monorepo, initialize managed defaults, an
|
|
|
7
7
|
|
|
8
8
|
Install repoctl as a development dependency so every teammate and CI job uses the same version.
|
|
9
9
|
|
|
10
|
+
Prepare pnpm first using the [installation prerequisites](./install.md#prerequisites), including installing Corepack separately on Node.js 25+ or when the `corepack` command is unavailable.
|
|
11
|
+
|
|
10
12
|
```bash
|
|
11
13
|
pnpm add -D repoctl
|
|
12
14
|
pnpm exec repo init
|
|
@@ -4,10 +4,12 @@ This guide follows the order you would use when adding repoctl to a workspace.
|
|
|
4
4
|
|
|
5
5
|
## Prerequisites
|
|
6
6
|
|
|
7
|
-
- Node.js 22.
|
|
7
|
+
- Node.js matching `^22.23.4 || ^24.22.1 || >=26.12.1` (24.22.1 LTS recommended).
|
|
8
8
|
- pnpm. Corepack is recommended: `corepack enable`.
|
|
9
9
|
- Git. `repo doctor` reads repository metadata and checks the commit workflow.
|
|
10
10
|
|
|
11
|
+
Node.js 25+ does not bundle Corepack. On those versions, or if `corepack` is unavailable, first run `npm install --global corepack@0.36.0`, then run `corepack enable`.
|
|
12
|
+
|
|
11
13
|
```bash
|
|
12
14
|
node -v
|
|
13
15
|
pnpm -v
|
|
@@ -8,7 +8,7 @@ Use this task when a workspace already has scripts, hooks, or configuration that
|
|
|
8
8
|
|
|
9
9
|
- Run commands from the workspace root.
|
|
10
10
|
- Commit or stash unrelated local changes.
|
|
11
|
-
- Confirm that Node.js 22.
|
|
11
|
+
- Confirm that Node.js matches `^22.23.4 || ^24.22.1 || >=26.12.1` (24.22.1 LTS recommended) and pnpm is available.
|
|
12
12
|
|
|
13
13
|
## Smallest Command
|
|
14
14
|
|
|
@@ -144,7 +144,7 @@ jobs:
|
|
|
144
144
|
- uses: pnpm/action-setup@v6
|
|
145
145
|
- uses: actions/setup-node@v7
|
|
146
146
|
with:
|
|
147
|
-
node-version: 22
|
|
147
|
+
node-version: 24.22.1
|
|
148
148
|
cache: pnpm
|
|
149
149
|
- run: pnpm install --frozen-lockfile
|
|
150
150
|
- id: matrix
|
|
@@ -177,7 +177,7 @@ jobs:
|
|
|
177
177
|
- uses: pnpm/action-setup@v6
|
|
178
178
|
- uses: actions/setup-node@v7
|
|
179
179
|
with:
|
|
180
|
-
node-version: 22
|
|
180
|
+
node-version: 24.22.1
|
|
181
181
|
cache: pnpm
|
|
182
182
|
- run: pnpm install --frozen-lockfile
|
|
183
183
|
- name: Run this job's planned stages
|
|
@@ -79,7 +79,7 @@ Choose `oidc-audit` when manually dispatching the managed Release workflow, or r
|
|
|
79
79
|
pnpm exec repo release ci --mode oidc-audit
|
|
80
80
|
```
|
|
81
81
|
|
|
82
|
-
The job needs `id-token: write`, Node 24 and the same repository, workflow file and environment as actual publishing. A different diagnostic workflow has a different identity. The managed workflow uses a separate audit job with only `contents: read` and `id-token: write`, disables install lifecycle scripts and skips GitHub App credentials and release quality checks. Only the repoctl source workspace builds its tooling closure; consumer workflows use the installed CLI. Custom workflows should use the same isolation and install with `pnpm install --frozen-lockfile --ignore-scripts`.
|
|
82
|
+
The job needs `id-token: write`, Node.js 24.22.1 and the same repository, workflow file and environment as actual publishing. A different diagnostic workflow has a different identity. The managed workflow uses a separate audit job with only `contents: read` and `id-token: write`, disables install lifecycle scripts and skips GitHub App credentials and release quality checks. Only the repoctl source workspace builds its tooling closure; consumer workflows use the installed CLI. Custom workflows should use the same isolation and install with `pnpm install --frozen-lockfile --ignore-scripts`.
|
|
83
83
|
|
|
84
84
|
The command independently routes before release configuration and checks every versioned public child package against the official npm registry, including packages already published. It requests short-lived exchange credentials but never uploads packages, changes versions/intents, runs hooks, writes progress files, creates tags/Releases or saves tokens. `source-sha`, `dry-run`, `package` and `version` recovery inputs must be empty. JSON includes `schemaVersion: 1`, safe identity fields, each package's HTTP status/message and `ok`; failures complete the whole package report before exiting with code 1. `auditReleaseOidc({ cwd, env?, fetch? })` exposes the same report without printing it; callers must check `ok`.
|
|
85
85
|
|
|
@@ -199,7 +199,7 @@ Scheduled npm checks skip only when every current public package is already avai
|
|
|
199
199
|
|
|
200
200
|
Nightly runs configured `qualityScripts` and `hooks.verify`, prepares real tarballs from committed source outside the checkout, and validates package exports, types and isolated installation. Versions include the base version, nightly marker, full commit SHA and build digest. After publication, a clean consumer installs the actual tags or URLs and checks identities, entrypoints and types. Formal versioning and post-publication hooks remain part of the normal release flow.
|
|
201
201
|
|
|
202
|
-
The workflow uses Node 24, the workspace's pinned pnpm, checkout without persisted credentials and the existing publication concurrency group. Reports, tarballs and consumer diagnostics are retained for 14 days, including failed runs; the Actions summary contains the result and install commands.
|
|
202
|
+
The workflow uses Node.js 24.22.1, the workspace's pinned pnpm, checkout without persisted credentials and the existing publication concurrency group. Reports, tarballs and consumer diagnostics are retained for 14 days, including failed runs; the Actions summary contains the result and install commands.
|
|
203
203
|
|
|
204
204
|
The workflow command is:
|
|
205
205
|
|
|
@@ -10,7 +10,7 @@ repo tooling devcontainer --apply ../devcontainer-plan.json
|
|
|
10
10
|
|
|
11
11
|
先审阅 JSON,再应用计划。预设在根 `.devcontainer` 下生成 `devcontainer.json`、`Dockerfile`、`setup.mjs` 和 `README.md`。已有自定义文件或根 `.devcontainer.json` 会阻止应用并保留原状。JSON 提供逐文件 hash 和 unified diff;完整应用过的计划再次执行不会写入。输入或目标变化后应重新预览。`--out` 只创建新计划文件,不覆盖已有文件。
|
|
12
12
|
|
|
13
|
-
默认依次从 `24.
|
|
13
|
+
默认依次从 `24.22.1`、`22.23.4`、`26.12.1` 中选择满足根 `engines.node` 的固定版本,推荐使用 Node.js 24.22.1 LTS。可用 `--node-version <精确版本>` 指定其他同时满足安全基线 `^22.23.4 || ^24.22.1 || >=26.12.1` 和根 `engines.node` 的稳定 Node 版本。启动 Docker 时对应 `node:<版本>-bookworm` 镜像必须存在;预览不会访问 registry。根 `packageManager` 必须固定稳定 pnpm 版本,可以包含 Corepack integrity hash。
|
|
14
14
|
|
|
15
15
|
生成配置后,通过 Dev Containers 扩展打开工作区,或主动运行 [Dev Containers CLI](https://github.com/devcontainers/cli)。创建容器会安装 Corepack `0.36.0`、启用 pnpm、检查其精确版本,并强制校验 engines 后安装工作区。存在 `pnpm-lock.yaml` 时使用 frozen lockfile;首次没有 lockfile 时创建它。Corepack 或安装失败会终止初始化。
|
|
16
16
|
|
|
@@ -25,4 +25,6 @@ CLI 支持 pnpm workspace,并能理解 Turborepo 任务图,但不会替代
|
|
|
25
25
|
|
|
26
26
|
## 开始前确认
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
你需要满足 `^22.23.4 || ^24.22.1 || >=26.12.1` 的 Node.js(推荐 24.22.1 LTS),并确保 pnpm 在 PATH 中。从仓库根目录执行命令,这样 repoctl 才能读取 workspace 配置。
|
|
29
|
+
|
|
30
|
+
使用 Node.js 25+ 或找不到 `corepack` 命令时,先运行 `npm install --global corepack@0.36.0`,再运行 `corepack enable`。详见[安装前提](./install.md)。
|
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
## 准备环境
|
|
6
6
|
|
|
7
|
-
- Node.js 22.
|
|
7
|
+
- 满足 `^22.23.4 || ^24.22.1 || >=26.12.1` 的 Node.js(推荐 24.22.1 LTS)。
|
|
8
8
|
- pnpm。推荐通过 Corepack 启用:`corepack enable`。
|
|
9
9
|
- Git。`repo doctor` 会读取仓库信息,用来补全 package metadata 和诊断提交链路。
|
|
10
10
|
|
|
11
|
+
Node.js 25+ 不再内置 Corepack。使用这些版本,或找不到 `corepack` 命令时,先运行 `npm install --global corepack@0.36.0`,再运行 `corepack enable`。
|
|
12
|
+
|
|
11
13
|
```bash
|
|
12
14
|
node -v
|
|
13
15
|
pnpm -v
|
|
@@ -172,7 +172,7 @@ jobs:
|
|
|
172
172
|
- uses: pnpm/action-setup@v6
|
|
173
173
|
- uses: actions/setup-node@v7
|
|
174
174
|
with:
|
|
175
|
-
node-version: 22
|
|
175
|
+
node-version: 24.22.1
|
|
176
176
|
cache: pnpm
|
|
177
177
|
- run: pnpm install --frozen-lockfile
|
|
178
178
|
- id: matrix
|
|
@@ -205,7 +205,7 @@ jobs:
|
|
|
205
205
|
- uses: pnpm/action-setup@v6
|
|
206
206
|
- uses: actions/setup-node@v7
|
|
207
207
|
with:
|
|
208
|
-
node-version: 22
|
|
208
|
+
node-version: 24.22.1
|
|
209
209
|
cache: pnpm
|
|
210
210
|
- run: pnpm install --frozen-lockfile
|
|
211
211
|
- name: Run this job's planned stages
|
|
@@ -147,7 +147,7 @@ repo release ci --mode prepare
|
|
|
147
147
|
pnpm exec repo release ci --mode oidc-audit
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
-
job 需要 `id-token: write` 和 Node 24,并使用实际发布时的仓库、工作流文件及 environment。另建诊断工作流会改变身份。受管工作流使用独立的核验 job,只授予 `contents: read` 和 `id-token: write`,关闭安装 lifecycle scripts,跳过 GitHub App 令牌及发布质量检查。只有 repoctl 源码仓库构建工具依赖闭包;消费方直接使用已安装的 CLI。自定义工作流也应隔离这些步骤,使用 `pnpm install --frozen-lockfile --ignore-scripts` 安装。
|
|
150
|
+
job 需要 `id-token: write` 和 Node.js 24.22.1,并使用实际发布时的仓库、工作流文件及 environment。另建诊断工作流会改变身份。受管工作流使用独立的核验 job,只授予 `contents: read` 和 `id-token: write`,关闭安装 lifecycle scripts,跳过 GitHub App 令牌及发布质量检查。只有 repoctl 源码仓库构建工具依赖闭包;消费方直接使用已安装的 CLI。自定义工作流也应隔离这些步骤,使用 `pnpm install --frozen-lockfile --ignore-scripts` 安装。
|
|
151
151
|
|
|
152
152
|
命令在加载发布配置前独立路由,向官方 npm registry 逐个核验有版本号的公开子包,包含已发布的包。它只申请短时交换凭据,不上传包、不修改版本或 intent、不运行 hooks、不写进度文件、不创建 tag/Release,也不保存 token。`source-sha`、`dry-run`、`package` 和 `version` 恢复输入必须为空。JSON 包含 `schemaVersion: 1`、允许展示的身份字段、每包 HTTP 状态及 npm 错误信息、整体 `ok`;即使某包失败也会继续完成全部包报告,最后以退出码 1 失败。程序化 API `auditReleaseOidc({ cwd, env?, fetch? })` 返回同一报告而不打印;调用者须检查 `ok`。
|
|
153
153
|
|
|
@@ -205,7 +205,7 @@ npm 定时任务只有在全部公开包都对应当前提交和同一构建身
|
|
|
205
205
|
|
|
206
206
|
nightly 执行配置的 `qualityScripts` 和 `hooks.verify`,在检出目录以外从已提交源码构建真实 tarball,并验证包导出、类型和隔离安装。版本包含基础版本、nightly 标记、完整提交 SHA 和构建摘要。发布后,干净消费者通过实际标签或 URL 安装,再核验身份、运行入口和类型。正式版本准备与发布后 hooks 仍属于普通发布流程。
|
|
207
207
|
|
|
208
|
-
工作流使用 Node 24、仓库锁定的 pnpm、不保留凭据的 checkout,并复用现有发布并发组。成功与失败均保留报告、tarball 和消费者诊断 14 天;Actions 摘要提供结果与安装命令。
|
|
208
|
+
工作流使用 Node.js 24.22.1、仓库锁定的 pnpm、不保留凭据的 checkout,并复用现有发布并发组。成功与失败均保留报告、tarball 和消费者诊断 14 天;Actions 摘要提供结果与安装命令。
|
|
209
209
|
|
|
210
210
|
工作流执行:
|
|
211
211
|
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"dist"
|
|
34
34
|
],
|
|
35
35
|
"engines": {
|
|
36
|
-
"node": "
|
|
36
|
+
"node": "^22.23.4 || ^24.22.1 || >=26.12.1"
|
|
37
37
|
},
|
|
38
38
|
"scripts": {
|
|
39
39
|
"build": "vue-tsc -b && vite build",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"@vitejs/plugin-vue": "^6.0.10",
|
|
63
63
|
"@vue/test-utils": "^2.5.1",
|
|
64
64
|
"@vue/tsconfig": "^0.9.1",
|
|
65
|
-
"jsdom": "^30.1.
|
|
65
|
+
"jsdom": "^30.1.3",
|
|
66
66
|
"vite": "^8.3.4",
|
|
67
67
|
"vite-plugin-dts": "^5.1.2",
|
|
68
68
|
"vue": "^3.5.44",
|