@icebreakers/monorepo-templates 1.0.15 → 1.2.0

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.
Files changed (161) hide show
  1. package/README.md +12 -8
  2. package/README.zh-CN.md +16 -0
  3. package/assets/.changeset/ledger.yaml +51 -0
  4. package/assets/.github/ISSUE_TEMPLATE/config.yml +1 -1
  5. package/assets/.github/workflows/release.yml +22 -97
  6. package/assets/AGENTS.md +5 -4
  7. package/assets/CONTRIBUTING.md +27 -2
  8. package/assets/SECURITY.md +12 -14
  9. package/assets/package.json +18 -10
  10. package/assets/pnpm-workspace.yaml +8 -0
  11. package/package.json +6 -4
  12. package/templates/cli/package.json +11 -4
  13. package/templates/client/package.json +22 -6
  14. package/templates/server/package.json +14 -7
  15. package/templates/server/vitest.config.ts +1 -4
  16. package/templates/tsdown/package.json +11 -4
  17. package/templates/tsdown/vitest.config.ts +1 -4
  18. package/templates/vitepress/.vitepress/config.ts +146 -165
  19. package/templates/vitepress/ai/index.md +12 -23
  20. package/templates/vitepress/ai/llms-txt.md +13 -31
  21. package/templates/vitepress/getting-started.md +3 -32
  22. package/templates/vitepress/index.md +27 -30
  23. package/templates/vitepress/knowledge/index.md +17 -41
  24. package/templates/vitepress/monorepo/commands.md +13 -18
  25. package/templates/vitepress/monorepo/index.md +22 -100
  26. package/templates/vitepress/monorepo/manage.md +15 -227
  27. package/templates/vitepress/monorepo/publish.md +17 -245
  28. package/templates/vitepress/monorepo/templates.md +10 -17
  29. package/templates/vitepress/monorepo/troubleshooting.md +13 -16
  30. package/templates/vitepress/package.json +11 -5
  31. package/templates/vitepress/public/_redirects +3 -0
  32. package/templates/vitepress/repoctl/adopt-existing.md +51 -53
  33. package/templates/vitepress/repoctl/aliases.md +18 -18
  34. package/templates/vitepress/repoctl/checks.md +21 -68
  35. package/templates/vitepress/repoctl/commands.md +16 -64
  36. package/templates/vitepress/repoctl/config.md +14 -35
  37. package/templates/vitepress/repoctl/doctor.md +20 -60
  38. package/templates/vitepress/repoctl/execution-model.md +16 -69
  39. package/templates/vitepress/repoctl/getting-started.md +34 -40
  40. package/templates/vitepress/repoctl/index.md +33 -61
  41. package/templates/vitepress/repoctl/reports.md +20 -74
  42. package/templates/vitepress/repoctl/scenarios.md +26 -28
  43. package/templates/vitepress/repoctl/template-assets.md +19 -88
  44. package/templates/vitepress/repoctl/templates.md +50 -81
  45. package/templates/vitepress/repoctl/troubleshooting.md +32 -46
  46. package/templates/vitepress/repoctl/workflows.md +38 -67
  47. package/templates/vitepress/thinking.md +4 -85
  48. package/templates/vitepress/tools/changeset.md +12 -85
  49. package/templates/vitepress/tools/husky.md +6 -124
  50. package/templates/vitepress/tools/index.md +13 -32
  51. package/templates/vitepress/tools/lint-staged.md +5 -96
  52. package/templates/vitepress/tools/llms-txt.md +4 -6
  53. package/templates/vitepress/tools/pnpm.md +7 -119
  54. package/templates/vitepress/tools/renovate.md +3 -87
  55. package/templates/vitepress/tools/turborepo.md +5 -157
  56. package/templates/vitepress/why/how-to-reuse-js-code.md +6 -247
  57. package/templates/vitepress/why/index.md +14 -1
  58. package/templates/vitepress/why/js-cjs-mjs.md +9 -96
  59. package/templates/vitepress/why/js-keywords.md +4 -129
  60. package/templates/vitepress/why/modern/bundlers.md +3 -50
  61. package/templates/vitepress/why/modern/dts.md +4 -90
  62. package/templates/vitepress/why/modern/esm-vs-cjs.md +4 -81
  63. package/templates/vitepress/why/modern/index.md +10 -51
  64. package/templates/vitepress/why/modern/package-entry-points.md +6 -117
  65. package/templates/vitepress/why/modern/typescript.md +4 -152
  66. package/templates/vitepress/why/publish-basic-npm-package.md +17 -144
  67. package/templates/vitepress/why/what-is-npm-package.md +4 -159
  68. package/templates/vitepress/zh/ai/index.md +33 -0
  69. package/templates/vitepress/zh/ai/llms-txt.md +42 -0
  70. package/templates/vitepress/zh/getting-started.md +40 -0
  71. package/templates/vitepress/zh/index.md +66 -0
  72. package/templates/vitepress/zh/knowledge/index.md +50 -0
  73. package/templates/vitepress/zh/monorepo/commands.md +21 -0
  74. package/templates/vitepress/zh/monorepo/index.md +115 -0
  75. package/templates/vitepress/zh/monorepo/manage.md +243 -0
  76. package/templates/vitepress/zh/monorepo/publish.md +87 -0
  77. package/templates/vitepress/zh/monorepo/templates.md +21 -0
  78. package/templates/vitepress/zh/monorepo/troubleshooting.md +20 -0
  79. package/templates/vitepress/zh/repoctl/adopt-existing.md +135 -0
  80. package/templates/vitepress/{en → zh}/repoctl/aliases.md +18 -18
  81. package/templates/vitepress/zh/repoctl/checks.md +86 -0
  82. package/templates/vitepress/zh/repoctl/commands.md +168 -0
  83. package/templates/vitepress/zh/repoctl/config.md +90 -0
  84. package/templates/vitepress/zh/repoctl/doctor.md +86 -0
  85. package/templates/vitepress/zh/repoctl/execution-model.md +81 -0
  86. package/templates/vitepress/zh/repoctl/getting-started.md +122 -0
  87. package/templates/vitepress/zh/repoctl/index.md +102 -0
  88. package/templates/vitepress/zh/repoctl/reports.md +94 -0
  89. package/templates/vitepress/{en → zh}/repoctl/scenarios.md +28 -26
  90. package/templates/vitepress/zh/repoctl/template-assets.md +116 -0
  91. package/templates/vitepress/zh/repoctl/templates.md +159 -0
  92. package/templates/vitepress/zh/repoctl/troubleshooting.md +110 -0
  93. package/templates/vitepress/zh/repoctl/workflows.md +118 -0
  94. package/templates/vitepress/zh/thinking.md +88 -0
  95. package/templates/vitepress/zh/tools/changeset.md +75 -0
  96. package/templates/vitepress/zh/tools/husky.md +130 -0
  97. package/templates/vitepress/zh/tools/index.md +38 -0
  98. package/templates/vitepress/zh/tools/lint-staged.md +103 -0
  99. package/templates/vitepress/zh/tools/llms-txt.md +9 -0
  100. package/templates/vitepress/zh/tools/pnpm.md +127 -0
  101. package/templates/vitepress/zh/tools/renovate.md +91 -0
  102. package/templates/vitepress/zh/tools/turborepo.md +166 -0
  103. package/templates/vitepress/zh/why/assets/npm-dt.svg +15 -0
  104. package/templates/vitepress/zh/why/assets/npm-ts.svg +19 -0
  105. package/templates/vitepress/zh/why/examples/0.npm-basic-package/index.js +10 -0
  106. package/templates/vitepress/zh/why/examples/0.npm-basic-package/package.json +11 -0
  107. package/templates/vitepress/zh/why/examples/1.npm-basic-package/index.cjs +12 -0
  108. package/templates/vitepress/zh/why/examples/1.npm-basic-package/index.d.ts +1 -0
  109. package/templates/vitepress/zh/why/examples/1.npm-basic-package/index.js +8 -0
  110. package/templates/vitepress/zh/why/examples/1.npm-basic-package/package.json +19 -0
  111. package/templates/vitepress/zh/why/examples/2.npm-basic-package/README.md +1 -0
  112. package/templates/vitepress/zh/why/examples/2.npm-basic-package/package-lock.json +30 -0
  113. package/templates/vitepress/zh/why/examples/2.npm-basic-package/package.json +35 -0
  114. package/templates/vitepress/zh/why/examples/2.npm-basic-package/rename-ext.js +24 -0
  115. package/templates/vitepress/zh/why/examples/2.npm-basic-package/src/index.ts +8 -0
  116. package/templates/vitepress/zh/why/examples/2.npm-basic-package/tsconfig.cjs.json +8 -0
  117. package/templates/vitepress/zh/why/examples/2.npm-basic-package/tsconfig.esm.json +7 -0
  118. package/templates/vitepress/zh/why/examples/2.npm-basic-package/tsconfig.json +18 -0
  119. package/templates/vitepress/zh/why/examples/3.npm-basic-package/README.md +1 -0
  120. package/templates/vitepress/zh/why/examples/3.npm-basic-package/package-lock.json +1496 -0
  121. package/templates/vitepress/zh/why/examples/3.npm-basic-package/package.json +31 -0
  122. package/templates/vitepress/zh/why/examples/3.npm-basic-package/src/index.ts +8 -0
  123. package/templates/vitepress/zh/why/examples/3.npm-basic-package/tsconfig.json +16 -0
  124. package/templates/vitepress/zh/why/examples/3.npm-basic-package/tsdown.config.ts +16 -0
  125. package/templates/vitepress/zh/why/examples/usage-cjs/cjs.cjs +4 -0
  126. package/templates/vitepress/zh/why/examples/usage-cjs/esm.mjs +4 -0
  127. package/templates/vitepress/zh/why/examples/usage-cjs/index.js +8 -0
  128. package/templates/vitepress/zh/why/examples/usage-cjs/package-lock.json +36 -0
  129. package/templates/vitepress/zh/why/examples/usage-cjs/package.json +20 -0
  130. package/templates/vitepress/zh/why/examples/usage-esm/cjs.cjs +4 -0
  131. package/templates/vitepress/zh/why/examples/usage-esm/createRequire.js +7 -0
  132. package/templates/vitepress/zh/why/examples/usage-esm/esm.mjs +4 -0
  133. package/templates/vitepress/zh/why/examples/usage-esm/index.js +8 -0
  134. package/templates/vitepress/zh/why/examples/usage-esm/package-lock.json +36 -0
  135. package/templates/vitepress/zh/why/examples/usage-esm/package.json +21 -0
  136. package/templates/vitepress/zh/why/how-to-reuse-js-code.md +250 -0
  137. package/templates/vitepress/zh/why/index.md +1 -0
  138. package/templates/vitepress/zh/why/js-cjs-mjs.md +99 -0
  139. package/templates/vitepress/zh/why/js-keywords.md +132 -0
  140. package/templates/vitepress/zh/why/modern/bundlers.md +52 -0
  141. package/templates/vitepress/zh/why/modern/dts.md +93 -0
  142. package/templates/vitepress/zh/why/modern/esm-vs-cjs.md +84 -0
  143. package/templates/vitepress/zh/why/modern/index.md +55 -0
  144. package/templates/vitepress/zh/why/modern/package-entry-points.md +128 -0
  145. package/templates/vitepress/zh/why/modern/typescript.md +155 -0
  146. package/templates/vitepress/zh/why/publish-basic-npm-package.md +146 -0
  147. package/templates/vitepress/zh/why/what-is-npm-package.md +162 -0
  148. package/templates/vue-lib/package.json +12 -5
  149. package/templates/vue-lib/vitest.config.ts +1 -1
  150. package/assets/.changeset/config.json +0 -21
  151. package/assets/.changeset/publish-versioned-packages.md +0 -5
  152. package/templates/vitepress/en/index.md +0 -63
  153. package/templates/vitepress/en/knowledge/monorepo.md +0 -37
  154. package/templates/vitepress/en/repoctl/adopt-existing.md +0 -133
  155. package/templates/vitepress/en/repoctl/commands.md +0 -120
  156. package/templates/vitepress/en/repoctl/config.md +0 -69
  157. package/templates/vitepress/en/repoctl/getting-started.md +0 -116
  158. package/templates/vitepress/en/repoctl/index.md +0 -74
  159. package/templates/vitepress/en/repoctl/templates.md +0 -128
  160. package/templates/vitepress/en/repoctl/troubleshooting.md +0 -96
  161. package/templates/vitepress/en/repoctl/workflows.md +0 -89
package/README.md CHANGED
@@ -1,20 +1,24 @@
1
1
  # @icebreakers/monorepo-templates
2
2
 
3
- Template assets and metadata used by `create-icebreaker` and `@icebreakers/monorepo`.
3
+ English | [简体中文](README.zh-CN.md)
4
4
 
5
- This package ships:
5
+ Built-in project templates and managed workspace assets for repoctl.
6
6
 
7
- - `templates/`: app and package templates
8
- - `assets/`: root workspace config files and upgrade assets for `monorepo`
9
- - template metadata helpers such as `getTemplateChoices()`, `getTemplateChoice()`, and `getTemplateDefinition()`
7
+ This package is an implementation dependency of `repoctl` and `create-repoctl`. It publishes:
10
8
 
11
- ## Template Discovery
9
+ - app, service, library, documentation, and CLI templates;
10
+ - managed root tooling and workflow assets;
11
+ - template metadata and health-check helpers;
12
+ - workspace and individual-template scaffold APIs.
12
13
 
13
14
  ```ts
14
- import { getTemplateChoices, getTemplateDefinition } from '@icebreakers/monorepo-templates'
15
+ import {
16
+ getTemplateChoices,
17
+ getTemplateDefinition,
18
+ } from '@icebreakers/monorepo-templates'
15
19
 
16
20
  const libraries = getTemplateChoices({ category: 'library' })
17
21
  const vitepress = getTemplateDefinition('vitepress')
18
22
  ```
19
23
 
20
- The returned metadata is a cloned snapshot, so callers can safely format it for CLI help, docs, or scaffold previews without mutating the package registry.
24
+ The source workspaces under the repository's `templates/` directory are private. This package is their supported distribution boundary.
@@ -0,0 +1,16 @@
1
+ # @icebreakers/monorepo-templates
2
+
3
+ [English](README.md) | 简体中文
4
+
5
+ repoctl 的内置项目模板和受管工作区资产包。
6
+
7
+ 本包是 `repoctl` 与 `create-repoctl` 的实现依赖,发布应用、服务、库、文档站与 CLI 模板,受管根配置和工作流资产,以及模板元数据、健康检查与 scaffold API。
8
+
9
+ ```ts
10
+ import { getTemplateChoices, getTemplateDefinition } from '@icebreakers/monorepo-templates'
11
+
12
+ const libraries = getTemplateChoices({ category: 'library' })
13
+ const vitepress = getTemplateDefinition('vitepress')
14
+ ```
15
+
16
+ 仓库 `templates/` 下的源码工作区均为私有,本包是这些模板的正式分发边界。
@@ -0,0 +1,51 @@
1
+ "@icebreakers/monorepo-templates@1.1.0":
2
+ dir: packages/monorepo-templates
3
+ intents:
4
+ - pnpm-native-versioning
5
+ - release-ci-token
6
+ - repoctl-release-orchestration
7
+ - vitest-native-config
8
+ "@icebreakers/monorepo-templates@1.2.0":
9
+ dir: packages/monorepo-templates
10
+ intents:
11
+ - repoctl-brand-and-i18n
12
+ "@icebreakers/monorepo@5.1.0":
13
+ dir: packages/monorepo
14
+ intents:
15
+ - close-legacy-release-pr
16
+ - human-readable-release-notes
17
+ - pnpm-native-versioning
18
+ - publish-versioned-packages
19
+ - release-ci-token
20
+ - release-links
21
+ - release-npm-links
22
+ - release-npm-links-prepublish
23
+ - release-pr-body
24
+ - release-pr-layout
25
+ - release-test-isolation
26
+ - repoctl-release-orchestration
27
+ "@icebreakers/monorepo@5.1.1":
28
+ dir: packages/monorepo
29
+ intents:
30
+ - release-publish-summary
31
+ - repair-release-notes
32
+ "@icebreakers/monorepo@5.2.0":
33
+ dir: packages/monorepo
34
+ intents:
35
+ - repoctl-brand-and-i18n
36
+ create-icebreaker@1.1.0:
37
+ dir: packages/create-icebreaker
38
+ intents:
39
+ - pnpm-native-versioning
40
+ create-icebreaker@1.1.1:
41
+ dir: packages/create-icebreaker
42
+ intents:
43
+ - repoctl-brand-and-i18n
44
+ create-repoctl@0.1.0:
45
+ dir: packages/create-repoctl
46
+ intents:
47
+ - repoctl-brand-and-i18n
48
+ repoctl@5.2.0:
49
+ dir: packages/repoctl
50
+ intents:
51
+ - repoctl-brand-and-i18n
@@ -1,7 +1,7 @@
1
1
  blank_issues_enabled: false
2
2
  contact_links:
3
3
  - name: Feature Request
4
- url: https://github.com/sonofmagic/monorepo-template/discussions
4
+ url: https://github.com/sonofmagic/repoctl/discussions
5
5
  about: Suggest new features for consideration
6
6
  # - name: Discord Chat
7
7
  # url: https://chat.vuejs.org
@@ -1,3 +1,4 @@
1
+ # repoctl-managed: release/v2
1
2
  name: Release
2
3
 
3
4
  on:
@@ -13,33 +14,37 @@ on:
13
14
  mode:
14
15
  description: Release operation
15
16
  required: true
16
- default: changesets
17
+ default: auto
17
18
  type: choice
18
19
  options:
19
- - changesets
20
+ - auto
21
+ - prepare
22
+ - publish
20
23
  - publish-unpublished
21
24
  package:
22
- description: Package used to verify an unpublished-version recovery
25
+ description: Package used for unpublished-version recovery
23
26
  required: false
24
27
  type: string
25
28
  version:
26
- description: Version used to verify an unpublished-version recovery
29
+ description: Version used for unpublished-version recovery
27
30
  required: false
28
31
  type: string
29
32
 
30
33
  concurrency: ${{ github.workflow }}-${{ github.ref }}
34
+
31
35
  env:
32
36
  HUSKY: 0
37
+ NPM_CONFIG_PROVENANCE: true
38
+ npm_config_registry: https://registry.npmjs.org
33
39
 
34
40
  permissions:
35
- contents: write # to create release (changesets/action)
36
- issues: write # to post issue comments (changesets/action)
37
- pull-requests: write # to create pull request (changesets/action)
38
- id-token: write # to use OpenID Connect token for provenance (changesets/action)
41
+ contents: write
42
+ pull-requests: write
43
+ id-token: write
39
44
 
40
45
  jobs:
41
46
  release:
42
- if: github.ref_name == 'main'
47
+ if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
43
48
  name: Release
44
49
  runs-on: ubuntu-latest
45
50
  steps:
@@ -53,95 +58,15 @@ jobs:
53
58
  with:
54
59
  node-version: 24
55
60
  cache: pnpm
61
+ registry-url: https://registry.npmjs.org
56
62
 
57
63
  - name: Install Dependencies
58
- run: pnpm i
59
-
60
- - name: Create Release Pull Request or Publish to npm
61
- if: github.event_name != 'workflow_dispatch' || inputs.mode == 'changesets'
62
- id: changesets
63
- uses: changesets/action@v2.0.0
64
- with:
65
- github-token: ${{ secrets.GITHUB_TOKEN }}
66
- publish-script: pnpm exec repo release stable
67
- env:
68
- # this doesn't work but semantic-release works
69
- # see https://github.com/sonofmagic/npm-lib-rollup-template/blob/main/.github/workflows/release.yml#L46
70
- # NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
71
- # NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
72
- npm_config_registry: https://registry.npmjs.org
73
- # https://github.com/changesets/changesets/pull/1659
74
- NPM_CONFIG_PROVENANCE: true
75
-
76
- - name: Validate unpublished-version recovery
77
- if: github.event_name == 'workflow_dispatch' && inputs.mode == 'publish-unpublished'
78
- shell: bash
79
- env:
80
- RECOVERY_PACKAGE: ${{ inputs.package }}
81
- RECOVERY_VERSION: ${{ inputs.version }}
82
- run: |
83
- if [[ -z "$RECOVERY_PACKAGE" || -z "$RECOVERY_VERSION" ]]; then
84
- echo "package and version are required for publish-unpublished" >&2
85
- exit 1
86
- fi
87
- actual_version="$(pnpm --filter "$RECOVERY_PACKAGE" exec node -p "require('./package.json').version")"
88
- if [[ "$actual_version" != "$RECOVERY_VERSION" ]]; then
89
- echo "Expected $RECOVERY_PACKAGE@$RECOVERY_VERSION on main, found $actual_version" >&2
90
- exit 1
91
- fi
92
-
93
- - name: Publish unpublished versions to npm
94
- if: github.event_name == 'workflow_dispatch' && inputs.mode == 'publish-unpublished'
95
- run: pnpm exec repo release stable
96
- env:
97
- npm_config_registry: https://registry.npmjs.org
98
- NPM_CONFIG_PROVENANCE: true
99
-
100
- - name: Verify recovered npm version
101
- if: github.event_name == 'workflow_dispatch' && inputs.mode == 'publish-unpublished'
102
- shell: bash
103
- env:
104
- RECOVERY_PACKAGE: ${{ inputs.package }}
105
- RECOVERY_VERSION: ${{ inputs.version }}
106
- run: |
107
- published_version="$(npm view "$RECOVERY_PACKAGE@$RECOVERY_VERSION" version)"
108
- test "$published_version" = "$RECOVERY_VERSION"
109
-
110
- - name: Push recovered release tags
111
- if: github.event_name == 'workflow_dispatch' && inputs.mode == 'publish-unpublished'
112
- run: git push origin --follow-tags
113
-
114
- - name: Upload coverage reports to Codecov
115
- uses: codecov/codecov-action@v7
116
- env:
117
- CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
118
-
119
- prerelease:
120
- if: github.event_name == 'push' && github.ref_name != 'main'
121
- name: Prerelease
122
- runs-on: ubuntu-latest
123
- steps:
124
- - name: Checkout Repo
125
- uses: actions/checkout@v7
126
-
127
- - uses: pnpm/action-setup@v6
128
-
129
- - name: Setup Node.js environment
130
- uses: actions/setup-node@v7
131
- with:
132
- node-version: 24
133
- cache: pnpm
134
-
135
- - name: Install Dependencies
136
- run: pnpm i
137
-
138
- - name: Configure Git
139
- run: |
140
- git config user.name "github-actions[bot]"
141
- git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
64
+ run: pnpm install --frozen-lockfile
142
65
 
143
- - name: Publish Prerelease
144
- run: pnpm exec repo release pre publish
66
+ - name: Run repo release CI
145
67
  env:
146
- npm_config_registry: https://registry.npmjs.org
147
- NPM_CONFIG_PROVENANCE: true
68
+ GITHUB_TOKEN: ${{ github.token }}
69
+ REPO_RELEASE_MODE: ${{ inputs.mode || 'auto' }}
70
+ REPO_RELEASE_PACKAGE: ${{ inputs.package }}
71
+ REPO_RELEASE_VERSION: ${{ inputs.version }}
72
+ run: pnpm exec repo release ci
package/assets/AGENTS.md CHANGED
@@ -2,16 +2,17 @@
2
2
 
3
3
  ## Project Structure & Module Organization
4
4
 
5
- This pnpm + Turbo monorepo keeps template sources under `templates/` (`cli`, `client`, `server`, `vitepress`, `tsdown`, `vue-lib`) and reusable tooling under `packages/` (e.g., `monorepo`, `create-icebreaker`). Shared TypeScript and build settings live in root configs such as `turbo.json`, `tsconfig.json`, and `eslint.config.js`. Tests sit alongside their targets in `test/*.test.ts`, and each app owns its public assets (`public/`, `worker/`) to keep deployments self-contained.
5
+ This repository is the source workspace for repoctl, a task-first CLI for pnpm and Turborepo monorepos. Product packages live under `packages/`: `repoctl` is the recommended entrypoint, `monorepo` contains the core engine, `monorepo-templates` distributes managed assets, and the create packages provide primary and compatibility bootstrap commands. Private template source workspaces live under `templates/`; they are product assets, not independently published packages. Shared TypeScript and build settings live in root configs such as `turbo.json`, `tsconfig.json`, and `eslint.config.js`.
6
6
 
7
7
  ## Build, Test, and Development Commands
8
8
 
9
- - `pnpm install` — set up workspaces; ensure Node 20+ as defined in `package.json`.
9
+ - `pnpm install` — set up workspaces; ensure Node 22.12+ as defined in `package.json`.
10
10
  - `pnpm dev` — run `turbo run dev --parallel` for all apps that expose a `dev` script.
11
11
  - `pnpm build` — execute `turbo run build` to build every workspace with caching.
12
12
  - `pnpm test` / `pnpm test:dev` — run Vitest suites once or in watch mode across packages.
13
13
  - `pnpm lint` — invoke `turbo run lint` to apply ESLint/Stylelint policies repo-wide.
14
- - `pnpm script:sync` & `pnpm script:clean` — use the monorepo helper to align dependency versions or clear generated artifacts.
14
+ - `pnpm repo:doctor` — diagnose the source workspace with the same repoctl entrypoint delivered to users.
15
+ - `pnpm --filter @icebreakers/monorepo-templates sync:assets` — refresh the managed assets and template copies from repository sources.
15
16
 
16
17
  ## Coding Style & Naming Conventions
17
18
 
@@ -40,7 +41,7 @@ When building TypeScript libraries (type-focused APIs or public type definitions
40
41
 
41
42
  ## Commit & Pull Request Guidelines
42
43
 
43
- Commits must conform to Conventional Commit syntax; recent history uses prefixes like `feat`, `fix`, and `chore`. Example: `feat(server): add auth router`. Use `pnpm commit` (commitlint prompt) or ensure your manual message passes `pnpm commitlint --edit`. Before opening a PR, make sure `pnpm lint` and `pnpm test` succeed, link related issues, and provide screenshots or logs for user-facing changes. Touching publishable packages requires a changeset (`pnpm changeset`) so releases stay traceable.
44
+ Commits must conform to Conventional Commit syntax; recent history uses prefixes like `feat`, `fix`, and `chore`. Example: `feat(server): add auth router`. Use `pnpm commit` (commitlint prompt) or ensure your manual message passes `pnpm commitlint --edit`. Before opening a PR, make sure `pnpm lint` and `pnpm test` succeed, link related issues, and provide screenshots or logs for user-facing changes. Touching publishable packages requires a pnpm change intent (`pnpm change`) so releases stay traceable.
44
45
 
45
46
  For AI-generated or AI-assisted changes, use this verification order before commit or PR:
46
47
 
@@ -1,3 +1,28 @@
1
- # Contributing
1
+ # Contributing to repoctl
2
2
 
3
- TODO
3
+ English | [简体中文](CONTRIBUTING.zh-CN.md)
4
+
5
+ repoctl accepts bug fixes, documentation improvements, tests, and focused feature proposals.
6
+
7
+ ## Development setup
8
+
9
+ 1. Use Node.js 22.12+ and enable Corepack.
10
+ 2. Run `pnpm install`.
11
+ 3. Create a focused branch from `main`.
12
+ 4. Add or update tests with the implementation.
13
+
14
+ Before opening a pull request, run:
15
+
16
+ ```bash
17
+ pnpm build
18
+ pnpm lint
19
+ pnpm typecheck
20
+ pnpm tsd
21
+ pnpm test
22
+ ```
23
+
24
+ Changes to publishable packages require a pnpm change intent created with `pnpm change`. Commits must use Conventional Commit syntax.
25
+
26
+ When changing templates or managed root assets, update their source first and refresh packaged copies with `pnpm --filter @icebreakers/monorepo-templates sync:assets`.
27
+
28
+ Report bugs at https://github.com/sonofmagic/repoctl/issues and use discussions for design questions that do not yet have a concrete implementation.
@@ -1,21 +1,19 @@
1
1
  # Security Policy
2
2
 
3
- ## Supported Versions
3
+ English | [简体中文](SECURITY.zh-CN.md)
4
4
 
5
- Use this section to tell people about which versions of your project are
6
- currently being supported with security updates.
5
+ ## Supported versions
7
6
 
8
- | Version | Supported |
9
- | ------- | ------------------ |
10
- | 5.1.x | :white_check_mark: |
11
- | 5.0.x | :x: |
12
- | 4.0.x | :white_check_mark: |
13
- | < 4.0 | :x: |
7
+ Security fixes are provided for the latest stable major release of `repoctl` and its fixed-version core package. Upgrade to the latest release before reporting a problem that may already be resolved.
14
8
 
15
- ## Reporting a Vulnerability
9
+ ## Reporting a vulnerability
16
10
 
17
- Use this section to tell people how to report a vulnerability.
11
+ Do not open a public issue for a suspected vulnerability. Use GitHub's private vulnerability reporting for `sonofmagic/repoctl`:
18
12
 
19
- Tell them where to go, how often they can expect to get an update on a
20
- reported vulnerability, what to expect if the vulnerability is accepted or
21
- declined, etc.
13
+ https://github.com/sonofmagic/repoctl/security/advisories/new
14
+
15
+ Include the affected version, environment, impact, reproduction steps, and any suggested mitigation. Maintainers will acknowledge a complete report as soon as practical and coordinate validation, remediation, and disclosure with the reporter.
16
+
17
+ ## Scope
18
+
19
+ Reports involving repoctl command execution, generated workflow security, release credentials, dependency handling, path traversal, or unsafe template extraction are in scope. Vulnerabilities in third-party tools should also be reported upstream when appropriate.
@@ -1,17 +1,26 @@
1
1
  {
2
- "name": "monorepo-template",
2
+ "name": "repoctl-workspace",
3
3
  "type": "module",
4
4
  "version": "0.0.0",
5
5
  "private": true,
6
- "packageManager": "pnpm@11.21.0",
6
+ "packageManager": "pnpm@11.22.0",
7
+ "description": "Source workspace for repoctl, a task-first CLI for pnpm and Turborepo monorepos",
7
8
  "author": "ice breaker <hi@sonofmagic.top>",
9
+ "homepage": "https://repo.icebreaker.top",
8
10
  "repository": {
9
11
  "type": "git",
10
- "url": "git+https://github.com/sonofmagic/monorepo-template.git"
12
+ "url": "git+https://github.com/sonofmagic/repoctl.git"
11
13
  },
12
14
  "bugs": {
13
- "url": "https://github.com/sonofmagic/monorepo-template/issues"
15
+ "url": "https://github.com/sonofmagic/repoctl/issues"
14
16
  },
17
+ "keywords": [
18
+ "repoctl",
19
+ "monorepo",
20
+ "pnpm",
21
+ "turborepo",
22
+ "typescript"
23
+ ],
15
24
  "engines": {
16
25
  "node": ">=22.12.0"
17
26
  },
@@ -30,8 +39,9 @@
30
39
  "typecheck": "turbo run typecheck",
31
40
  "format": "eslint . --fix",
32
41
  "validate": "pnpm run build && pnpm run lint && pnpm run typecheck && pnpm run tsd && pnpm run test",
33
- "release": "changeset",
34
- "publish-packages": "repo release stable",
42
+ "release": "pnpm change",
43
+ "version-packages": "pnpm version -r",
44
+ "publish-packages": "repo release stable publish",
35
45
  "release:pre": "repo release pre publish",
36
46
  "------": "--------------",
37
47
  "preinstall": "npx only-allow pnpm",
@@ -52,9 +62,7 @@
52
62
  "--------": "----------------"
53
63
  },
54
64
  "devDependencies": {
55
- "@changesets/cli": "^3.0.0",
56
- "@commitlint/cli": "^21.2.1",
57
- "@icebreakers/changelog-github": "^2.0.0",
65
+ "@commitlint/cli": "^21.2.2",
58
66
  "@icebreakers/monorepo": "workspace:*",
59
67
  "@types/node": "^26.2.0",
60
68
  "@types/semver": "^7.8.0",
@@ -76,7 +84,7 @@
76
84
  "tsdown": "0.22.14",
77
85
  "tslib": "^2.8.1",
78
86
  "tsx": "^4.23.12",
79
- "turbo": "^2.10.9",
87
+ "turbo": "^2.10.10",
80
88
  "type-fest": "^5.8.0",
81
89
  "typescript": "^6.0.3",
82
90
  "vitest": "~4.1.10",
@@ -6,6 +6,14 @@ packages:
6
6
 
7
7
  minimumReleaseAge: 0
8
8
 
9
+ versioning:
10
+ fixed:
11
+ - ['@icebreakers/monorepo', repoctl]
12
+ ignore:
13
+ - '@icebreakers/client'
14
+ changelog:
15
+ storage: repository
16
+
9
17
  allowBuilds:
10
18
  '@tailwindcss/oxide': true
11
19
  esbuild: true
package/package.json CHANGED
@@ -1,19 +1,21 @@
1
1
  {
2
2
  "name": "@icebreakers/monorepo-templates",
3
3
  "type": "module",
4
- "version": "1.0.15",
5
- "description": "Template assets for icebreaker monorepo scaffolding",
4
+ "version": "1.2.0",
5
+ "description": "Built-in project templates and managed workspace assets for repoctl",
6
6
  "author": "ice breaker <hi@sonofmagic.top>",
7
7
  "license": "MIT",
8
+ "homepage": "https://repo.icebreaker.top",
8
9
  "repository": {
9
10
  "type": "git",
10
- "url": "git+https://github.com/sonofmagic/monorepo-template.git",
11
+ "url": "git+https://github.com/sonofmagic/repoctl.git",
11
12
  "directory": "packages/monorepo-templates"
12
13
  },
13
14
  "bugs": {
14
- "url": "https://github.com/sonofmagic/monorepo-template/issues"
15
+ "url": "https://github.com/sonofmagic/repoctl/issues"
15
16
  },
16
17
  "keywords": [
18
+ "repoctl",
17
19
  "monorepo",
18
20
  "template",
19
21
  "scaffold"
@@ -2,18 +2,25 @@
2
2
  "name": "@icebreakers/cli",
3
3
  "type": "module",
4
4
  "version": "0.0.0",
5
- "description": "icebreaker's cli template",
5
+ "private": true,
6
+ "description": "Internal CLI template shipped with repoctl",
6
7
  "author": "ice breaker <hi@sonofmagic.top>",
7
8
  "license": "MIT",
9
+ "homepage": "https://repo.icebreaker.top",
8
10
  "repository": {
9
11
  "type": "git",
10
- "url": "git+https://github.com/sonofmagic/monorepo-template.git",
12
+ "url": "git+https://github.com/sonofmagic/repoctl.git",
11
13
  "directory": "templates/cli"
12
14
  },
13
15
  "bugs": {
14
- "url": "https://github.com/sonofmagic/monorepo-template/issues"
16
+ "url": "https://github.com/sonofmagic/repoctl/issues"
15
17
  },
16
- "keywords": [],
18
+ "keywords": [
19
+ "repoctl",
20
+ "cli",
21
+ "template",
22
+ "typescript"
23
+ ],
17
24
  "bin": {
18
25
  "ice": "./dev/index.ts"
19
26
  },
@@ -3,6 +3,22 @@
3
3
  "type": "module",
4
4
  "version": "0.0.1",
5
5
  "private": true,
6
+ "description": "Internal Vue and Cloudflare application template shipped with repoctl",
7
+ "homepage": "https://repo.icebreaker.top",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/sonofmagic/repoctl.git",
11
+ "directory": "templates/client"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/sonofmagic/repoctl/issues"
15
+ },
16
+ "keywords": [
17
+ "repoctl",
18
+ "vue",
19
+ "cloudflare",
20
+ "template"
21
+ ],
6
22
  "scripts": {
7
23
  "dev": "vite --host",
8
24
  "build": "vue-tsc -b && vite build",
@@ -15,7 +31,7 @@
15
31
  "typecheck": "pnpm cf-typegen:check && vue-tsc -b"
16
32
  },
17
33
  "dependencies": {
18
- "@faker-js/faker": "^10.5.0",
34
+ "@faker-js/faker": "^10.6.0",
19
35
  "@tanstack/vue-query": "^5.101.4",
20
36
  "@tanstack/vue-query-devtools": "^6.1.38",
21
37
  "@tanstack/vue-table": "^9.1.2",
@@ -30,8 +46,8 @@
30
46
  "vue-router": "^5.2.0"
31
47
  },
32
48
  "devDependencies": {
33
- "@cloudflare/vite-plugin": "^1.52.0",
34
- "@hono/node-server": "^2.1.0",
49
+ "@cloudflare/vite-plugin": "^1.52.1",
50
+ "@hono/node-server": "^2.1.1",
35
51
  "@hono/trpc-server": "^0.4.2",
36
52
  "@tailwindcss/vite": "^4.3.3",
37
53
  "@trpc/server": "^11.18.0",
@@ -39,14 +55,14 @@
39
55
  "@vitejs/plugin-vue-jsx": "^5.1.6",
40
56
  "@vue/tsconfig": "^0.9.1",
41
57
  "consola": "^3.4.2",
42
- "hono": "^4.13.1",
58
+ "hono": "^4.13.2",
43
59
  "tailwindcss": "^4.3.3",
44
60
  "typescript": "~6.0.3",
45
61
  "vite": "^8.2.1",
46
62
  "vite-plugin-vue-devtools": "^8.2.1",
47
63
  "vite-tsconfig-paths": "^6.1.1",
48
- "vue-tsc": "3.3.9",
49
- "wrangler": "^4.122.0",
64
+ "vue-tsc": "3.3.10",
65
+ "wrangler": "^4.123.0",
50
66
  "zod": "^4.4.3"
51
67
  }
52
68
  }
@@ -2,18 +2,25 @@
2
2
  "name": "@icebreakers/server",
3
3
  "type": "module",
4
4
  "version": "0.0.1",
5
- "description": "tsdown build package template",
5
+ "private": true,
6
+ "description": "Internal server package template shipped with repoctl",
6
7
  "author": "ice breaker <hi@sonofmagic.top>",
7
8
  "license": "MIT",
9
+ "homepage": "https://repo.icebreaker.top",
8
10
  "repository": {
9
11
  "type": "git",
10
- "url": "git+https://github.com/sonofmagic/monorepo-template.git",
12
+ "url": "git+https://github.com/sonofmagic/repoctl.git",
11
13
  "directory": "templates/server"
12
14
  },
13
15
  "bugs": {
14
- "url": "https://github.com/sonofmagic/monorepo-template/issues"
16
+ "url": "https://github.com/sonofmagic/repoctl/issues"
15
17
  },
16
- "keywords": [],
18
+ "keywords": [
19
+ "repoctl",
20
+ "server",
21
+ "hono",
22
+ "template"
23
+ ],
17
24
  "sideEffects": false,
18
25
  "exports": {
19
26
  ".": "./src/index.ts",
@@ -54,11 +61,11 @@
54
61
  "types": "./dist/index.d.ts"
55
62
  },
56
63
  "devDependencies": {
57
- "@hono/node-server": "^2.1.0",
64
+ "@hono/node-server": "^2.1.1",
58
65
  "consola": "^3.4.2",
59
- "hono": "^4.13.1",
66
+ "hono": "^4.13.2",
60
67
  "tsdown": "0.22.14",
61
- "wrangler": "^4.122.0",
68
+ "wrangler": "^4.123.0",
62
69
  "zod": "^4.4.3"
63
70
  }
64
71
  }
@@ -1,16 +1,13 @@
1
1
  import path from 'node:path'
2
- import { fileURLToPath } from 'node:url'
3
2
  import { defineVitestProjectConfig } from 'repoctl/tooling'
4
3
  import { defineProject } from 'vitest/config'
5
4
 
6
- const __dirname = path.dirname(fileURLToPath(import.meta.url))
7
-
8
5
  export default defineProject(await defineVitestProjectConfig({
9
6
  options: {
10
7
  alias: [
11
8
  {
12
9
  find: '@',
13
- replacement: path.resolve(__dirname, './src'),
10
+ replacement: path.resolve(import.meta.dirname, './src'),
14
11
  },
15
12
  ],
16
13
  },
@@ -2,18 +2,25 @@
2
2
  "name": "@icebreakers/tsdown-template",
3
3
  "type": "module",
4
4
  "version": "0.0.0",
5
- "description": "tsdown bundler template",
5
+ "private": true,
6
+ "description": "Internal TypeScript library template shipped with repoctl",
6
7
  "author": "ice breaker <hi@sonofmagic.top>",
7
8
  "license": "MIT",
9
+ "homepage": "https://repo.icebreaker.top",
8
10
  "repository": {
9
11
  "type": "git",
10
- "url": "git+https://github.com/sonofmagic/monorepo-template.git",
12
+ "url": "git+https://github.com/sonofmagic/repoctl.git",
11
13
  "directory": "templates/tsdown"
12
14
  },
13
15
  "bugs": {
14
- "url": "https://github.com/sonofmagic/monorepo-template/issues"
16
+ "url": "https://github.com/sonofmagic/repoctl/issues"
15
17
  },
16
- "keywords": [],
18
+ "keywords": [
19
+ "repoctl",
20
+ "typescript",
21
+ "library",
22
+ "template"
23
+ ],
17
24
  "sideEffects": false,
18
25
  "exports": {
19
26
  ".": {