@cloudbase/cli 1.12.7-alpha.4 → 2.0.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 (317) hide show
  1. package/.editorconfig +9 -9
  2. package/.eslintignore +7 -7
  3. package/.eslintrc +35 -35
  4. package/.prettierrc.js +29 -29
  5. package/.vscode/launch.json +16 -16
  6. package/.vscode/settings.json +3 -0
  7. package/LICENSE +5 -5
  8. package/README.md +35 -35
  9. package/bin/cloudbase.js +5 -5
  10. package/bin/tcb.js +0 -0
  11. package/changelog.md +6 -6
  12. package/jest.config.js +17 -17
  13. package/lib/commands/account/login.js +18 -18
  14. package/lib/commands/run/create.js +6 -1
  15. package/lib/commands/run/delete.js +6 -1
  16. package/lib/commands/run/image/common.js +1 -1
  17. package/lib/commands/run/image/delete.js +5 -0
  18. package/lib/commands/run/image/download.js +5 -0
  19. package/lib/commands/run/image/list.js +5 -0
  20. package/lib/commands/run/image/upload.js +5 -0
  21. package/lib/commands/run/index.js +1 -0
  22. package/lib/commands/run/list.js +7 -1
  23. package/lib/commands/run/service/config.js +112 -0
  24. package/lib/commands/run/service/create.js +140 -0
  25. package/lib/commands/run/service/deploy.js +145 -0
  26. package/lib/commands/run/service/index.js +21 -0
  27. package/lib/commands/run/service/list.js +115 -0
  28. package/lib/commands/run/service/update.js +132 -0
  29. package/lib/commands/run/version/common.js +1 -1
  30. package/lib/commands/run/version/create.js +5 -0
  31. package/lib/commands/run/version/delete.js +5 -0
  32. package/lib/commands/run/version/list.js +5 -0
  33. package/lib/commands/run/version/modify.js +5 -0
  34. package/lib/commands/run/version/update.js +5 -0
  35. package/lib/commands/storage/storage.js +1 -1
  36. package/lib/constant.js +20 -1
  37. package/lib/env/login.js +7 -7
  38. package/lib/help.js +40 -38
  39. package/lib/run/index.js +1 -0
  40. package/lib/run/service/common.js +163 -0
  41. package/lib/run/service/config.js +70 -0
  42. package/lib/run/service/create.js +67 -0
  43. package/lib/run/service/deployPackage.js +87 -0
  44. package/lib/run/service/index.js +23 -0
  45. package/lib/run/service/list.js +31 -0
  46. package/lib/run/service/showLogs.js +116 -0
  47. package/lib/run/service/update.js +83 -0
  48. package/lib/utils/checkTcbrEnv.js +74 -0
  49. package/lib/utils/commonParamsCheck.js +48 -0
  50. package/lib/utils/index.js +3 -0
  51. package/lib/utils/tcbrApi/callTcbrApi.js +38 -0
  52. package/lib/utils/tcbrApi/index.js +17 -0
  53. package/lib/utils/tcbrApi/tcbr-cloud-api/cloud-api-service.js +268 -0
  54. package/lib/utils/tcbrApi/tcbr-cloud-api/error.js +17 -0
  55. package/lib/utils/tcbrApi/tcbr-cloud-api/index.js +17 -0
  56. package/lib/utils/tcbrApi/tcbr-cloud-api/request.js +40 -0
  57. package/lib/utils/tcbrApi/tcbr-cloud-api-request.js +61 -0
  58. package/lib/utils/validator.js +32 -1
  59. package/package.json +88 -88
  60. package/post-install.js +61 -61
  61. package/runtime/nodejs/bootstrap.js +255 -255
  62. package/runtime/nodejs/runtime.js +183 -183
  63. package/src/auth/index.ts +1 -1
  64. package/src/auth/login.ts +91 -91
  65. package/src/auth/logout.ts +7 -7
  66. package/src/commands/account/index.ts +2 -2
  67. package/src/commands/account/login.ts +192 -192
  68. package/src/commands/account/logout.ts +24 -24
  69. package/src/commands/common.ts +246 -246
  70. package/src/commands/env/base.ts +90 -90
  71. package/src/commands/env/create.ts +92 -92
  72. package/src/commands/env/domain.ts +186 -186
  73. package/src/commands/env/index.ts +4 -4
  74. package/src/commands/env/login.ts +235 -235
  75. package/src/commands/framework/index.ts +124 -124
  76. package/src/commands/functions/alias/getRoute.ts +76 -76
  77. package/src/commands/functions/alias/index.ts +2 -2
  78. package/src/commands/functions/alias/setRoute.ts +82 -82
  79. package/src/commands/functions/code-download.ts +100 -100
  80. package/src/commands/functions/code-update.ts +62 -62
  81. package/src/commands/functions/concurrency/delete.ts +45 -45
  82. package/src/commands/functions/concurrency/index.ts +2 -2
  83. package/src/commands/functions/concurrency/list.ts +58 -58
  84. package/src/commands/functions/concurrency/set.ts +47 -47
  85. package/src/commands/functions/config-update.ts +76 -76
  86. package/src/commands/functions/copy.ts +62 -62
  87. package/src/commands/functions/delete.ts +79 -79
  88. package/src/commands/functions/deploy.ts +293 -293
  89. package/src/commands/functions/detail.ts +138 -138
  90. package/src/commands/functions/index.ts +16 -16
  91. package/src/commands/functions/invoke.ts +121 -121
  92. package/src/commands/functions/layer/bind.ts +182 -182
  93. package/src/commands/functions/layer/common.ts +8 -8
  94. package/src/commands/functions/layer/create.ts +49 -49
  95. package/src/commands/functions/layer/delete.ts +73 -73
  96. package/src/commands/functions/layer/download.ts +92 -92
  97. package/src/commands/functions/layer/index.ts +7 -7
  98. package/src/commands/functions/layer/list.ts +94 -94
  99. package/src/commands/functions/layer/sort.ts +76 -76
  100. package/src/commands/functions/list.ts +68 -68
  101. package/src/commands/functions/log.ts +148 -148
  102. package/src/commands/functions/run.ts +249 -249
  103. package/src/commands/functions/trigger-create.ts +79 -79
  104. package/src/commands/functions/trigger-delete.ts +105 -105
  105. package/src/commands/functions/version/index.ts +1 -1
  106. package/src/commands/functions/version/list.ts +73 -73
  107. package/src/commands/functions/version/publish.ts +43 -43
  108. package/src/commands/gateway/create.ts +109 -109
  109. package/src/commands/gateway/delete.ts +81 -81
  110. package/src/commands/gateway/domain.ts +159 -159
  111. package/src/commands/gateway/index.ts +5 -5
  112. package/src/commands/gateway/list.ts +76 -76
  113. package/src/commands/gateway/switch.ts +107 -107
  114. package/src/commands/helpers/index.ts +2 -2
  115. package/src/commands/helpers/init.ts +431 -431
  116. package/src/commands/helpers/new.ts +117 -117
  117. package/src/commands/helpers/open.ts +67 -67
  118. package/src/commands/hosting/hosting.ts +360 -360
  119. package/src/commands/index.ts +13 -13
  120. package/src/commands/lowcode/app.ts +34 -34
  121. package/src/commands/lowcode/comps.ts +322 -322
  122. package/src/commands/lowcode/index.ts +1 -1
  123. package/src/commands/lowcode/utils.ts +24 -24
  124. package/src/commands/run/create.ts +9 -2
  125. package/src/commands/run/delete.ts +8 -2
  126. package/src/commands/run/image/common.ts +1 -1
  127. package/src/commands/run/image/delete.ts +8 -1
  128. package/src/commands/run/image/download.ts +7 -1
  129. package/src/commands/run/image/index.ts +4 -4
  130. package/src/commands/run/image/list.ts +7 -2
  131. package/src/commands/run/image/upload.ts +8 -1
  132. package/src/commands/run/index.ts +2 -1
  133. package/src/commands/run/list.ts +11 -3
  134. package/src/commands/run/service/config.ts +81 -0
  135. package/src/commands/run/service/create.ts +118 -0
  136. package/src/commands/run/service/deploy.ts +121 -0
  137. package/src/commands/run/service/index.ts +5 -0
  138. package/src/commands/run/service/list.ts +94 -0
  139. package/src/commands/run/service/update.ts +104 -0
  140. package/src/commands/run/standalonegateway/common.ts +7 -7
  141. package/src/commands/run/standalonegateway/create.ts +85 -85
  142. package/src/commands/run/standalonegateway/destroy.ts +59 -59
  143. package/src/commands/run/standalonegateway/index.ts +4 -4
  144. package/src/commands/run/standalonegateway/list.ts +53 -53
  145. package/src/commands/run/standalonegateway/package.ts +62 -62
  146. package/src/commands/run/standalonegateway/turn.ts +63 -63
  147. package/src/commands/run/version/common.ts +1 -1
  148. package/src/commands/run/version/create.ts +8 -1
  149. package/src/commands/run/version/delete.ts +8 -2
  150. package/src/commands/run/version/index.ts +4 -4
  151. package/src/commands/run/version/list.ts +7 -1
  152. package/src/commands/run/version/modify.ts +8 -1
  153. package/src/commands/run/version/update.ts +8 -1
  154. package/src/commands/smart.ts +132 -132
  155. package/src/commands/storage/storage.ts +464 -464
  156. package/src/commands/third/thirdAttach.ts +49 -49
  157. package/src/completion/index.ts +13 -13
  158. package/src/constant.ts +35 -1
  159. package/src/decorators/captureError.ts +25 -25
  160. package/src/decorators/constants.ts +12 -12
  161. package/src/decorators/deprecate.ts +25 -25
  162. package/src/decorators/guard.ts +42 -42
  163. package/src/decorators/index.ts +7 -7
  164. package/src/decorators/injectParams.ts +54 -54
  165. package/src/decorators/params/common.ts +28 -28
  166. package/src/decorators/params/index.ts +35 -35
  167. package/src/env/domain.ts +33 -33
  168. package/src/env/index.ts +63 -63
  169. package/src/env/login.ts +80 -80
  170. package/src/error.ts +36 -36
  171. package/src/function/alias.ts +43 -43
  172. package/src/function/base.ts +253 -253
  173. package/src/function/code.ts +55 -55
  174. package/src/function/concurrency.ts +57 -57
  175. package/src/function/create.ts +78 -78
  176. package/src/function/delete.ts +42 -42
  177. package/src/function/index.ts +10 -10
  178. package/src/function/layer/attach.ts +68 -68
  179. package/src/function/layer/create.ts +63 -63
  180. package/src/function/layer/delete.ts +21 -21
  181. package/src/function/layer/download.ts +54 -54
  182. package/src/function/layer/index.ts +7 -7
  183. package/src/function/layer/list.ts +32 -32
  184. package/src/function/layer/sort.ts +24 -24
  185. package/src/function/trigger.ts +97 -97
  186. package/src/function/update.ts +35 -35
  187. package/src/function/version.ts +38 -38
  188. package/src/function/vpc.ts +22 -22
  189. package/src/gateway/index.ts +137 -137
  190. package/src/help.ts +50 -48
  191. package/src/hosting.ts +212 -212
  192. package/src/index.ts +13 -13
  193. package/src/logger.ts +17 -17
  194. package/src/run/create.ts +23 -23
  195. package/src/run/delete.ts +15 -15
  196. package/src/run/image/build.ts +36 -36
  197. package/src/run/image/delete.ts +13 -13
  198. package/src/run/image/index.ts +3 -3
  199. package/src/run/image/info.ts +26 -26
  200. package/src/run/index.ts +2 -1
  201. package/src/run/list.ts +29 -29
  202. package/src/run/repo.ts +24 -24
  203. package/src/run/service/common.ts +206 -0
  204. package/src/run/service/config.ts +77 -0
  205. package/src/run/service/create.ts +52 -0
  206. package/src/run/service/deployPackage.ts +63 -0
  207. package/src/run/service/index.ts +7 -0
  208. package/src/run/service/list.ts +29 -0
  209. package/src/run/service/showLogs.ts +98 -0
  210. package/src/run/service/update.ts +81 -0
  211. package/src/run/standalonegateway/create.ts +24 -24
  212. package/src/run/standalonegateway/destroy.ts +19 -19
  213. package/src/run/standalonegateway/index.ts +4 -4
  214. package/src/run/standalonegateway/list.ts +74 -74
  215. package/src/run/standalonegateway/package/list.ts +24 -24
  216. package/src/run/standalonegateway/turn/index.ts +1 -1
  217. package/src/run/standalonegateway/turn/off.ts +19 -19
  218. package/src/run/standalonegateway/turn/on.ts +19 -19
  219. package/src/run/version/create.ts +68 -68
  220. package/src/run/version/delete.ts +15 -15
  221. package/src/run/version/index.ts +5 -5
  222. package/src/run/version/list.ts +16 -16
  223. package/src/run/version/modify.ts +16 -16
  224. package/src/run/version/repo.ts +27 -27
  225. package/src/run/version/update.ts +58 -58
  226. package/src/storage.ts +114 -114
  227. package/src/third/index.ts +12 -12
  228. package/src/types.ts +128 -2
  229. package/src/utils/auth.ts +15 -15
  230. package/src/utils/checkTcbrEnv.ts +67 -0
  231. package/src/utils/cli-table.ts +23 -23
  232. package/src/utils/commonParamsCheck.ts +65 -0
  233. package/src/utils/config.ts +39 -39
  234. package/src/utils/env.ts +244 -244
  235. package/src/utils/fs/del.ts +5 -5
  236. package/src/utils/fs/index.ts +71 -71
  237. package/src/utils/function-packer.ts +97 -97
  238. package/src/utils/index.ts +5 -1
  239. package/src/utils/log.ts +81 -81
  240. package/src/utils/net/cloud-api-request.ts +62 -62
  241. package/src/utils/net/credential.ts +53 -53
  242. package/src/utils/net/http-request.ts +84 -84
  243. package/src/utils/net/index.ts +4 -4
  244. package/src/utils/net/manager-service.ts +36 -36
  245. package/src/utils/net/proxy.ts +6 -6
  246. package/src/utils/notice.ts +28 -28
  247. package/src/utils/output/highlight.ts +5 -5
  248. package/src/utils/output/index.ts +2 -2
  249. package/src/utils/output/link.ts +10 -10
  250. package/src/utils/output/loading.ts +82 -82
  251. package/src/utils/parallel.ts +82 -82
  252. package/src/utils/platform/index.ts +2 -2
  253. package/src/utils/platform/mac.ts +21 -21
  254. package/src/utils/platform/os.ts +64 -64
  255. package/src/utils/platform/port.ts +10 -10
  256. package/src/utils/progress-bar.ts +38 -38
  257. package/src/utils/prompt/select.ts +59 -59
  258. package/src/utils/reporter/agree.ts +20 -20
  259. package/src/utils/reporter/download.ts +26 -26
  260. package/src/utils/reporter/index.ts +3 -3
  261. package/src/utils/reporter/usage.ts +20 -20
  262. package/src/utils/store/auth.ts +49 -49
  263. package/src/utils/store/common.ts +8 -8
  264. package/src/utils/store/db.ts +68 -68
  265. package/src/utils/store/index.ts +4 -4
  266. package/src/utils/store/usage.ts +12 -12
  267. package/src/utils/tcbrApi/callTcbrApi.ts +28 -0
  268. package/src/utils/tcbrApi/index.ts +1 -0
  269. package/src/utils/tcbrApi/tcbr-cloud-api/cloud-api-service.ts +363 -0
  270. package/src/utils/tcbrApi/tcbr-cloud-api/error.ts +30 -0
  271. package/src/utils/tcbrApi/tcbr-cloud-api/index.ts +1 -0
  272. package/src/utils/tcbrApi/tcbr-cloud-api/request.ts +28 -0
  273. package/src/utils/tcbrApi/tcbr-cloud-api-request.ts +66 -0
  274. package/src/utils/template.ts +170 -170
  275. package/src/utils/tools/encoding.ts +8 -8
  276. package/src/utils/tools/index.ts +4 -4
  277. package/src/utils/tools/object.ts +33 -33
  278. package/src/utils/tools/time.ts +38 -38
  279. package/src/utils/tools/uid.ts +19 -19
  280. package/src/utils/validator.ts +64 -32
  281. package/templates/html/loginFail.html +90 -90
  282. package/templates/html/loginSuccess.html +86 -86
  283. package/templates/server/node/_gitignore +54 -54
  284. package/templates/server/node/cloudbaserc.json +10 -10
  285. package/templates/server/node/index.js +5 -5
  286. package/templates/server/node/package.json +9 -9
  287. package/tsconfig.json +19 -19
  288. package/tsconfig.test.json +13 -13
  289. package/types/commands/run/index.d.ts +1 -0
  290. package/types/commands/run/service/config.d.ts +14 -0
  291. package/types/commands/run/service/create.d.ts +13 -0
  292. package/types/commands/run/service/deploy.d.ts +13 -0
  293. package/types/commands/run/service/index.d.ts +5 -0
  294. package/types/commands/run/service/list.d.ts +13 -0
  295. package/types/commands/run/service/update.d.ts +13 -0
  296. package/types/constant.d.ts +18 -0
  297. package/types/run/index.d.ts +1 -0
  298. package/types/run/service/common.d.ts +32 -0
  299. package/types/run/service/config.d.ts +23 -0
  300. package/types/run/service/create.d.ts +7 -0
  301. package/types/run/service/deployPackage.d.ts +11 -0
  302. package/types/run/service/index.d.ts +7 -0
  303. package/types/run/service/list.d.ts +2 -0
  304. package/types/run/service/showLogs.d.ts +2 -0
  305. package/types/run/service/update.d.ts +2 -0
  306. package/types/types.d.ts +116 -2
  307. package/types/utils/checkTcbrEnv.d.ts +3 -0
  308. package/types/utils/commonParamsCheck.d.ts +3 -0
  309. package/types/utils/index.d.ts +3 -0
  310. package/types/utils/tcbrApi/callTcbrApi.d.ts +1 -0
  311. package/types/utils/tcbrApi/index.d.ts +1 -0
  312. package/types/utils/tcbrApi/tcbr-cloud-api/cloud-api-service.d.ts +51 -0
  313. package/types/utils/tcbrApi/tcbr-cloud-api/error.d.ts +20 -0
  314. package/types/utils/tcbrApi/tcbr-cloud-api/index.d.ts +1 -0
  315. package/types/utils/tcbrApi/tcbr-cloud-api/request.d.ts +4 -0
  316. package/types/utils/tcbrApi/tcbr-cloud-api-request.d.ts +9 -0
  317. package/types/utils/validator.d.ts +4 -0
@@ -1,4 +1,4 @@
1
- export * from './build'
2
- export * from './list'
3
- export * from './delete'
1
+ export * from './build'
2
+ export * from './list'
3
+ export * from './delete'
4
4
  export * from './info'
@@ -1,27 +1,27 @@
1
- import { access, constants, readFileSync } from 'fs'
2
- import { join } from 'path'
3
- import { CloudBaseError } from '../../error'
4
-
5
- // 查看本地是否已经登录腾讯云docker仓库
6
- export const getAuthFlag = async () => {
7
- const USER_HOME = process.env.HOME || process.env.USERPROFILE
8
-
9
- try {
10
- await (new Promise(
11
- (resolve, reject) => {
12
- access(
13
- join(USER_HOME, '.docker/config.json'),
14
- constants.F_OK,
15
- err => err ? reject(err) : resolve(true))
16
- }))
17
- } catch (e) {
18
- return false
19
- }
20
-
21
-
22
- const data = JSON.parse(readFileSync(join(USER_HOME, '.docker/config.json')).toString())
23
-
24
- console.log()
25
-
26
- return Boolean(data['auths']['ccr.ccs.tencentyun.com'])
1
+ import { access, constants, readFileSync } from 'fs'
2
+ import { join } from 'path'
3
+ import { CloudBaseError } from '../../error'
4
+
5
+ // 查看本地是否已经登录腾讯云docker仓库
6
+ export const getAuthFlag = async () => {
7
+ const USER_HOME = process.env.HOME || process.env.USERPROFILE
8
+
9
+ try {
10
+ await (new Promise(
11
+ (resolve, reject) => {
12
+ access(
13
+ join(USER_HOME, '.docker/config.json'),
14
+ constants.F_OK,
15
+ err => err ? reject(err) : resolve(true))
16
+ }))
17
+ } catch (e) {
18
+ return false
19
+ }
20
+
21
+
22
+ const data = JSON.parse(readFileSync(join(USER_HOME, '.docker/config.json')).toString())
23
+
24
+ console.log()
25
+
26
+ return Boolean(data['auths']['ccr.ccs.tencentyun.com'])
27
27
  }
package/src/run/index.ts CHANGED
@@ -4,4 +4,5 @@ export * from './version'
4
4
  export * from './image'
5
5
  export * from './delete'
6
6
  export * from './repo'
7
- export * from './standalonegateway'
7
+ export * from './standalonegateway'
8
+ export * from './service'
package/src/run/list.ts CHANGED
@@ -1,30 +1,30 @@
1
- import { CloudApiService } from '../utils'
2
- import {
3
- IListRunOptions
4
- } from '../types'
5
-
6
- const scfService = CloudApiService.getInstance('tcb')
7
-
8
- export async function listRun(options: IListRunOptions) {
9
- const { limit = 20, offset = 0, envId } = options
10
- const res: any = await scfService.request('DescribeCloudBaseRunServers', {
11
- EnvId: envId,
12
- Limit: limit,
13
- Offset: offset
14
- })
15
- const { CloudBaseRunServerSet = [] } = res
16
- const data: Record<string, string>[] = []
17
- CloudBaseRunServerSet.forEach(run => {
18
- const { ServerName, CreatedTime, UpdatedTime, Status, VpcId, ServiceRemark } = run
19
- data.push({
20
- ServerName,
21
- ServiceRemark,
22
- CreatedTime,
23
- UpdatedTime,
24
- VpcId,
25
- Status,
26
- })
27
- })
28
-
29
- return data
1
+ import { CloudApiService } from '../utils'
2
+ import {
3
+ IListRunOptions
4
+ } from '../types'
5
+
6
+ const scfService = CloudApiService.getInstance('tcb')
7
+
8
+ export async function listRun(options: IListRunOptions) {
9
+ const { limit = 20, offset = 0, envId } = options
10
+ const res: any = await scfService.request('DescribeCloudBaseRunServers', {
11
+ EnvId: envId,
12
+ Limit: limit,
13
+ Offset: offset
14
+ })
15
+ const { CloudBaseRunServerSet = [] } = res
16
+ const data: Record<string, string>[] = []
17
+ CloudBaseRunServerSet.forEach(run => {
18
+ const { ServerName, CreatedTime, UpdatedTime, Status, VpcId, ServiceRemark } = run
19
+ data.push({
20
+ ServerName,
21
+ ServiceRemark,
22
+ CreatedTime,
23
+ UpdatedTime,
24
+ VpcId,
25
+ Status,
26
+ })
27
+ })
28
+
29
+ return data
30
30
  }
package/src/run/repo.ts CHANGED
@@ -1,25 +1,25 @@
1
- import { CloudApiService } from '../utils'
2
- import {
3
- IListVersionOptions
4
- } from '../types'
5
-
6
- const tcbService = CloudApiService.getInstance('tcb')
7
-
8
- export const describeImageRepo = async (options: IListVersionOptions) => {
9
- const { ImageRepo } = await tcbService.request('DescribeCloudBaseRunServer', {
10
- EnvId: options.envId,
11
- Limit: options.limit ? options.limit : 100,
12
- Offset: options.offset ? options.offset : 0,
13
- ServerName: options.serverName
14
- })
15
-
16
- return ImageRepo
17
- }
18
-
19
- export const deleteImageRepo = async (options: { imageRepo: string }) => {
20
- const { result } = await tcbService.request('DeleteCloudBaseRunImageRepo', {
21
- ImageRepo: options.imageRepo
22
- })
23
-
24
- return result
1
+ import { CloudApiService } from '../utils'
2
+ import {
3
+ IListVersionOptions
4
+ } from '../types'
5
+
6
+ const tcbService = CloudApiService.getInstance('tcb')
7
+
8
+ export const describeImageRepo = async (options: IListVersionOptions) => {
9
+ const { ImageRepo } = await tcbService.request('DescribeCloudBaseRunServer', {
10
+ EnvId: options.envId,
11
+ Limit: options.limit ? options.limit : 100,
12
+ Offset: options.offset ? options.offset : 0,
13
+ ServerName: options.serverName
14
+ })
15
+
16
+ return ImageRepo
17
+ }
18
+
19
+ export const deleteImageRepo = async (options: { imageRepo: string }) => {
20
+ const { result } = await tcbService.request('DeleteCloudBaseRunImageRepo', {
21
+ ImageRepo: options.imageRepo
22
+ })
23
+
24
+ return result
25
25
  }
@@ -0,0 +1,206 @@
1
+ import { CloudApiService, parseOptionalParams, parseInputParam } from '../../utils'
2
+ import { ITcbrServiceOptions, IDescribeWxCloudBaseRunReleaseOrder, ITcbrServiceRequiredOptions } from '../../types'
3
+ import { CloudBaseError } from '@cloudbase/toolbox'
4
+ import { packageDeploy } from './index'
5
+ import { listImage } from '..'
6
+ import { DEFAULT_CPU_MEM_SET } from '../../constant'
7
+
8
+ const tcbService = CloudApiService.getInstance('tcb')
9
+
10
+ export async function describeWxCloudBaseRunReleaseOrder(options: IDescribeWxCloudBaseRunReleaseOrder) {
11
+ const res = await tcbService.request('DescribeWxCloudBaseRunReleaseOrder', {
12
+ EnvId: options.envId,
13
+ ServerName: options.serviceName
14
+ })
15
+ return res
16
+ }
17
+
18
+ export const convertNumber = (item) => {
19
+ if (isNaN(Number(item))) {
20
+ throw new CloudBaseError(`${item} 必须为数字`)
21
+ }
22
+ return Number(item)
23
+ }
24
+
25
+ export const extractPolicyDetails = (policyDetails: string) => {
26
+ return policyDetails.split('&').map(condition => {
27
+ let [type, threshold] = [condition.split('=')[0], Number(condition.split('=')[1])]
28
+ if (isNaN(threshold) || !['cpu', 'mem'].includes(type)) {
29
+ throw new CloudBaseError('请输入合法的缩扩容配置')
30
+ }
31
+ return {
32
+ PolicyType: type,
33
+ PolicyThreshold: threshold
34
+ }
35
+ })
36
+ }
37
+
38
+ export const parseEnvParams = (envParams: string) => {
39
+ return envParams.split('&').reduce((acc, cur) => {
40
+ const [key, value] = cur.split('=')
41
+ acc[key] = value
42
+ return acc
43
+ }, {})
44
+ }
45
+
46
+ /**
47
+ * @description 合并当前与已有的环境变量,当前传入的环境变量 key 去重并取位置靠后的,如与原有环境变量 key 相同,则替换
48
+ * @param curEnvParams 当前输入的环境变量
49
+ * @param preEnvParams 已有的环境变量
50
+ * @returns
51
+ */
52
+ export const mergeEnvParams = (curEnvParams: string, preEnvParams: string) => {
53
+ const curEnv = parseEnvParams(curEnvParams)
54
+ const preEnv = preEnvParams ? JSON.parse(preEnvParams) : {}
55
+ const curEnvKeys = Object.keys(curEnv)
56
+ Object.entries(preEnv).forEach(([key, value]) => {
57
+ if (!curEnvKeys.includes(key)) {
58
+ curEnv[key] = value
59
+ }
60
+ })
61
+ return JSON.stringify(curEnv)
62
+ }
63
+
64
+ function checkRequiredParams(options: ITcbrServiceRequiredOptions) {
65
+ if (!options.envId) {
66
+ throw new CloudBaseError('必须使用 -e 或 --envId 指定环境ID')
67
+ }
68
+
69
+ if (!options.serviceName) {
70
+ throw new CloudBaseError('必须使用 -s 或 --serviceName 指定服务名')
71
+ }
72
+
73
+ if (!options.containerPort) {
74
+ throw new CloudBaseError('必须使用 --containerPort 指定监听端口号')
75
+ }
76
+
77
+ if (!options.isCreated && !options.path) {
78
+ throw new CloudBaseError('请使用 --path 指定代码根目录')
79
+ }
80
+
81
+ if (options.isCreated && !options.path && !options.library_image && !options.image) {
82
+ throw new CloudBaseError('请使用 --path 指定代码根目录或 --library_image 指定线上镜像 tag ')
83
+ }
84
+ }
85
+
86
+ /**
87
+ *
88
+ * @param options 原始用户输入
89
+ * @param isCreated 服务是否已被创建(未创建的服务不能使用镜像 tag )
90
+ * @param defaultOverride 是否默认用上次的服务配置替代缺省值
91
+ * @param previousServerConfig 上次的服务配置
92
+ * @returns
93
+ */
94
+ export async function tcbrServiceOptions(options: ITcbrServiceOptions, isCreated: boolean, defaultOverride?: boolean, previousServerConfig?) {
95
+ let {
96
+ noConfirm: _noConfirm = false,
97
+ override: _override = (defaultOverride || false),
98
+ envId,
99
+ serviceName,
100
+ path,
101
+ cpu,
102
+ mem,
103
+ minNum,
104
+ maxNum,
105
+ policyDetails,
106
+ customLogs,
107
+ envParams,
108
+ containerPort,
109
+ remark,
110
+ targetDir,
111
+ dockerfile,
112
+ image,
113
+ library_image,
114
+ json: _json = false
115
+ } = options
116
+
117
+ // 检查必选参数是否填写
118
+ checkRequiredParams({
119
+ envId,
120
+ serviceName,
121
+ containerPort,
122
+ isCreated,
123
+ path,
124
+ library_image,
125
+ image
126
+ })
127
+ containerPort = Number(containerPort)
128
+
129
+ // 处理用户输入的参数
130
+ const DeployInfo: any = {
131
+ DeployType: library_image || image
132
+ ? 'image'
133
+ : 'package',
134
+ DeployRemark: remark || '',
135
+ }
136
+ // 可选参数进行校验和转换
137
+ let {
138
+ cpuConverted,
139
+ memConverted,
140
+ maxNumConverted,
141
+ minNumConverted
142
+ } = parseOptionalParams({
143
+ cpu,
144
+ mem,
145
+ maxNum,
146
+ minNum
147
+ })
148
+
149
+ const newServiceOptions = {
150
+ ServerName: serviceName,
151
+ EnvId: envId,
152
+ ServerConfig: {
153
+ EnvId: envId,
154
+ MaxNum: parseInputParam(maxNumConverted, _override, convertNumber, previousServerConfig?.MaxNum, 50),
155
+ MinNum: parseInputParam(minNumConverted, _override, convertNumber, previousServerConfig?.MinNum, 0),
156
+ BuildDir: parseInputParam(targetDir, _override, null, previousServerConfig?.BuildDir, '.'),
157
+ Cpu: parseInputParam(cpuConverted, _override, null, previousServerConfig?.Cpu, 0.5),
158
+ Mem: parseInputParam(memConverted, _override, null, previousServerConfig?.Mem, 1),
159
+ OpenAccessTypes: ['PUBLIC'],
160
+ ServerName: serviceName,
161
+ InitialDelaySeconds: 2,
162
+ CustomLogs: parseInputParam(customLogs, _override, null, previousServerConfig?.CustomLogs, 'stdout'),
163
+ CreateTime: previousServerConfig?.CreateTime || (new Date()).toLocaleString().replace(/\//g, '-'),
164
+ PolicyDetails: parseInputParam(policyDetails, _override, extractPolicyDetails, previousServerConfig?.PolicyDetails, DEFAULT_CPU_MEM_SET),
165
+ EnvParams: parseInputParam(envParams, _override, mergeEnvParams, previousServerConfig?.EnvParams, '', previousServerConfig?.EnvParams),
166
+ Port: containerPort,
167
+ HasDockerfile: true,
168
+ Dockerfile: dockerfile || 'Dockerfile',
169
+ },
170
+ DeployInfo: {
171
+ ...DeployInfo
172
+ }
173
+ }
174
+
175
+ if (DeployInfo.DeployType === 'package') {
176
+ // 本地上传
177
+ const { PackageName, PackageVersion } = await packageDeploy({
178
+ envId,
179
+ serviceName,
180
+ filePath: path,
181
+ })
182
+ DeployInfo.PackageName = PackageName
183
+ DeployInfo.PackageVersion = PackageVersion
184
+ } else if (DeployInfo.DeployType === 'image') {
185
+ // 拉取镜像
186
+ const imageList = await listImage({
187
+ envId,
188
+ serviceName
189
+ })
190
+ if (library_image) {
191
+ const imageInfo = imageList.find(({ Tag }) => Tag === library_image)
192
+ if (!imageInfo) {
193
+ throw new CloudBaseError(`镜像 ${library_image} 不存在`)
194
+ }
195
+ DeployInfo.ImageUrl = imageInfo.ImageUrl
196
+ } else {
197
+ // 暂时不支持 image 镜像
198
+ throw new CloudBaseError('暂不支持 --image 参数,请使用 --library_image 指定线上镜像 tag')
199
+ }
200
+ }
201
+
202
+ newServiceOptions.DeployInfo = {
203
+ ...DeployInfo
204
+ }
205
+ return newServiceOptions
206
+ }
@@ -0,0 +1,77 @@
1
+ import { describeCloudRunServerDetail } from './create'
2
+ import { ITcbrServiceConfigOptions, IDescribeCloudRunServerDetail } from '../../types'
3
+ import { CloudBaseError } from '@cloudbase/toolbox'
4
+ import { mergeEnvParams, extractPolicyDetails } from './common'
5
+ import { callTcbrApi, parseOptionalParams } from '../../utils'
6
+
7
+ export async function tcbrServiceConfigOptions(options: ITcbrServiceConfigOptions) {
8
+ let {
9
+ serviceName,
10
+ envId,
11
+ cpu,
12
+ mem,
13
+ minNum,
14
+ maxNum,
15
+ policyDetails,
16
+ customLogs,
17
+ envParams,
18
+ } = options
19
+
20
+ if (!envId) {
21
+ throw new CloudBaseError('必须使用 -e 或 --envId 指定环境ID')
22
+ }
23
+
24
+ if (!serviceName) {
25
+ throw new CloudBaseError('必须使用 -s 或 --serviceName 指定服务名')
26
+ }
27
+
28
+ let {
29
+ cpuConverted,
30
+ memConverted,
31
+ maxNumConverted,
32
+ minNumConverted
33
+ } = parseOptionalParams({
34
+ cpu,
35
+ mem,
36
+ maxNum,
37
+ minNum
38
+ })
39
+
40
+ const serviceInfo = await describeCloudRunServerDetail({
41
+ envId,
42
+ serviceName
43
+ })
44
+
45
+ if(serviceInfo instanceof Error && serviceInfo['code'] === 'InvalidParameter') {
46
+ throw new CloudBaseError('服务不存在,请检查服务名是否正确或用 tcb run service:create 创建服务')
47
+ }
48
+
49
+ const { ServerConfig: previousServerConfig } = serviceInfo.data as IDescribeCloudRunServerDetail
50
+
51
+ const newServiceOptions = {
52
+ EnvId: envId,
53
+ ServerName: serviceName,
54
+ OpenAccessTypes: previousServerConfig.OpenAccessTypes,
55
+ Cpu: cpuConverted || previousServerConfig.Cpu,
56
+ Mem: memConverted || previousServerConfig.Mem,
57
+ MinNum: minNumConverted || previousServerConfig.MinNum,
58
+ MaxNum: maxNumConverted || previousServerConfig.MaxNum,
59
+ PolicyDetails: policyDetails ? extractPolicyDetails(policyDetails) : previousServerConfig.PolicyDetails,
60
+ CustomLogs: customLogs || previousServerConfig.CustomLogs,
61
+ EnvParams: envParams ? mergeEnvParams(envParams, previousServerConfig?.EnvParams) : previousServerConfig.EnvParams,
62
+ InitialDelaySeconds: 2,
63
+ CreateTime: previousServerConfig.CreateTime,
64
+ Port: previousServerConfig.Port,
65
+ HasDockerfile: true,
66
+ Dockerfile: previousServerConfig.Dockerfile,
67
+ BuildDir: previousServerConfig.BuildDir,
68
+ }
69
+ return newServiceOptions
70
+ }
71
+
72
+ export async function updateCloudRunServerConfig(options) {
73
+ return await callTcbrApi('UpdateCloudRunServerConfig', {
74
+ EnvId: options.envId,
75
+ ServerBaseConfig: options.ServerBaseConfig,
76
+ })
77
+ }
@@ -0,0 +1,52 @@
1
+ import { callTcbrApi } from '../../utils'
2
+ import { getLogs, tcbrServiceOptions } from '.'
3
+ import inquirer from 'inquirer'
4
+ import { ITcbrServiceOptions } from '../../types'
5
+ import { logger } from '@cloudbase/toolbox'
6
+
7
+ export const describeCloudRunServerDetail = async (options: { envId: string; serviceName: string }) => {
8
+ return await callTcbrApi('DescribeCloudRunServerDetail', {
9
+ EnvId: options.envId,
10
+ ServerName: options.serviceName,
11
+ })
12
+ }
13
+
14
+ export async function createCloudRunServer(serviceConfigOptions) {
15
+ return callTcbrApi('CreateCloudRunServer', serviceConfigOptions)
16
+ }
17
+
18
+ export async function createTcbrService(options: ITcbrServiceOptions) {
19
+ const newServiceOptions = await tcbrServiceOptions(options, false, false)
20
+
21
+ if (!options.noConfirm) {
22
+ const { confirm } = await inquirer.prompt([
23
+ {
24
+ type: 'confirm',
25
+ name: 'confirm',
26
+ message: '确定要创建服务吗?',
27
+ }
28
+ ])
29
+ if (!confirm) {
30
+ return
31
+ }
32
+ }
33
+
34
+ const createRes: any = await createCloudRunServer(newServiceOptions)
35
+ const taskId = createRes.data?.TaskId
36
+
37
+ if (options.json) {
38
+ console.log(JSON.stringify(createRes, null, 2))
39
+ }
40
+
41
+ // `--verbose` 也用于全局指定参数,因此不能从 options 中获取到
42
+ if (process.argv.includes('--verbose')) {
43
+ await getLogs({
44
+ envId: options.envId,
45
+ taskId,
46
+ serviceName: options.serviceName
47
+ })
48
+ console.log(`本次任务的 TaskID: ${taskId}`)
49
+ } else {
50
+ logger.success('创建服务成功, 本次任务的 TaskID: ' + taskId)
51
+ }
52
+ }
@@ -0,0 +1,63 @@
1
+ import { createBuild } from '..'
2
+ import { CloudBaseError, execWithLoading, loadingFactory, zipDir } from '@cloudbase/toolbox'
3
+ import axios from 'axios'
4
+ import path from 'path'
5
+ import * as fs from 'fs'
6
+
7
+ interface IPackageDeploy {
8
+ envId: string,
9
+ serviceName: string,
10
+ filePath: string,
11
+ fileToIgnore?: string | string[]
12
+ }
13
+
14
+ export async function packageDeploy(options: IPackageDeploy) {
15
+ let {
16
+ envId,
17
+ serviceName,
18
+ filePath,
19
+ fileToIgnore
20
+ } = options
21
+ let { PackageName, PackageVersion, UploadUrl } = await createBuild({
22
+ envId,
23
+ serviceName
24
+ })
25
+
26
+ const loading = loadingFactory()
27
+ const zipFile = `.tcbr_${serviceName}_${Date.now()}.zip`
28
+ const dstPath = path.join(process.cwd(), zipFile)
29
+
30
+ try {
31
+ if(fs.statSync(filePath).isDirectory()) {
32
+ loading.start('正在压缩文件…')
33
+ await zipDir(filePath, dstPath, fileToIgnore)
34
+ loading.succeed('压缩文件完成')
35
+ }
36
+ } catch (error) {
37
+ if(error.code === 'ENOENT') {
38
+ throw new CloudBaseError('找不到指定文件夹,请检查文件路径是否正确')
39
+ } else {
40
+ throw new CloudBaseError(error.message)
41
+ }
42
+ }
43
+
44
+ try {
45
+ return await execWithLoading(
46
+ async () => {
47
+ await axios.put(UploadUrl, fs.readFileSync(zipFile), {
48
+ headers: {
49
+ 'content-type': 'application/zip'
50
+ }
51
+ })
52
+ return { PackageName, PackageVersion }
53
+ },
54
+ {
55
+ startTip: '\n正在上传代码包...',
56
+ failTip: '上传代码包失败,请稍后重试'
57
+ }
58
+ )
59
+ } finally {
60
+ await fs.promises.unlink(dstPath)
61
+ }
62
+
63
+ }
@@ -0,0 +1,7 @@
1
+ export * from './list'
2
+ export * from './create'
3
+ export * from './showLogs'
4
+ export * from './deployPackage'
5
+ export * from './common'
6
+ export * from './update'
7
+ export * from './config'
@@ -0,0 +1,29 @@
1
+ import { IServerInfo } from '../../types'
2
+ import { callTcbrApi, CloudApiService } from '../../utils'
3
+
4
+ const tcbService = CloudApiService.getInstance('tcb')
5
+
6
+ export const listService = async (options): Promise<IServerInfo[]> => {
7
+ // 没有 CreateTime 因此需要调用两个接口
8
+ const { data: { ServerList: serverList } } = await callTcbrApi('DescribeCloudRunServers', {
9
+ EnvId: options.envId,
10
+ })
11
+
12
+ const { CloudBaseRunServerSet: serverSet} = await tcbService.request('DescribeCloudBaseRunServers', {
13
+ EnvId: options.envId,
14
+ Offset: 0,
15
+ Limit: options.limit || 100
16
+ })
17
+
18
+ // 按照 ServerName 拼接结果
19
+ if(!serverList.length) return []
20
+ const serverInfo = serverList.map(serverItem => {
21
+ return {
22
+ ...serverItem,
23
+ CreatedTime: serverSet.find( ( item ) => item.ServerName === serverItem.ServerName).CreatedTime
24
+ }
25
+ })
26
+
27
+ return serverInfo
28
+
29
+ }