@lakutata/cli 1.0.22 → 1.0.25
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/build/Deploy.js +51 -42
- package/build/Deploy.js.map +1 -1
- package/build/lib/manipulators/CreateDockerFileManipulator.js +2 -2
- package/build/lib/manipulators/CreateDockerFileManipulator.js.map +1 -1
- package/package.json +3 -1
- package/src/Deploy.ts +38 -22
- package/src/lib/manipulators/CreateDockerFileManipulator.ts +2 -2
package/build/Deploy.js
CHANGED
|
@@ -2,14 +2,24 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
(async () => {
|
|
4
4
|
const path = require('path');
|
|
5
|
+
const args = require('args');
|
|
5
6
|
const inquirer = require('inquirer');
|
|
6
7
|
const shelljs = require('shelljs');
|
|
7
8
|
const moment = require('moment-timezone');
|
|
8
9
|
const packageJson = require(path.resolve(process.cwd(), './package.json'));
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
args
|
|
11
|
+
.option('dockerfile', 'Dockerfile文件路径', './Dockerfile')
|
|
12
|
+
.option('repository', '镜像仓库地址')
|
|
13
|
+
.option('username', '镜像仓库用户名')
|
|
14
|
+
.option('password', '镜像仓库密码')
|
|
15
|
+
.option('platform', '构建平台')
|
|
16
|
+
.option('tagLatest', '是否为镜像打上latest的标签');
|
|
17
|
+
const flags = args.parse(process.argv);
|
|
18
|
+
const REGISTRY_ADDR = flags.repository;
|
|
19
|
+
const DOCKERFILE_PATH = flags.dockerfile;
|
|
12
20
|
const REPOSITORY_ADDR = new URL(`repo://${REGISTRY_ADDR}`).hostname;
|
|
21
|
+
if (!DOCKERFILE_PATH)
|
|
22
|
+
throw new Error('未指定Dockerfile文件路径');
|
|
13
23
|
if (!REGISTRY_ADDR)
|
|
14
24
|
throw new Error('未配置仓库地址');
|
|
15
25
|
const TIMESTAMP = Date.now();
|
|
@@ -22,46 +32,45 @@
|
|
|
22
32
|
});
|
|
23
33
|
});
|
|
24
34
|
};
|
|
25
|
-
const
|
|
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
|
-
const tagLatest = settings.tagLatest;
|
|
35
|
+
const platforms = [
|
|
36
|
+
'linux/amd64',
|
|
37
|
+
'linux/arm64',
|
|
38
|
+
'linux/riscv64',
|
|
39
|
+
'linux/ppc64le',
|
|
40
|
+
'linux/s390x',
|
|
41
|
+
'linux/386',
|
|
42
|
+
'linux/arm/v7',
|
|
43
|
+
'linux/arm/v6'
|
|
44
|
+
];
|
|
45
|
+
const username = flags.username ? flags.username : (await inquirer.prompt({
|
|
46
|
+
type: 'input',
|
|
47
|
+
name: 'username',
|
|
48
|
+
message: 'Docker仓库账号'
|
|
49
|
+
})).username;
|
|
50
|
+
const password = flags.password ? flags.password : (await inquirer.prompt({
|
|
51
|
+
type: 'password',
|
|
52
|
+
name: 'password',
|
|
53
|
+
message: 'Docker仓库密码',
|
|
54
|
+
mask: '*'
|
|
55
|
+
})).password;
|
|
56
|
+
const platform = flags.platform ? flags.platform : (await inquirer.prompt({
|
|
57
|
+
type: 'list',
|
|
58
|
+
name: 'platform',
|
|
59
|
+
message: '目标构建平台架构',
|
|
60
|
+
choices: platforms
|
|
61
|
+
})).platform;
|
|
62
|
+
let tagLatest = flags.tagLatest ? flags.tagLatest : (await inquirer.prompt({
|
|
63
|
+
type: 'confirm',
|
|
64
|
+
name: 'tagLatest',
|
|
65
|
+
message: '是否为镜像打上latest标签',
|
|
66
|
+
default: false
|
|
67
|
+
})).tagLatest;
|
|
68
|
+
if (typeof tagLatest === 'string') {
|
|
69
|
+
tagLatest = tagLatest !== 'false';
|
|
70
|
+
}
|
|
62
71
|
try {
|
|
63
|
-
await execPromise(`docker login --username=${
|
|
64
|
-
shelljs.exec(`docker buildx build -f ${DOCKERFILE_PATH} -t ${IMAGE_BASE_NAME}:${IMAGE_VERSION} --platform=${
|
|
72
|
+
await execPromise(`docker login --username=${username} ${REPOSITORY_ADDR} -p${password}`);
|
|
73
|
+
shelljs.exec(`docker buildx build -f ${DOCKERFILE_PATH} -t ${IMAGE_BASE_NAME}:${IMAGE_VERSION} --platform=${platform} .`);
|
|
65
74
|
shelljs.exec(`docker tag ${IMAGE_BASE_NAME}:${IMAGE_VERSION} ${REGISTRY_ADDR}:${IMAGE_VERSION}`);
|
|
66
75
|
if (tagLatest) {
|
|
67
76
|
shelljs.exec(`docker tag ${IMAGE_BASE_NAME}:${IMAGE_VERSION} ${REGISTRY_ADDR}:latest`);
|
package/build/Deploy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Deploy.js","sourceRoot":"","sources":["../src/Deploy.ts"],"names":[],"mappings":";;AACA,CAAC,KAAK,IAAI,EAAE;IACR,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAClC,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAC1E,MAAM,
|
|
1
|
+
{"version":3,"file":"Deploy.js","sourceRoot":"","sources":["../src/Deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,7 +72,7 @@ async function CreateDockerFileManipulator(projectPath, tsConfigFilePath, direct
|
|
|
72
72
|
const dockerfiles = {};
|
|
73
73
|
if (productionRepository) {
|
|
74
74
|
dockerfiles.Dockerfile = generateDockerfileContent(timezone, 'production', outDir, 'node', mainEntry);
|
|
75
|
-
packageJson.scripts.deploy = `lakutata-deploy ./Dockerfile ${productionRepository}`;
|
|
75
|
+
packageJson.scripts.deploy = `lakutata-deploy --dockerfile ./Dockerfile --repository ${productionRepository}`;
|
|
76
76
|
}
|
|
77
77
|
if (((_b = packageJson === null || packageJson === void 0 ? void 0 : packageJson.scripts) === null || _b === void 0 ? void 0 : _b.test) && developmentRepository) {
|
|
78
78
|
const testScriptString = packageJson.scripts.test;
|
|
@@ -103,7 +103,7 @@ async function CreateDockerFileManipulator(projectPath, tsConfigFilePath, direct
|
|
|
103
103
|
}
|
|
104
104
|
if (testEntryPoint && runtime) {
|
|
105
105
|
dockerfiles.DockerfileDev = generateDockerfileContent(timezone, 'development', outDir, runtime, testEntryPoint);
|
|
106
|
-
packageJson.scripts['deploy:dev'] = `lakutata-deploy ./DockerfileDev ${developmentRepository}`;
|
|
106
|
+
packageJson.scripts['deploy:dev'] = `lakutata-deploy --dockerfile ./DockerfileDev --repository ${developmentRepository}`;
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
for (const dockerfileName of Object.keys(dockerfiles)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateDockerFileManipulator.js","sourceRoot":"","sources":["../../../src/lib/manipulators/CreateDockerFileManipulator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"CreateDockerFileManipulator.js","sourceRoot":"","sources":["../../../src/lib/manipulators/CreateDockerFileManipulator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lakutata/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.25",
|
|
4
4
|
"description": "Lakutata CLI Tool",
|
|
5
5
|
"main": "./build/CLI.js",
|
|
6
6
|
"types": "./build/CLI.d.ts",
|
|
@@ -35,6 +35,8 @@
|
|
|
35
35
|
"author": "alex.ma",
|
|
36
36
|
"license": "MIT",
|
|
37
37
|
"dependencies": {
|
|
38
|
+
"@types/args": "^5.0.0",
|
|
39
|
+
"args": "^5.0.3",
|
|
38
40
|
"inquirer": "^8.2.4",
|
|
39
41
|
"moment-timezone": "^0.5.34",
|
|
40
42
|
"package-json": "^7.0.0",
|
package/src/Deploy.ts
CHANGED
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
(async () => {
|
|
3
3
|
const path = require('path')
|
|
4
|
+
const args = require('args')
|
|
4
5
|
const inquirer = require('inquirer')
|
|
5
6
|
const shelljs = require('shelljs')
|
|
6
7
|
const moment = require('moment-timezone')
|
|
7
8
|
const packageJson = require(path.resolve(process.cwd(), './package.json'))
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
args
|
|
10
|
+
.option('dockerfile', 'Dockerfile文件路径', './Dockerfile')
|
|
11
|
+
.option('repository', '镜像仓库地址')
|
|
12
|
+
.option('username', '镜像仓库用户名')
|
|
13
|
+
.option('password', '镜像仓库密码')
|
|
14
|
+
.option('platform', '构建平台')
|
|
15
|
+
.option('tagLatest', '是否为镜像打上latest的标签')
|
|
16
|
+
const flags = args.parse(process.argv)
|
|
17
|
+
const REGISTRY_ADDR = flags.repository
|
|
18
|
+
const DOCKERFILE_PATH = flags.dockerfile
|
|
11
19
|
const REPOSITORY_ADDR = new URL(`repo://${REGISTRY_ADDR}`).hostname
|
|
20
|
+
if (!DOCKERFILE_PATH) throw new Error('未指定Dockerfile文件路径')
|
|
12
21
|
if (!REGISTRY_ADDR) throw new Error('未配置仓库地址')
|
|
13
22
|
const TIMESTAMP = Date.now()
|
|
14
23
|
const IMAGE_BASE_NAME = `lakutata_tmp_image_${TIMESTAMP}`
|
|
@@ -20,46 +29,53 @@
|
|
|
20
29
|
})
|
|
21
30
|
})
|
|
22
31
|
}
|
|
23
|
-
const
|
|
32
|
+
const platforms = [
|
|
33
|
+
'linux/amd64',
|
|
34
|
+
'linux/arm64',
|
|
35
|
+
'linux/riscv64',
|
|
36
|
+
'linux/ppc64le',
|
|
37
|
+
'linux/s390x',
|
|
38
|
+
'linux/386',
|
|
39
|
+
'linux/arm/v7',
|
|
40
|
+
'linux/arm/v6'
|
|
41
|
+
]
|
|
42
|
+
const username = flags.username ? flags.username : (await inquirer.prompt(
|
|
24
43
|
{
|
|
25
44
|
type: 'input',
|
|
26
45
|
name: 'username',
|
|
27
46
|
message: 'Docker仓库账号'
|
|
28
|
-
}
|
|
47
|
+
}
|
|
48
|
+
)).username
|
|
49
|
+
const password = flags.password ? flags.password : (await inquirer.prompt(
|
|
29
50
|
{
|
|
30
51
|
type: 'password',
|
|
31
52
|
name: 'password',
|
|
32
53
|
message: 'Docker仓库密码',
|
|
33
54
|
mask: '*'
|
|
34
55
|
}
|
|
35
|
-
|
|
36
|
-
const
|
|
56
|
+
)).password
|
|
57
|
+
const platform = flags.platform ? flags.platform : (await inquirer.prompt(
|
|
37
58
|
{
|
|
38
59
|
type: 'list',
|
|
39
60
|
name: 'platform',
|
|
40
61
|
message: '目标构建平台架构',
|
|
41
|
-
choices:
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
'linux/ppc64le',
|
|
46
|
-
'linux/s390x',
|
|
47
|
-
'linux/386',
|
|
48
|
-
'linux/arm/v7',
|
|
49
|
-
'linux/arm/v6'
|
|
50
|
-
]
|
|
51
|
-
},
|
|
62
|
+
choices: platforms
|
|
63
|
+
}
|
|
64
|
+
)).platform
|
|
65
|
+
let tagLatest = flags.tagLatest ? flags.tagLatest : (await inquirer.prompt(
|
|
52
66
|
{
|
|
53
67
|
type: 'confirm',
|
|
54
68
|
name: 'tagLatest',
|
|
55
69
|
message: '是否为镜像打上latest标签',
|
|
56
70
|
default: false
|
|
57
71
|
}
|
|
58
|
-
|
|
59
|
-
|
|
72
|
+
)).tagLatest
|
|
73
|
+
if (typeof tagLatest === 'string') {
|
|
74
|
+
tagLatest = tagLatest !== 'false'
|
|
75
|
+
}
|
|
60
76
|
try {
|
|
61
|
-
await execPromise(`docker login --username=${
|
|
62
|
-
shelljs.exec(`docker buildx build -f ${DOCKERFILE_PATH} -t ${IMAGE_BASE_NAME}:${IMAGE_VERSION} --platform=${
|
|
77
|
+
await execPromise(`docker login --username=${username} ${REPOSITORY_ADDR} -p${password}`)
|
|
78
|
+
shelljs.exec(`docker buildx build -f ${DOCKERFILE_PATH} -t ${IMAGE_BASE_NAME}:${IMAGE_VERSION} --platform=${platform} .`)
|
|
63
79
|
shelljs.exec(`docker tag ${IMAGE_BASE_NAME}:${IMAGE_VERSION} ${REGISTRY_ADDR}:${IMAGE_VERSION}`)
|
|
64
80
|
if (tagLatest) {
|
|
65
81
|
shelljs.exec(`docker tag ${IMAGE_BASE_NAME}:${IMAGE_VERSION} ${REGISTRY_ADDR}:latest`)
|
|
@@ -72,7 +72,7 @@ export async function CreateDockerFileManipulator(projectPath: string, tsConfigF
|
|
|
72
72
|
const dockerfiles: { [key: string]: string } = {}
|
|
73
73
|
if (productionRepository) {
|
|
74
74
|
dockerfiles.Dockerfile = generateDockerfileContent(timezone, 'production', outDir, 'node', mainEntry)
|
|
75
|
-
packageJson.scripts.deploy = `lakutata-deploy ./Dockerfile ${productionRepository}`
|
|
75
|
+
packageJson.scripts.deploy = `lakutata-deploy --dockerfile ./Dockerfile --repository ${productionRepository}`
|
|
76
76
|
}
|
|
77
77
|
if (packageJson?.scripts?.test && developmentRepository) {
|
|
78
78
|
//有测试主入口并且仓库地址被正确配置
|
|
@@ -102,7 +102,7 @@ export async function CreateDockerFileManipulator(projectPath: string, tsConfigF
|
|
|
102
102
|
}
|
|
103
103
|
if (testEntryPoint && runtime) {
|
|
104
104
|
dockerfiles.DockerfileDev = generateDockerfileContent(timezone, 'development', outDir, runtime, testEntryPoint)
|
|
105
|
-
packageJson.scripts['deploy:dev'] = `lakutata-deploy ./DockerfileDev ${developmentRepository}`
|
|
105
|
+
packageJson.scripts['deploy:dev'] = `lakutata-deploy --dockerfile ./DockerfileDev --repository ${developmentRepository}`
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
for (const dockerfileName of Object.keys(dockerfiles)) {
|