@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.
- package/README.md +12 -8
- package/README.zh-CN.md +16 -0
- package/assets/.changeset/ledger.yaml +51 -0
- package/assets/.github/ISSUE_TEMPLATE/config.yml +1 -1
- package/assets/.github/workflows/release.yml +22 -97
- package/assets/AGENTS.md +5 -4
- package/assets/CONTRIBUTING.md +27 -2
- package/assets/SECURITY.md +12 -14
- package/assets/package.json +18 -10
- package/assets/pnpm-workspace.yaml +8 -0
- package/package.json +6 -4
- package/templates/cli/package.json +11 -4
- package/templates/client/package.json +22 -6
- package/templates/server/package.json +14 -7
- package/templates/server/vitest.config.ts +1 -4
- package/templates/tsdown/package.json +11 -4
- package/templates/tsdown/vitest.config.ts +1 -4
- package/templates/vitepress/.vitepress/config.ts +146 -165
- package/templates/vitepress/ai/index.md +12 -23
- package/templates/vitepress/ai/llms-txt.md +13 -31
- package/templates/vitepress/getting-started.md +3 -32
- package/templates/vitepress/index.md +27 -30
- package/templates/vitepress/knowledge/index.md +17 -41
- package/templates/vitepress/monorepo/commands.md +13 -18
- package/templates/vitepress/monorepo/index.md +22 -100
- package/templates/vitepress/monorepo/manage.md +15 -227
- package/templates/vitepress/monorepo/publish.md +17 -245
- package/templates/vitepress/monorepo/templates.md +10 -17
- package/templates/vitepress/monorepo/troubleshooting.md +13 -16
- package/templates/vitepress/package.json +11 -5
- package/templates/vitepress/public/_redirects +3 -0
- package/templates/vitepress/repoctl/adopt-existing.md +51 -53
- package/templates/vitepress/repoctl/aliases.md +18 -18
- package/templates/vitepress/repoctl/checks.md +21 -68
- package/templates/vitepress/repoctl/commands.md +16 -64
- package/templates/vitepress/repoctl/config.md +14 -35
- package/templates/vitepress/repoctl/doctor.md +20 -60
- package/templates/vitepress/repoctl/execution-model.md +16 -69
- package/templates/vitepress/repoctl/getting-started.md +34 -40
- package/templates/vitepress/repoctl/index.md +33 -61
- package/templates/vitepress/repoctl/reports.md +20 -74
- package/templates/vitepress/repoctl/scenarios.md +26 -28
- package/templates/vitepress/repoctl/template-assets.md +19 -88
- package/templates/vitepress/repoctl/templates.md +50 -81
- package/templates/vitepress/repoctl/troubleshooting.md +32 -46
- package/templates/vitepress/repoctl/workflows.md +38 -67
- package/templates/vitepress/thinking.md +4 -85
- package/templates/vitepress/tools/changeset.md +12 -85
- package/templates/vitepress/tools/husky.md +6 -124
- package/templates/vitepress/tools/index.md +13 -32
- package/templates/vitepress/tools/lint-staged.md +5 -96
- package/templates/vitepress/tools/llms-txt.md +4 -6
- package/templates/vitepress/tools/pnpm.md +7 -119
- package/templates/vitepress/tools/renovate.md +3 -87
- package/templates/vitepress/tools/turborepo.md +5 -157
- package/templates/vitepress/why/how-to-reuse-js-code.md +6 -247
- package/templates/vitepress/why/index.md +14 -1
- package/templates/vitepress/why/js-cjs-mjs.md +9 -96
- package/templates/vitepress/why/js-keywords.md +4 -129
- package/templates/vitepress/why/modern/bundlers.md +3 -50
- package/templates/vitepress/why/modern/dts.md +4 -90
- package/templates/vitepress/why/modern/esm-vs-cjs.md +4 -81
- package/templates/vitepress/why/modern/index.md +10 -51
- package/templates/vitepress/why/modern/package-entry-points.md +6 -117
- package/templates/vitepress/why/modern/typescript.md +4 -152
- package/templates/vitepress/why/publish-basic-npm-package.md +17 -144
- package/templates/vitepress/why/what-is-npm-package.md +4 -159
- package/templates/vitepress/zh/ai/index.md +33 -0
- package/templates/vitepress/zh/ai/llms-txt.md +42 -0
- package/templates/vitepress/zh/getting-started.md +40 -0
- package/templates/vitepress/zh/index.md +66 -0
- package/templates/vitepress/zh/knowledge/index.md +50 -0
- package/templates/vitepress/zh/monorepo/commands.md +21 -0
- package/templates/vitepress/zh/monorepo/index.md +115 -0
- package/templates/vitepress/zh/monorepo/manage.md +243 -0
- package/templates/vitepress/zh/monorepo/publish.md +87 -0
- package/templates/vitepress/zh/monorepo/templates.md +21 -0
- package/templates/vitepress/zh/monorepo/troubleshooting.md +20 -0
- package/templates/vitepress/zh/repoctl/adopt-existing.md +135 -0
- package/templates/vitepress/{en → zh}/repoctl/aliases.md +18 -18
- package/templates/vitepress/zh/repoctl/checks.md +86 -0
- package/templates/vitepress/zh/repoctl/commands.md +168 -0
- package/templates/vitepress/zh/repoctl/config.md +90 -0
- package/templates/vitepress/zh/repoctl/doctor.md +86 -0
- package/templates/vitepress/zh/repoctl/execution-model.md +81 -0
- package/templates/vitepress/zh/repoctl/getting-started.md +122 -0
- package/templates/vitepress/zh/repoctl/index.md +102 -0
- package/templates/vitepress/zh/repoctl/reports.md +94 -0
- package/templates/vitepress/{en → zh}/repoctl/scenarios.md +28 -26
- package/templates/vitepress/zh/repoctl/template-assets.md +116 -0
- package/templates/vitepress/zh/repoctl/templates.md +159 -0
- package/templates/vitepress/zh/repoctl/troubleshooting.md +110 -0
- package/templates/vitepress/zh/repoctl/workflows.md +118 -0
- package/templates/vitepress/zh/thinking.md +88 -0
- package/templates/vitepress/zh/tools/changeset.md +75 -0
- package/templates/vitepress/zh/tools/husky.md +130 -0
- package/templates/vitepress/zh/tools/index.md +38 -0
- package/templates/vitepress/zh/tools/lint-staged.md +103 -0
- package/templates/vitepress/zh/tools/llms-txt.md +9 -0
- package/templates/vitepress/zh/tools/pnpm.md +127 -0
- package/templates/vitepress/zh/tools/renovate.md +91 -0
- package/templates/vitepress/zh/tools/turborepo.md +166 -0
- package/templates/vitepress/zh/why/assets/npm-dt.svg +15 -0
- package/templates/vitepress/zh/why/assets/npm-ts.svg +19 -0
- package/templates/vitepress/zh/why/examples/0.npm-basic-package/index.js +10 -0
- package/templates/vitepress/zh/why/examples/0.npm-basic-package/package.json +11 -0
- package/templates/vitepress/zh/why/examples/1.npm-basic-package/index.cjs +12 -0
- package/templates/vitepress/zh/why/examples/1.npm-basic-package/index.d.ts +1 -0
- package/templates/vitepress/zh/why/examples/1.npm-basic-package/index.js +8 -0
- package/templates/vitepress/zh/why/examples/1.npm-basic-package/package.json +19 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/README.md +1 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/package-lock.json +30 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/package.json +35 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/rename-ext.js +24 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/src/index.ts +8 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/tsconfig.cjs.json +8 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/tsconfig.esm.json +7 -0
- package/templates/vitepress/zh/why/examples/2.npm-basic-package/tsconfig.json +18 -0
- package/templates/vitepress/zh/why/examples/3.npm-basic-package/README.md +1 -0
- package/templates/vitepress/zh/why/examples/3.npm-basic-package/package-lock.json +1496 -0
- package/templates/vitepress/zh/why/examples/3.npm-basic-package/package.json +31 -0
- package/templates/vitepress/zh/why/examples/3.npm-basic-package/src/index.ts +8 -0
- package/templates/vitepress/zh/why/examples/3.npm-basic-package/tsconfig.json +16 -0
- package/templates/vitepress/zh/why/examples/3.npm-basic-package/tsdown.config.ts +16 -0
- package/templates/vitepress/zh/why/examples/usage-cjs/cjs.cjs +4 -0
- package/templates/vitepress/zh/why/examples/usage-cjs/esm.mjs +4 -0
- package/templates/vitepress/zh/why/examples/usage-cjs/index.js +8 -0
- package/templates/vitepress/zh/why/examples/usage-cjs/package-lock.json +36 -0
- package/templates/vitepress/zh/why/examples/usage-cjs/package.json +20 -0
- package/templates/vitepress/zh/why/examples/usage-esm/cjs.cjs +4 -0
- package/templates/vitepress/zh/why/examples/usage-esm/createRequire.js +7 -0
- package/templates/vitepress/zh/why/examples/usage-esm/esm.mjs +4 -0
- package/templates/vitepress/zh/why/examples/usage-esm/index.js +8 -0
- package/templates/vitepress/zh/why/examples/usage-esm/package-lock.json +36 -0
- package/templates/vitepress/zh/why/examples/usage-esm/package.json +21 -0
- package/templates/vitepress/zh/why/how-to-reuse-js-code.md +250 -0
- package/templates/vitepress/zh/why/index.md +1 -0
- package/templates/vitepress/zh/why/js-cjs-mjs.md +99 -0
- package/templates/vitepress/zh/why/js-keywords.md +132 -0
- package/templates/vitepress/zh/why/modern/bundlers.md +52 -0
- package/templates/vitepress/zh/why/modern/dts.md +93 -0
- package/templates/vitepress/zh/why/modern/esm-vs-cjs.md +84 -0
- package/templates/vitepress/zh/why/modern/index.md +55 -0
- package/templates/vitepress/zh/why/modern/package-entry-points.md +128 -0
- package/templates/vitepress/zh/why/modern/typescript.md +155 -0
- package/templates/vitepress/zh/why/publish-basic-npm-package.md +146 -0
- package/templates/vitepress/zh/why/what-is-npm-package.md +162 -0
- package/templates/vue-lib/package.json +12 -5
- package/templates/vue-lib/vitest.config.ts +1 -1
- package/assets/.changeset/config.json +0 -21
- package/assets/.changeset/publish-versioned-packages.md +0 -5
- package/templates/vitepress/en/index.md +0 -63
- package/templates/vitepress/en/knowledge/monorepo.md +0 -37
- package/templates/vitepress/en/repoctl/adopt-existing.md +0 -133
- package/templates/vitepress/en/repoctl/commands.md +0 -120
- package/templates/vitepress/en/repoctl/config.md +0 -69
- package/templates/vitepress/en/repoctl/getting-started.md +0 -116
- package/templates/vitepress/en/repoctl/index.md +0 -74
- package/templates/vitepress/en/repoctl/templates.md +0 -128
- package/templates/vitepress/en/repoctl/troubleshooting.md +0 -96
- 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
|
-
|
|
3
|
+
English | [简体中文](README.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Built-in project templates and managed workspace assets for repoctl.
|
|
6
6
|
|
|
7
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
|
24
|
+
The source workspaces under the repository's `templates/` directory are private. This package is their supported distribution boundary.
|
package/README.zh-CN.md
ADDED
|
@@ -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/
|
|
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:
|
|
17
|
+
default: auto
|
|
17
18
|
type: choice
|
|
18
19
|
options:
|
|
19
|
-
-
|
|
20
|
+
- auto
|
|
21
|
+
- prepare
|
|
22
|
+
- publish
|
|
20
23
|
- publish-unpublished
|
|
21
24
|
package:
|
|
22
|
-
description: Package used
|
|
25
|
+
description: Package used for unpublished-version recovery
|
|
23
26
|
required: false
|
|
24
27
|
type: string
|
|
25
28
|
version:
|
|
26
|
-
description: Version used
|
|
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
|
|
36
|
-
|
|
37
|
-
|
|
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.
|
|
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
|
|
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:
|
|
144
|
-
run: pnpm exec repo release pre publish
|
|
66
|
+
- name: Run repo release CI
|
|
145
67
|
env:
|
|
146
|
-
|
|
147
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
package/assets/CONTRIBUTING.md
CHANGED
|
@@ -1,3 +1,28 @@
|
|
|
1
|
-
# Contributing
|
|
1
|
+
# Contributing to repoctl
|
|
2
2
|
|
|
3
|
-
|
|
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.
|
package/assets/SECURITY.md
CHANGED
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
# Security Policy
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
English | [简体中文](SECURITY.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
currently being supported with security updates.
|
|
5
|
+
## Supported versions
|
|
7
6
|
|
|
8
|
-
|
|
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
|
|
9
|
+
## Reporting a vulnerability
|
|
16
10
|
|
|
17
|
-
|
|
11
|
+
Do not open a public issue for a suspected vulnerability. Use GitHub's private vulnerability reporting for `sonofmagic/repoctl`:
|
|
18
12
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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.
|
package/assets/package.json
CHANGED
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
2
|
+
"name": "repoctl-workspace",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"version": "0.0.0",
|
|
5
5
|
"private": true,
|
|
6
|
-
"packageManager": "pnpm@11.
|
|
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/
|
|
12
|
+
"url": "git+https://github.com/sonofmagic/repoctl.git"
|
|
11
13
|
},
|
|
12
14
|
"bugs": {
|
|
13
|
-
"url": "https://github.com/sonofmagic/
|
|
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": "
|
|
34
|
-
"
|
|
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
|
-
"@
|
|
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.
|
|
87
|
+
"turbo": "^2.10.10",
|
|
80
88
|
"type-fest": "^5.8.0",
|
|
81
89
|
"typescript": "^6.0.3",
|
|
82
90
|
"vitest": "~4.1.10",
|
package/package.json
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@icebreakers/monorepo-templates",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0
|
|
5
|
-
"description": "
|
|
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/
|
|
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/
|
|
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
|
-
"
|
|
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/
|
|
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/
|
|
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.
|
|
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.
|
|
34
|
-
"@hono/node-server": "^2.1.
|
|
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.
|
|
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.
|
|
49
|
-
"wrangler": "^4.
|
|
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
|
-
"
|
|
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/
|
|
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/
|
|
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.
|
|
64
|
+
"@hono/node-server": "^2.1.1",
|
|
58
65
|
"consola": "^3.4.2",
|
|
59
|
-
"hono": "^4.13.
|
|
66
|
+
"hono": "^4.13.2",
|
|
60
67
|
"tsdown": "0.22.14",
|
|
61
|
-
"wrangler": "^4.
|
|
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(
|
|
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
|
-
"
|
|
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/
|
|
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/
|
|
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
|
".": {
|