@simplysm/sd-cli 12.6.8 → 12.6.9
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/dist/entry/SdAiCommand.js +25 -32
- package/dist/entry/SdAiCommand.js.map +1 -1
- package/dist/sd-cli.js +1 -1
- package/dist/sd-cli.js.map +1 -1
- package/package.json +6 -6
- package/src/entry/SdAiCommand.ts +26 -35
- package/src/sd-cli.ts +1 -1
|
@@ -1,43 +1,41 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SdProcess } from "@simplysm/sd-core-node";
|
|
2
2
|
import { NeverEntryError, StringUtil } from "@simplysm/sd-core-common";
|
|
3
3
|
import Anthropic from "@anthropic-ai/sdk";
|
|
4
4
|
export class SdAiCommand {
|
|
5
5
|
static async commitAsync() {
|
|
6
|
-
const logger = Logger.get(["simplysm", "sd-cli", "SdAiCommand", "commitAsync"]);
|
|
7
6
|
if (StringUtil.isNullOrEmpty(process.env['ANTHROPIC_API_KEY'])) {
|
|
8
7
|
throw new Error("ANTHROPIC_API_KEY 환경변수가 설정되어 있지 않습니다.");
|
|
9
8
|
}
|
|
10
|
-
|
|
9
|
+
process.stdout.write("실행중: git add .\n");
|
|
11
10
|
await SdProcess.spawnAsync("git add .", { cwd: process.cwd() });
|
|
12
|
-
|
|
13
|
-
const diff = await SdProcess.spawnAsync(`git diff --staged -- . ":(exclude).*" ":(exclude)_*"`, { cwd: process.cwd() });
|
|
11
|
+
process.stdout.write(`실행중: git diff --staged -- . ":(exclude).*/" ":(exclude)_*/ ":(exclude)yarn.lock" ":(exclude)packages/*/styles.css"\n`);
|
|
12
|
+
const diff = await SdProcess.spawnAsync(`git diff --staged -- . ":(exclude).*" ":(exclude)_*" ":(exclude)yarn.lock" ":(exclude)packages/*/styles.css"`, { cwd: process.cwd() });
|
|
13
|
+
if (StringUtil.isNullOrEmpty(diff.trim())) {
|
|
14
|
+
throw new Error("변경사항이 없습니다.");
|
|
15
|
+
}
|
|
14
16
|
const client = new Anthropic({ apiKey: process.env['ANTHROPIC_API_KEY'] });
|
|
15
|
-
|
|
17
|
+
process.stdout.write("AI를 통해 커밋 메시지 생성중...\n");
|
|
16
18
|
const message = await client.messages.create({
|
|
17
|
-
model: 'claude-3-5-
|
|
19
|
+
model: 'claude-3-5-haiku-latest',
|
|
18
20
|
max_tokens: 1024,
|
|
21
|
+
system: "당신은 코드 리뷰 전문가입니다",
|
|
19
22
|
messages: [
|
|
20
|
-
{
|
|
21
|
-
role: "assistant",
|
|
22
|
-
content: "당신은 코드 리뷰 전문가입니다. Git diff를 분석하고 문제점과 커밋 메시지를 동시에 생성하세요.",
|
|
23
|
-
},
|
|
24
23
|
{
|
|
25
24
|
role: "user",
|
|
26
25
|
content: `
|
|
27
|
-
다음 Git diff를 분석하고
|
|
28
|
-
1. 코드 변경의 문제점 및 개선점
|
|
29
|
-
2. Conventional Commits 규약에 따른 명확한 커밋 메시지
|
|
26
|
+
다음 Git diff를 분석하고 커밋메시지를 한글로 작성해 주세요:
|
|
30
27
|
|
|
31
|
-
Git diff
|
|
28
|
+
Git diff 내용:
|
|
32
29
|
|
|
33
|
-
|
|
34
|
-
- 코드 품질, 잠재적 버그, 성능 이슈 확인
|
|
30
|
+
${diff}
|
|
35
31
|
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
|
|
32
|
+
답변방법:
|
|
33
|
+
- 형식: <type>(<scope>): <description>
|
|
34
|
+
- 변경사항을 명확하고 간결하게 설명
|
|
35
|
+
- 한글로 작성
|
|
36
|
+
- 수동적인 표현 대신 능동적 표현 사용
|
|
37
|
+
- packages폴더내 패키지별로 작성
|
|
38
|
+
- 커밋메시지 텍스트만으로 답변`.trim(),
|
|
41
39
|
},
|
|
42
40
|
],
|
|
43
41
|
});
|
|
@@ -45,23 +43,18 @@ Git diff 내용:\n\n${diff}
|
|
|
45
43
|
throw new NeverEntryError();
|
|
46
44
|
}
|
|
47
45
|
const messageText = message.content[0].text;
|
|
48
|
-
const parts = messageText.split('----');
|
|
49
|
-
process.stdout.write("문제점 및 개선점:\n----\n");
|
|
50
|
-
process.stdout.write(parts[0].trim() + "\n----\n");
|
|
51
|
-
process.stdout.write("커밋 메시지를 확인하려면 ENTER를 입력하세요. (취소: CTRL+C)\n\n");
|
|
52
|
-
await this.#waitInputEnterKey();
|
|
53
46
|
process.stdout.write("커밋 메시지:\n----\n");
|
|
54
|
-
process.stdout.write(
|
|
47
|
+
process.stdout.write(messageText + "\n----\n");
|
|
55
48
|
process.stdout.write("커밋 하려면 ENTER를 입력하세요. (취소: CTRL+C)\n\n");
|
|
56
49
|
await this.#waitInputEnterKey();
|
|
57
|
-
|
|
58
|
-
await SdProcess.spawnAsync(`git commit -m "${
|
|
50
|
+
process.stdout.write("커밋 중...\n");
|
|
51
|
+
await SdProcess.spawnAsync(`git commit -m "${messageText}"`, { cwd: process.cwd() });
|
|
59
52
|
process.stdout.write("커밋되었습니다. 푸쉬 하려면 ENTER를 입력하세요. (취소: CTRL+C)\n\n");
|
|
60
53
|
await this.#waitInputEnterKey();
|
|
61
|
-
|
|
54
|
+
process.stdout.write("푸쉬 중...\n");
|
|
62
55
|
await SdProcess.spawnAsync("git push", { cwd: process.cwd() });
|
|
63
56
|
await SdProcess.spawnAsync("git push --tags", { cwd: process.cwd() });
|
|
64
|
-
|
|
57
|
+
process.stdout.write("완료\n");
|
|
65
58
|
process.exit(0);
|
|
66
59
|
}
|
|
67
60
|
static async #waitInputEnterKey() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SdAiCommand.js","sourceRoot":"","sources":["../../src/entry/SdAiCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"SdAiCommand.js","sourceRoot":"","sources":["../../src/entry/SdAiCommand.ts"],"names":[],"mappings":"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"}
|
package/dist/sd-cli.js
CHANGED
|
@@ -155,7 +155,7 @@ const argv = (await yargs(hideBin(process.argv))
|
|
|
155
155
|
describe: "Webview로 오픈할 URL",
|
|
156
156
|
demandOption: true,
|
|
157
157
|
}))
|
|
158
|
-
.command("commit", "AI를 통해 변경사항에 대한
|
|
158
|
+
.command("commit", "AI를 통해 변경사항에 대한 커밋 메시지를 작성하여, 커밋 및 푸쉬를 수행합니다.")
|
|
159
159
|
.parseAsync());
|
|
160
160
|
if (Boolean(argv.debug)) {
|
|
161
161
|
process.env["SD_DEBUG"] = "true";
|
package/dist/sd-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-cli.js","sourceRoot":"","sources":["../src/sd-cli.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,KAAK,CAAC,eAAe,GAAG,QAAQ,CAAC;AACjC,YAAY,CAAC,mBAAmB,GAAG,CAAC,CAAC;AAErC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7C,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;KACnB,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC;KAClB,OAAO,CAAC;IACP,KAAK,EAAE;QACL,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,oBAAoB;QAC9B,OAAO,EAAE,KAAK;KACf;CACF,CAAC;KACD,OAAO,CAAC,cAAc,EAAE,uBAAuB,EAAE,CAAC,GAAG,EAAE,EAAE,CACxD,GAAG;KACA,OAAO,CAAC,KAAK,CAAC;KACd,IAAI,CAAC,MAAM,CAAC;KACZ,IAAI,CAAC,OAAO,CAAC;KACb,OAAO,CAAC;IACP,MAAM,EAAE;QACN,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,mBAAmB;KAC9B;IACD,OAAO,EAAE;QACP,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,OAAO;KAClB;CACF,CAAC,CACL;KACA,OAAO,CAAC,OAAO,EAAE,iCAAiC,EAAE,CAAC,GAAG,EAAE,EAAE,CAC3D,GAAG;KACA,OAAO,CAAC,KAAK,CAAC;KACd,IAAI,CAAC,MAAM,CAAC;KACZ,IAAI,CAAC,OAAO,CAAC;KACb,OAAO,CAAC;IACP,MAAM,EAAE;QACN,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,mBAAmB;KAC9B;IACD,OAAO,EAAE;QACP,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,OAAO;KAClB;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,YAAY;KACvB;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,wBAAwB;KACnC;CACF,CAAC,CACL;KACA,OAAO,CAAC,OAAO,EAAE,4BAA4B,EAAE,CAAC,GAAG,EAAE,EAAE,CACtD,GAAG;KACA,OAAO,CAAC,KAAK,CAAC;KACd,IAAI,CAAC,MAAM,CAAC;KACZ,IAAI,CAAC,OAAO,CAAC;KACb,OAAO,CAAC;IACP,MAAM,EAAE;QACN,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,mBAAmB;KAC9B;IACD,OAAO,EAAE;QACP,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,OAAO;KAClB;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,YAAY;KACvB;CACF,CAAC,CACL;KACA,OAAO,CAAC,SAAS,EAAE,qBAAqB,EAAE,CAAC,GAAG,EAAE,EAAE,CACjD,GAAG;KACA,OAAO,CAAC,KAAK,CAAC;KACd,IAAI,CAAC,MAAM,CAAC;KACZ,IAAI,CAAC,OAAO,CAAC;KACb,OAAO,CAAC;IACP,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,KAAK;KACf;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,mBAAmB;KAC9B;IACD,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,OAAO;KAClB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,YAAY;KACvB;CACF,CAAC,CACL;KACA,OAAO,CAAC,wBAAwB,EAAE,kCAAkC,EAAE,CAAC,GAAG,EAAE,EAAE,CAC7E,GAAG;KACA,UAAU,CAAC,SAAS,EAAE;IACrB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,MAAM;IAChB,YAAY,EAAE,IAAI;CACnB,CAAC;KACD,OAAO,CAAC;IACP,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,mBAAmB;KAC9B;IACD,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,OAAO;KAClB;CACF,CAAC,CACL;KACA,OAAO,CAAC,kCAAkC,EAAE,kCAAkC,EAAE,CAAC,GAAG,EAAE,EAAE,CACvF,GAAG;KACA,UAAU,CAAC,SAAS,EAAE;IACrB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,MAAM;IAChB,YAAY,EAAE,IAAI;CACnB,CAAC;KACD,OAAO,CAAC;IACP,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,mBAAmB;KAC9B;IACD,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,OAAO;KAClB;CACF,CAAC,CACL;KACA,OAAO,CACN,wCAAwC,EACxC,mCAAmC,EACnC,CAAC,GAAG,EAAE,EAAE,CACN,GAAG;KACA,UAAU,CAAC,UAAU,EAAE;IACtB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,qBAAqB;IAC/B,YAAY,EAAE,IAAI;CACnB,CAAC;KACD,UAAU,CAAC,SAAS,EAAE;IACrB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,MAAM;IAChB,YAAY,EAAE,IAAI;CACnB,CAAC;KACD,UAAU,CAAC,KAAK,EAAE;IACjB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,kBAAkB;IAC5B,YAAY,EAAE,IAAI;CACnB,CAAC,CACP;KACA,OAAO,CACN,QAAQ,EACR,
|
|
1
|
+
{"version":3,"file":"sd-cli.js","sourceRoot":"","sources":["../src/sd-cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/sd-cli",
|
|
3
|
-
"version": "12.6.
|
|
3
|
+
"version": "12.6.9",
|
|
4
4
|
"description": "심플리즘 패키지 - CLI",
|
|
5
5
|
"author": "김석래",
|
|
6
6
|
"repository": {
|
|
@@ -22,14 +22,14 @@
|
|
|
22
22
|
"@angular/compiler-cli": "^18.2.13",
|
|
23
23
|
"@anthropic-ai/sdk": "^0.32.1",
|
|
24
24
|
"@electron/rebuild": "^3.7.1",
|
|
25
|
-
"@simplysm/sd-core-common": "12.6.
|
|
26
|
-
"@simplysm/sd-core-node": "12.6.
|
|
27
|
-
"@simplysm/sd-service-server": "12.6.
|
|
28
|
-
"@simplysm/sd-storage": "12.6.
|
|
25
|
+
"@simplysm/sd-core-common": "12.6.9",
|
|
26
|
+
"@simplysm/sd-core-node": "12.6.9",
|
|
27
|
+
"@simplysm/sd-service-server": "12.6.9",
|
|
28
|
+
"@simplysm/sd-storage": "12.6.9",
|
|
29
29
|
"browserslist": "^4.24.2",
|
|
30
30
|
"cordova": "^12.0.0",
|
|
31
31
|
"css-has-pseudo": "^7.0.1",
|
|
32
|
-
"electron": "^33.
|
|
32
|
+
"electron": "^33.3.0",
|
|
33
33
|
"electron-builder": "^25.1.8",
|
|
34
34
|
"esbuild": "^0.24.0",
|
|
35
35
|
"eslint": "^9.16.0",
|
package/src/entry/SdAiCommand.ts
CHANGED
|
@@ -1,52 +1,50 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SdProcess } from "@simplysm/sd-core-node";
|
|
2
2
|
import { NeverEntryError, StringUtil } from "@simplysm/sd-core-common";
|
|
3
3
|
import Anthropic from "@anthropic-ai/sdk";
|
|
4
4
|
|
|
5
5
|
export class SdAiCommand {
|
|
6
6
|
static async commitAsync(): Promise<void> {
|
|
7
|
-
const logger = Logger.get(["simplysm", "sd-cli", "SdAiCommand", "commitAsync"]);
|
|
8
|
-
|
|
9
7
|
if (StringUtil.isNullOrEmpty(process.env['ANTHROPIC_API_KEY'])) {
|
|
10
8
|
throw new Error("ANTHROPIC_API_KEY 환경변수가 설정되어 있지 않습니다.");
|
|
11
9
|
}
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
process.stdout.write("실행중: git add .\n");
|
|
14
12
|
await SdProcess.spawnAsync("git add .", { cwd: process.cwd() });
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
process.stdout.write(`실행중: git diff --staged -- . ":(exclude).*/" ":(exclude)_*/ ":(exclude)yarn.lock" ":(exclude)packages/*/styles.css"\n`);
|
|
17
15
|
const diff = await SdProcess.spawnAsync(
|
|
18
|
-
`git diff --staged -- . ":(exclude).*" ":(exclude)_*"`,
|
|
16
|
+
`git diff --staged -- . ":(exclude).*" ":(exclude)_*" ":(exclude)yarn.lock" ":(exclude)packages/*/styles.css"`,
|
|
19
17
|
{ cwd: process.cwd() },
|
|
20
18
|
);
|
|
21
19
|
|
|
20
|
+
if (StringUtil.isNullOrEmpty(diff.trim())) {
|
|
21
|
+
throw new Error("변경사항이 없습니다.");
|
|
22
|
+
}
|
|
23
|
+
|
|
22
24
|
const client = new Anthropic({ apiKey: process.env['ANTHROPIC_API_KEY'] });
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
process.stdout.write("AI를 통해 커밋 메시지 생성중...\n");
|
|
25
27
|
const message = await client.messages.create({
|
|
26
|
-
model: 'claude-3-5-
|
|
28
|
+
model: 'claude-3-5-haiku-latest',
|
|
27
29
|
max_tokens: 1024,
|
|
30
|
+
system: "당신은 코드 리뷰 전문가입니다",
|
|
28
31
|
messages: [
|
|
29
|
-
{
|
|
30
|
-
role: "assistant",
|
|
31
|
-
content: "당신은 코드 리뷰 전문가입니다. Git diff를 분석하고 문제점과 커밋 메시지를 동시에 생성하세요.",
|
|
32
|
-
},
|
|
33
32
|
{
|
|
34
33
|
role: "user",
|
|
35
34
|
content: `
|
|
36
|
-
다음 Git diff를 분석하고
|
|
37
|
-
1. 코드 변경의 문제점 및 개선점
|
|
38
|
-
2. Conventional Commits 규약에 따른 명확한 커밋 메시지
|
|
35
|
+
다음 Git diff를 분석하고 커밋메시지를 한글로 작성해 주세요:
|
|
39
36
|
|
|
40
|
-
Git diff
|
|
37
|
+
Git diff 내용:
|
|
41
38
|
|
|
42
|
-
|
|
43
|
-
- 코드 품질, 잠재적 버그, 성능 이슈 확인
|
|
39
|
+
${diff}
|
|
44
40
|
|
|
45
|
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
|
|
49
|
-
|
|
41
|
+
답변방법:
|
|
42
|
+
- 형식: <type>(<scope>): <description>
|
|
43
|
+
- 변경사항을 명확하고 간결하게 설명
|
|
44
|
+
- 한글로 작성
|
|
45
|
+
- 수동적인 표현 대신 능동적 표현 사용
|
|
46
|
+
- packages폴더내 패키지별로 작성
|
|
47
|
+
- 커밋메시지 텍스트만으로 답변`.trim(),
|
|
50
48
|
},
|
|
51
49
|
],
|
|
52
50
|
});
|
|
@@ -54,31 +52,24 @@ Git diff 내용:\n\n${diff}
|
|
|
54
52
|
throw new NeverEntryError();
|
|
55
53
|
}
|
|
56
54
|
const messageText = message.content[0].text;
|
|
57
|
-
const parts = messageText.split('----');
|
|
58
|
-
|
|
59
|
-
process.stdout.write("문제점 및 개선점:\n----\n");
|
|
60
|
-
process.stdout.write(parts[0].trim() + "\n----\n");
|
|
61
|
-
|
|
62
|
-
process.stdout.write("커밋 메시지를 확인하려면 ENTER를 입력하세요. (취소: CTRL+C)\n\n");
|
|
63
|
-
await this.#waitInputEnterKey();
|
|
64
55
|
|
|
65
56
|
process.stdout.write("커밋 메시지:\n----\n");
|
|
66
|
-
process.stdout.write(
|
|
57
|
+
process.stdout.write(messageText + "\n----\n");
|
|
67
58
|
|
|
68
59
|
process.stdout.write("커밋 하려면 ENTER를 입력하세요. (취소: CTRL+C)\n\n");
|
|
69
60
|
await this.#waitInputEnterKey();
|
|
70
61
|
|
|
71
|
-
|
|
72
|
-
await SdProcess.spawnAsync(`git commit -m "${
|
|
62
|
+
process.stdout.write("커밋 중...\n");
|
|
63
|
+
await SdProcess.spawnAsync(`git commit -m "${messageText}"`, { cwd: process.cwd() });
|
|
73
64
|
|
|
74
65
|
process.stdout.write("커밋되었습니다. 푸쉬 하려면 ENTER를 입력하세요. (취소: CTRL+C)\n\n");
|
|
75
66
|
await this.#waitInputEnterKey();
|
|
76
67
|
|
|
77
|
-
|
|
68
|
+
process.stdout.write("푸쉬 중...\n");
|
|
78
69
|
await SdProcess.spawnAsync("git push", { cwd: process.cwd() });
|
|
79
70
|
await SdProcess.spawnAsync("git push --tags", { cwd: process.cwd() });
|
|
80
71
|
|
|
81
|
-
|
|
72
|
+
process.stdout.write("완료\n");
|
|
82
73
|
process.exit(0);
|
|
83
74
|
}
|
|
84
75
|
|
package/src/sd-cli.ts
CHANGED