1
1
import { exec } from 'node:child_process'
2
- import https from 'node:https'
3
- import fs from 'node:fs'
4
- import inquirer from 'inquirer'
5
- import { getGithubVersion } from '#common/utils/update/update.js'
6
- import { logger } from '#common/utils/logger/logger.js'
7
2
8
- /**
9
- * 根据环境进行更新
10
- * @param {"cli"|"project" } env
11
- */
12
- export async function updateByEnv ( env ) {
13
- switch ( env ) {
14
- case 'cli' :
15
- // 执行CLI更新逻辑
16
- return await updateCli ( )
17
- case 'project' :
18
- // 执行项目更新逻辑
19
- return await updateProject ( )
20
- default :
21
- throw new Error ( `Unsupported environment: ${ env } ` )
22
- }
23
- }
24
3
/**
25
4
* 更新CLI
26
5
* @returns {Promise<void> }
@@ -33,89 +12,3 @@ export function updateCli() {
33
12
} )
34
13
} )
35
14
}
36
- /**
37
- * 更新项目
38
- * @returns {Promise<void> }
39
- */
40
- export async function updateProject ( ) {
41
- logger . info ( '脚本升级中,请等待后续版本更新...' )
42
- return
43
- // todo 更新项目
44
- // 0. 询问是否存在自己修改过的内容
45
- // 0.1 如果有过更改,终止更新脚本,并给出提示建议
46
- // 0.2 如果没有更改,进行更新操作
47
- // 1. 检测当前的git工作区
48
- // 1.1 如果有内容,提示提交,终止更新
49
- // 1.2 如果空,可以进行更新
50
- // 2. 通过raw.github.com下载所有的文件并对应更新文件(除package.json)
51
- // 2.0 所有的文件在更新后都进行git add [file-path]
52
- // 2.1 如果文件不存在,则创建文件
53
- // 2.2 如果文件存在,则覆盖文件
54
- // 2.3 更新package.json文件中的版本号为最新的版本号.
55
- // 3. 创建一个git的commit update:Version [版本号]
56
- // 4. 完成更新
57
- async function execCommand ( command ) {
58
- return new Promise ( ( resolve , reject ) => {
59
- exec ( command , ( error , stdout ) => {
60
- if ( error ) reject ( error )
61
- else resolve ( stdout . trim ( ) )
62
- } )
63
- } )
64
- }
65
-
66
- try {
67
- const ltsVersion = await getGithubVersion ( )
68
- // 0. 询问是否存在自己修改过的内容
69
- const { hasChanges } = await inquirer . prompt ( [
70
- {
71
- type : 'confirm' ,
72
- name : 'hasChanges' ,
73
- message : '是否存在自己修改过的内容?' ,
74
- default : false
75
- }
76
- ] )
77
-
78
- // 0.1 如果有过更改,终止更新脚本,并给出提示建议
79
- if ( hasChanges ) {
80
- logger . info ( '您有未提交的更改,请先处理后再更新。' )
81
- return
82
- }
83
-
84
- // 1. 检测当前的git工作区
85
- const gitStatus = await execCommand ( 'git status --porcelain' )
86
-
87
- // 1.1 如果有内容,提示提交,终止更新
88
- if ( gitStatus ) {
89
- logger . info ( '您有未提交的更改,请先提交后再更新。' )
90
- return
91
- }
92
-
93
- // 2. 下载所有的文件并对应更新文件(除package.json)
94
- const response = await https . get (
95
- 'https://raw.githubusercontent.com/wh131462/leetcode-practice'
96
- )
97
- const filesToUpdate = response . data
98
-
99
- // 2.0 所有的文件在更新后都进行git add [file-path]
100
- for ( const filePath in filesToUpdate ) {
101
- fs . writeFileSync ( filePath , filesToUpdate [ filePath ] )
102
-
103
- // 2.1 如果文件不存在,则创建文件
104
- // 2.2 如果文件存在,则覆盖文件
105
- await execCommand ( `git add ${ filePath } ` )
106
- }
107
-
108
- // 2.3 更新package.json文件中的版本号为最新的版本号
109
- const packageJson = JSON . parse ( fs . readFileSync ( 'package.json' , 'utf-8' ) )
110
- packageJson . version = `${ ltsVersion } ` // 这里替换为实际的最新版本号
111
- fs . writeFileSync ( 'package.json' , JSON . stringify ( packageJson , null , 2 ) )
112
-
113
- // 3. 创建一个git的commit update:Version [版本号]
114
- await execCommand ( `git commit -m "update:${ ltsVersion } "` ) // 这里替换为实际的最新版本号
115
-
116
- // 4. 完成更新
117
- logger . info ( '项目更新完成。' )
118
- } catch ( error ) {
119
- console . error ( '更新过程中出现错误:' , error )
120
- }
121
- }
0 commit comments