-
Notifications
You must be signed in to change notification settings - Fork 19
/
generateTemplate.ts
159 lines (140 loc) · 3.98 KB
/
generateTemplate.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
import { readFileSync, writeFileSync } from 'node:fs'
import { createRequire } from 'node:module'
import { dirname, join } from 'node:path'
import inquirer from 'inquirer'
import type { CreateLocaleOptions, Lang } from '../i18n/index.js'
import type { PackageManager } from '../utils/index.js'
import { copy, ensureDirExistSync } from '../utils/index.js'
const templateFolder = join(
dirname(
createRequire(import.meta.url).resolve('create-vuepress/package.json'),
),
'./template',
)
const getWorkflowContent = (
packageManager: PackageManager,
lang: Lang,
): string =>
`
name: ${lang === '简体中文' ? '部署文档' : 'Deploy Docs'}
on:
push:
branches:
# ${
lang === '简体中文'
? '确保这是你正在使用的分支名称'
: 'make sure this is the branch you are using'
}
- main
permissions:
contents: write
jobs:
deploy-gh-pages:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
# ${
lang === '简体中文'
? '如果你文档需要 Git 子模块,取消注释下一行'
: 'if your docs needs submodules, uncomment the following line'
}
# submodules: true
${
packageManager === 'pnpm'
? `\
- name: ${lang === '简体中文' ? '安装 pnpm' : 'Install pnpm'}
uses: pnpm/action-setup@v2
with:
run_install: true
version: 8
`
: ''
}
- name: ${lang === '简体中文' ? '设置 Node.js' : 'Setup Node.js'}
uses: actions/setup-node@v3
with:
node-version: 20
cache: ${packageManager}
${
packageManager !== 'pnpm'
? `\
- name: ${lang === '简体中文' ? '安装依赖' : 'Install Deps'}
run: ${
packageManager === 'npm'
? 'npm ci'
: `${packageManager} install --frozen-lockfile`
}
`
: ''
}
- name: ${lang === '简体中文' ? '构建文档' : 'Build Docs'}
env:
NODE_OPTIONS: --max_old_space_size=8192
run: |-
${packageManager} run docs:build
> docs/.vuepress/dist/.nojekyll
- name: ${lang === '简体中文' ? '部署文档' : 'Deploy Docs'}
uses: JamesIves/github-pages-deploy-action@v4
with:
# ${
lang === '简体中文'
? '这是文档部署到的分支名称'
: 'This is the branch where the docs are deployed to'
}
branch: gh-pages
folder: docs/.vuepress/dist
`
interface GenerateTemplateOptions {
targetDirPath: string
lang: Lang
packageManager: PackageManager
locale: CreateLocaleOptions
preset: 'blog' | 'docs'
bundler: 'vite' | 'webpack'
}
export const generateTemplate = async ({
targetDirPath,
packageManager,
lang,
locale,
preset,
bundler,
}: GenerateTemplateOptions): Promise<void> => {
const { workflow } = await inquirer.prompt<{
workflow: boolean
}>([
{
name: 'workflow',
type: 'confirm',
message: locale.question.workflow,
default: true,
},
])
console.log(locale.flow.generateTemplate)
// copy template
copy(join(templateFolder, preset), join(targetDirPath, 'docs'))
const configFilePath = join(targetDirPath, 'docs/.vuepress/config.js')
const content = readFileSync(configFilePath, { encoding: 'utf-8' })
writeFileSync(
configFilePath,
content
.replace(
/\n\nexport default defineUserConfig\(\{/,
`\nimport { ${bundler}Bundler } from '@vuepress/bundler-${bundler}'\n\nexport default defineUserConfig({`,
)
.replace(/\}\)\n$/, `\n bundler: ${bundler}Bundler(),\n})\n`),
{ encoding: 'utf-8' },
)
if (workflow) {
const workflowDir = join(targetDirPath, '.github/workflows')
ensureDirExistSync(workflowDir)
writeFileSync(
join(workflowDir, 'deploy-docs.yml'),
getWorkflowContent(packageManager, lang),
{ encoding: 'utf-8' },
)
}
}