task-pipeliner 0.3.3 → 0.3.5
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/README.ko.md +148 -110
- package/README.md +152 -113
- package/dist/index.cjs +170 -79
- package/package.json +1 -1
package/README.ko.md
CHANGED
|
@@ -2,17 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
> 조건 기반 실행과 아름다운 CLI 출력을 제공하는 강력한 워크플로우 오케스트레이션 도구
|
|
4
4
|
|
|
5
|
-
**버전:** 0.3.
|
|
5
|
+
**버전:** 0.3.5
|
|
6
6
|
|
|
7
7
|

|
|
8
8
|
|
|
9
9
|
[](https://www.npmjs.com/package/task-pipeliner)
|
|
10
10
|
[](https://opensource.org/licenses/MIT)
|
|
11
11
|
|
|
12
|
-
**task-pipeliner**는 간단한 YAML 또는 JSON 파일로 복잡한 워크플로우를 정의, 조율, 실행할 수 있는 현대적인 워크플로우 오케스트레이션 도구입니다. 조건부 실행, 병렬 작업, 대화형 프롬프트, 그리고 아름다운 터미널 출력을 제공하여 빌드 스크립트, 배포 워크플로우, CI/CD 파이프라인에 완벽합니다.
|
|
12
|
+
**task-pipeliner**는 간단한 YAML 또는 JSON 파일로 복잡한 워크플로우를 정의, 조율, 실행할 수 있는 현대적인 워크플로우 오케스트레이션 도구입니다. 조건부 실행, 병렬 작업, 대화형 프롬프트, 그리고 아름다운 터미널 출력을 제공하여 빌드 스크립트, 배포 워크플로우, CI/CD 파이프라인에 완벽합니다. *아직 베타 버전이라 인터페이스가 조금씩 수정될 수 있습니다.*
|
|
13
13
|
|
|
14
14
|
**README-Language-Map** [KR [한국어 버전]](https://github.com/racgoo/task-pipeliner/blob/main/README.ko.md) / [EN [English Version]](https://github.com/racgoo/task-pipeliner)
|
|
15
15
|
|
|
16
|
+
## 리소스
|
|
17
|
+
|
|
18
|
+
### 문서 및 도구
|
|
19
|
+
|
|
20
|
+
- 📚 **[문서](https://task-pipeliner.racgoo.com/)** - 완전한 DSL 참조 및 가이드
|
|
21
|
+
- 🎨 **[워크플로우 생성기](https://task-pipeliner-generator.racgoo.com/)** - 브라우저에서 시각적으로 워크플로우 생성
|
|
22
|
+
|
|
23
|
+
### 저장소 및 패키지 관리자
|
|
24
|
+
|
|
25
|
+
- 💻 **[GitHub](https://github.com/racgoo/task-pipeliner)** - 소스 코드 및 이슈 추적
|
|
26
|
+
- 📦 **[npm](https://www.npmjs.com/package/task-pipeliner)** - npm 레지스트리 패키지
|
|
27
|
+
- 🍺 **[Homebrew](https://github.com/racgoo/homebrew-task-pipeliner)** - macOS/Linux용 Homebrew 탭
|
|
28
|
+
- 🪟 **[Scoop](https://github.com/racgoo/scoop-task-pipeliner)** - Windows용 Scoop 버킷
|
|
29
|
+
|
|
16
30
|
## ✨ 주요 기능
|
|
17
31
|
|
|
18
32
|
- **조건 기반 실행** - 파일 존재 여부, 사용자 선택, 환경 변수 등을 기반으로 단계 실행
|
|
@@ -31,26 +45,18 @@
|
|
|
31
45
|
|
|
32
46
|
- **워크플로우 스케줄링** - cron 표현식을 사용하여 지정된 시간에 워크플로우 자동 실행
|
|
33
47
|
|
|
34
|
-
## 리소스
|
|
35
|
-
|
|
36
|
-
### 문서 및 도구
|
|
37
|
-
|
|
38
|
-
- 📚 **[문서](https://task-pipeliner.racgoo.com/)** - 완전한 DSL 참조 및 가이드
|
|
39
|
-
- 🎨 **[워크플로우 생성기](https://task-pipeliner-generator.racgoo.com/)** - 브라우저에서 시각적으로 워크플로우 생성
|
|
40
|
-
|
|
41
|
-
### 저장소 및 패키지 관리자
|
|
42
|
-
|
|
43
|
-
- 💻 **[GitHub](https://github.com/racgoo/task-pipeliner)** - 소스 코드 및 이슈 추적
|
|
44
|
-
- 📦 **[npm](https://www.npmjs.com/package/task-pipeliner)** - npm 레지스트리 패키지
|
|
45
|
-
- 🍺 **[Homebrew](https://github.com/racgoo/homebrew-task-pipeliner)** - macOS/Linux용 Homebrew 탭
|
|
46
|
-
- 🪟 **[Scoop](https://github.com/racgoo/scoop-task-pipeliner)** - Windows용 Scoop 버킷
|
|
47
|
-
|
|
48
48
|
### CLI 명령어
|
|
49
49
|
|
|
50
|
+
**프로젝트 셋업 (신규 프로젝트 권장):**
|
|
51
|
+
```bash
|
|
52
|
+
tp setup # tp/, tp/workflows, tp/schedules 생성 및 예시 워크플로우 2개·예시 스케줄 2개 추가 (echo 기반; choose, when, profiles, prompt 포함)
|
|
53
|
+
```
|
|
54
|
+
프로젝트 루트에서 실행. `tp/workflows/`, `tp/schedules/`를 만들고, choose·when·profiles·prompt를 쓴 예시 워크플로우와 cron·프로필을 쓴 예시 스케줄을 넣습니다. 이미 있는 파일은 덮어쓰지 않습니다.
|
|
55
|
+
|
|
50
56
|
**워크플로우 실행:**
|
|
51
57
|
```bash
|
|
52
58
|
tp run workflow.yaml # 워크플로우 실행
|
|
53
|
-
tp run # 가장 가까운 tp 디렉토리에서 워크플로우 선택하여 실행
|
|
59
|
+
tp run # 가장 가까운 tp/workflows 디렉토리에서 워크플로우 선택하여 실행
|
|
54
60
|
tp run workflow.yaml --profile Test # 프로필로 실행 (프로필에 설정된 변수는 choose/prompt 생략)
|
|
55
61
|
tp run workflow.yaml -p Test # 프로필 짧은 형식
|
|
56
62
|
tp run workflow.yaml --silent # 사일런트 모드로 실행 (모든 콘솔 출력 억제)
|
|
@@ -74,16 +80,18 @@ tp history remove-all # 모든 히스토리 삭제
|
|
|
74
80
|
**워크플로우 스케줄링:**
|
|
75
81
|
```bash
|
|
76
82
|
tp schedule # 모든 스케줄 보기 (tp schedule list와 동일)
|
|
77
|
-
tp schedule list # 스케줄 목록 및 데몬 상태
|
|
78
|
-
tp schedule add schedules.yaml # 스케줄 파일에서
|
|
79
|
-
tp schedule
|
|
83
|
+
tp schedule list # 스케줄 목록 및 데몬 상태 (각 스케줄을 카드로 표시: cron, 언제 실행되는지 설명, 다음 실행 시각 등)
|
|
84
|
+
tp schedule add schedules.yaml # 스케줄 파일에서 추가; 파일 경로 생략 시 가장 가까운 tp/schedules에서 선택
|
|
85
|
+
tp schedule add # 가장 가까운 tp/schedules 디렉토리에서 스케줄 파일 선택
|
|
86
|
+
tp schedule remove # 스케줄 삭제; 삭제 후 삭제된 스케줄을 list와 동일한 카드 형식으로 표시
|
|
80
87
|
tp schedule remove-all # 모든 스케줄 삭제
|
|
81
|
-
tp schedule toggle # 스케줄
|
|
88
|
+
tp schedule toggle # 스케줄 활성화/비활성화; 토글 후 ENABLED/DISABLED를 굵게·색상으로 강조하고 스케줄 카드 표시
|
|
82
89
|
tp schedule start # 포그라운드 모드로 스케줄러 시작
|
|
83
90
|
tp schedule start -d # 백그라운드 데몬 모드로 스케줄러 시작
|
|
84
91
|
tp schedule stop # 스케줄러 데몬 종료
|
|
85
92
|
tp schedule status # 데몬·스케줄 상태 확인 (실시간 모드; Ctrl+C는 화면만 종료, 데몬은 계속 실행)
|
|
86
93
|
```
|
|
94
|
+
`tp schedule add`, `toggle`, `remove` 후에는 해당 스케줄이 `tp schedule list`와 같은 카드 레이아웃(크론, 언제 실행되는지 설명, 다음 실행, 활성 여부)으로 표시됩니다. 토글 후에는 ENABLED/DISABLED가 강조되어 새 상태를 한눈에 알 수 있습니다.
|
|
87
95
|
|
|
88
96
|
**데이터 및 업그레이드:**
|
|
89
97
|
```bash
|
|
@@ -114,6 +122,13 @@ task-pipeliner run workflow.yaml
|
|
|
114
122
|
tp run workflow.yaml
|
|
115
123
|
```
|
|
116
124
|
|
|
125
|
+
설치 확인:
|
|
126
|
+
```bash
|
|
127
|
+
task-pipeliner --version
|
|
128
|
+
# 또는
|
|
129
|
+
tp --version
|
|
130
|
+
```
|
|
131
|
+
|
|
117
132
|
**업데이트:**
|
|
118
133
|
```bash
|
|
119
134
|
# 먼저 Homebrew의 패키지 레지스트리를 업데이트합니다
|
|
@@ -144,6 +159,13 @@ task-pipeliner run workflow.yaml
|
|
|
144
159
|
tp run workflow.yaml
|
|
145
160
|
```
|
|
146
161
|
|
|
162
|
+
설치 확인:
|
|
163
|
+
```bash
|
|
164
|
+
task-pipeliner --version
|
|
165
|
+
# 또는
|
|
166
|
+
tp --version
|
|
167
|
+
```
|
|
168
|
+
|
|
147
169
|
**업데이트:**
|
|
148
170
|
```bash
|
|
149
171
|
scoop update task-pipeliner
|
|
@@ -168,6 +190,13 @@ task-pipeliner run workflow.yaml
|
|
|
168
190
|
tp run workflow.yaml
|
|
169
191
|
```
|
|
170
192
|
|
|
193
|
+
설치 확인:
|
|
194
|
+
```bash
|
|
195
|
+
task-pipeliner --version
|
|
196
|
+
# 또는
|
|
197
|
+
tp --version
|
|
198
|
+
```
|
|
199
|
+
|
|
171
200
|
#### 프로젝트 설치 (개발 모드)
|
|
172
201
|
|
|
173
202
|
프로젝트에 devDependency로 설치하면 `npx`로 사용할 수 있습니다:
|
|
@@ -195,7 +224,7 @@ npx tp run workflow.yaml
|
|
|
195
224
|
name: My Workflow
|
|
196
225
|
|
|
197
226
|
steps:
|
|
198
|
-
- run: echo "Hello, World!"
|
|
227
|
+
- run: 'echo "Hello, World!"'
|
|
199
228
|
|
|
200
229
|
- choose:
|
|
201
230
|
message: "무엇을 하시겠습니까?"
|
|
@@ -209,12 +238,12 @@ steps:
|
|
|
209
238
|
- when:
|
|
210
239
|
var:
|
|
211
240
|
action: build
|
|
212
|
-
run: npm run build
|
|
241
|
+
run: 'npm run build'
|
|
213
242
|
|
|
214
243
|
- when:
|
|
215
244
|
var:
|
|
216
245
|
action: test
|
|
217
|
-
run: npm test
|
|
246
|
+
run: 'npm test'
|
|
218
247
|
```
|
|
219
248
|
|
|
220
249
|
**JSON 형식 (`workflow.json`):**
|
|
@@ -280,26 +309,31 @@ tp run workflow.yaml -s
|
|
|
280
309
|
|
|
281
310
|
**`tp` 디렉토리 사용하기 (권장):**
|
|
282
311
|
|
|
283
|
-
|
|
312
|
+
권장 프로젝트 구조는 `tp` 디렉토리 아래에 두 개의 하위 디렉토리를 두는 방식입니다.
|
|
313
|
+
|
|
314
|
+
- **`tp/workflows/`** – 워크플로우 파일(YAML 또는 JSON). 파일 없이 `tp run`을 실행하면 task-pipeliner가 가장 가까운 `tp` 디렉토리를 찾고, **`tp/workflows/`** 안에서 실행할 워크플로우를 선택할 수 있게 합니다.
|
|
315
|
+
- **`tp/schedules/`** – 스케줄 파일(YAML 또는 JSON). `tp schedule add` 실행 시 파일 경로를 주지 않으면 가장 가까운 **`tp/schedules/`** 안에서 스케줄 파일을 선택할 수 있습니다.
|
|
316
|
+
|
|
317
|
+
**빠른 셋업:** 프로젝트 루트에서 `tp setup`을 실행하면 `tp/`, `tp/workflows/`, `tp/schedules/`가 생성되고, 예시 워크플로우 2개와 예시 스케줄 파일 2개(echo 기반, choose·when·profiles·prompt 및 스케줄 프로필 사용 예시 포함)가 추가됩니다. 이미 있는 파일은 덮어쓰지 않습니다.
|
|
284
318
|
|
|
285
319
|
```bash
|
|
286
|
-
# tp
|
|
287
|
-
|
|
288
|
-
mv workflow.yaml tp/
|
|
320
|
+
# 방법 1: tp setup 사용 (tp/workflows, tp/schedules + 예시 생성)
|
|
321
|
+
tp setup
|
|
289
322
|
|
|
290
|
-
#
|
|
323
|
+
# 방법 2: 수동으로 구조 만들기
|
|
324
|
+
mkdir -p tp/workflows tp/schedules
|
|
325
|
+
mv workflow.yaml tp/workflows/
|
|
326
|
+
|
|
327
|
+
# 파일 없이 실행 - tp/workflows에서 대화형 선택
|
|
291
328
|
tp run
|
|
292
329
|
```
|
|
293
330
|
|
|
294
|
-
|
|
295
|
-
1. 가장 가까운 `tp` 디렉토리를 찾습니다 (현재 디렉토리 또는 상위
|
|
296
|
-
2.
|
|
297
|
-
3.
|
|
298
|
-
- 타이핑하여 실시간으로 워크플로우 필터링
|
|
299
|
-
- 화살표 키 (↑↓)로 탐색
|
|
300
|
-
- Enter를 눌러 선택하고 실행
|
|
331
|
+
파일을 지정하지 않고 `tp run`을 실행하면:
|
|
332
|
+
1. 가장 가까운 `tp` 디렉토리를 찾습니다 (현재 디렉토리 또는 상위).
|
|
333
|
+
2. **`tp/workflows/`** 안의 모든 워크플로우 파일 (`.yaml`, `.yml`, `.json`)을 나열합니다.
|
|
334
|
+
3. 타이핑으로 필터, 화살표(↑↓)로 이동, Enter로 선택·실행하는 대화형 검색 메뉴를 띄웁니다.
|
|
301
335
|
|
|
302
|
-
|
|
336
|
+
메뉴에는 파일 이름과 워크플로우의 `name`(YAML/JSON)이 함께 표시되어 구분하기 쉽습니다.
|
|
303
337
|
|
|
304
338
|
**사일런트 모드:**
|
|
305
339
|
`--silent` (또는 `-s`) 플래그는 워크플로우 실행 중 모든 콘솔 출력을 억제합니다. 다음 경우에 유용합니다:
|
|
@@ -371,14 +405,13 @@ steps: # 필수: 실행할 단계 배열
|
|
|
371
405
|
- **타입**: `string` (상대 또는 절대 경로)
|
|
372
406
|
- **설명**: 모든 명령 실행을 위한 기본 디렉토리
|
|
373
407
|
- **해석**:
|
|
374
|
-
- **상대 경로** (예: `./`, `../frontend`):
|
|
408
|
+
- **상대 경로** (예: `./`, `../frontend`): YAML 파일의 디렉토리를 기준으로 해석
|
|
375
409
|
- **절대 경로** (예: `/home/user/project`): 그대로 사용
|
|
376
|
-
- **생략 시**:
|
|
410
|
+
- **생략 시**: `process.cwd()` (현재 작업 디렉토리) 사용
|
|
377
411
|
- **예제**:
|
|
378
412
|
```yaml
|
|
379
|
-
baseDir: ./frontend #
|
|
413
|
+
baseDir: ./frontend # YAML 파일 기준 상대 경로
|
|
380
414
|
baseDir: /app/frontend # 절대 경로
|
|
381
|
-
# 생략 시, 명령은 워크플로우 파일의 디렉토리에서 실행됨
|
|
382
415
|
```
|
|
383
416
|
|
|
384
417
|
#### `shell` (선택)
|
|
@@ -476,12 +509,12 @@ steps: # 필수: 실행할 단계 배열
|
|
|
476
509
|
```yaml
|
|
477
510
|
# 간단한 명령
|
|
478
511
|
steps:
|
|
479
|
-
- run: npm install
|
|
512
|
+
- run: 'npm install'
|
|
480
513
|
|
|
481
514
|
# 조건이 있는 명령
|
|
482
515
|
- when:
|
|
483
516
|
file: ./package.json
|
|
484
|
-
run: npm install
|
|
517
|
+
run: 'npm install'
|
|
485
518
|
|
|
486
519
|
# 변수 입력
|
|
487
520
|
- choose:
|
|
@@ -496,55 +529,55 @@ steps:
|
|
|
496
529
|
as: version
|
|
497
530
|
|
|
498
531
|
# 변수 치환이 있는 명령
|
|
499
|
-
- run: echo "Building {{version}}"
|
|
532
|
+
- run: 'echo "Building {{version}}"'
|
|
500
533
|
|
|
501
534
|
# 타임아웃이 있는 명령 (30초)
|
|
502
|
-
- run: npm install
|
|
535
|
+
- run: 'npm install'
|
|
503
536
|
timeout: 30
|
|
504
537
|
|
|
505
538
|
# 재시도가 있는 명령 (최대 3번 재시도)
|
|
506
|
-
- run: npm install
|
|
539
|
+
- run: 'npm install'
|
|
507
540
|
retry: 3
|
|
508
541
|
|
|
509
542
|
# 무한 재시도 명령 (성공할 때까지 재시도)
|
|
510
|
-
- run: npm install
|
|
543
|
+
- run: 'npm install'
|
|
511
544
|
retry: Infinity
|
|
512
545
|
|
|
513
546
|
# PM2처럼 프로세스 관리: 서버가 죽으면 자동 재시작
|
|
514
|
-
- run: node server.js
|
|
547
|
+
- run: 'node server.js'
|
|
515
548
|
retry: Infinity
|
|
516
549
|
|
|
517
550
|
# 타임아웃과 재시도 모두 사용
|
|
518
|
-
- run: npm install
|
|
551
|
+
- run: 'npm install'
|
|
519
552
|
timeout: 60
|
|
520
553
|
retry: 2
|
|
521
554
|
|
|
522
555
|
# 실패 시 fallback 명령 실행
|
|
523
|
-
- run: pnpm lint
|
|
556
|
+
- run: 'pnpm lint'
|
|
524
557
|
onError:
|
|
525
|
-
run: pnpm lint:fix
|
|
558
|
+
run: 'pnpm lint:fix'
|
|
526
559
|
|
|
527
560
|
# 여러 단계로 이어지는 fallback 체인
|
|
528
|
-
- run: step1
|
|
561
|
+
- run: 'step1'
|
|
529
562
|
onError:
|
|
530
|
-
run: step2
|
|
563
|
+
run: 'step2'
|
|
531
564
|
onError:
|
|
532
|
-
run: step3
|
|
565
|
+
run: 'step3'
|
|
533
566
|
|
|
534
567
|
# 실패를 기록만 하고 워크플로우는 계속 진행
|
|
535
|
-
- run: pnpm typecheck
|
|
568
|
+
- run: 'pnpm typecheck'
|
|
536
569
|
continue: true
|
|
537
570
|
onError:
|
|
538
|
-
run: echo "Type check failed, but continuing..."
|
|
571
|
+
run: 'echo "Type check failed, but continuing..."'
|
|
539
572
|
|
|
540
573
|
# 커스텀 쉘 사용 (스텝별)
|
|
541
|
-
- run: echo $SHELL
|
|
574
|
+
- run: 'echo $SHELL'
|
|
542
575
|
shell:
|
|
543
576
|
- zsh
|
|
544
577
|
- -c
|
|
545
578
|
|
|
546
579
|
# bash 로그인 쉘 사용
|
|
547
|
-
- run: source ~/.bashrc && echo "프로필 로드됨"
|
|
580
|
+
- run: 'source ~/.bashrc && echo "프로필 로드됨"'
|
|
548
581
|
shell:
|
|
549
582
|
- bash
|
|
550
583
|
- -lc
|
|
@@ -646,7 +679,7 @@ steps:
|
|
|
646
679
|
- when:
|
|
647
680
|
var: # 변수를 사용한다는 정의
|
|
648
681
|
env: prod # 'env' 변수가 'prod'와 같은지 확인
|
|
649
|
-
run: echo "프로덕션에 배포 중"
|
|
682
|
+
run: 'echo "프로덕션에 배포 중"'
|
|
650
683
|
```
|
|
651
684
|
|
|
652
685
|
---
|
|
@@ -700,13 +733,13 @@ steps:
|
|
|
700
733
|
**사용:**
|
|
701
734
|
```yaml
|
|
702
735
|
# 명령에서 사용
|
|
703
|
-
- run: echo "Building version {{version}}"
|
|
736
|
+
- run: 'echo "Building version {{version}}"'
|
|
704
737
|
|
|
705
738
|
# 조건에서 확인
|
|
706
739
|
- when:
|
|
707
740
|
var:
|
|
708
741
|
version: "1.0.0"
|
|
709
|
-
run: echo "안정 버전 배포 중"
|
|
742
|
+
run: 'echo "안정 버전 배포 중"'
|
|
710
743
|
```
|
|
711
744
|
|
|
712
745
|
---
|
|
@@ -735,19 +768,19 @@ steps:
|
|
|
735
768
|
# 기본 병렬 실행
|
|
736
769
|
# parallel 내부의 각 step은 `-`로 시작하며, `steps`와 동일한 형식
|
|
737
770
|
- parallel:
|
|
738
|
-
- run: npm run test:unit
|
|
739
|
-
- run: npm run test:integration
|
|
740
|
-
- run: npm run lint
|
|
771
|
+
- run: 'npm run test:unit'
|
|
772
|
+
- run: 'npm run test:integration'
|
|
773
|
+
- run: 'npm run lint'
|
|
741
774
|
|
|
742
775
|
# 조건이 있는 병렬
|
|
743
776
|
# 각 step은 자신만의 `when` 조건을 가질 수 있습니다
|
|
744
777
|
- parallel:
|
|
745
778
|
- when:
|
|
746
779
|
file: ./src
|
|
747
|
-
run: echo "프론트엔드 빌드 중..."
|
|
780
|
+
run: 'echo "프론트엔드 빌드 중..."'
|
|
748
781
|
- when:
|
|
749
782
|
file: ./api
|
|
750
|
-
run: echo "백엔드 빌드 중..."
|
|
783
|
+
run: 'echo "백엔드 빌드 중..."'
|
|
751
784
|
|
|
752
785
|
# 조건부 병렬 블록
|
|
753
786
|
# 전체 parallel 블록에 `when` 조건을 적용할 수 있습니다
|
|
@@ -755,15 +788,15 @@ steps:
|
|
|
755
788
|
var:
|
|
756
789
|
env: staging
|
|
757
790
|
parallel:
|
|
758
|
-
- run: npm run test
|
|
759
|
-
- run: npm run lint
|
|
791
|
+
- run: 'npm run test'
|
|
792
|
+
- run: 'npm run lint'
|
|
760
793
|
|
|
761
794
|
# 중첩 parallel (허용); parallel 내부에는 run / parallel / fail만 사용
|
|
762
795
|
- parallel:
|
|
763
|
-
- run: npm run test
|
|
796
|
+
- run: 'npm run test'
|
|
764
797
|
- parallel:
|
|
765
|
-
- run: npm run lint
|
|
766
|
-
- run: npm run typecheck
|
|
798
|
+
- run: 'npm run lint'
|
|
799
|
+
- run: 'npm run typecheck'
|
|
767
800
|
```
|
|
768
801
|
|
|
769
802
|
**동작:**
|
|
@@ -837,16 +870,16 @@ when:
|
|
|
837
870
|
```yaml
|
|
838
871
|
- when:
|
|
839
872
|
file: ./dist
|
|
840
|
-
run: echo "빌드가 존재합니다"
|
|
873
|
+
run: 'echo "빌드가 존재합니다"'
|
|
841
874
|
|
|
842
875
|
- when:
|
|
843
876
|
file: ./package.json
|
|
844
|
-
run: npm install
|
|
877
|
+
run: 'npm install'
|
|
845
878
|
|
|
846
879
|
- when:
|
|
847
880
|
not:
|
|
848
881
|
file: ./node_modules
|
|
849
|
-
run: npm install
|
|
882
|
+
run: 'npm install'
|
|
850
883
|
```
|
|
851
884
|
|
|
852
885
|
**동작:**
|
|
@@ -877,20 +910,20 @@ when:
|
|
|
877
910
|
- when:
|
|
878
911
|
var:
|
|
879
912
|
env: prod
|
|
880
|
-
run: echo "프로덕션에 배포 중"
|
|
913
|
+
run: 'echo "프로덕션에 배포 중"'
|
|
881
914
|
|
|
882
915
|
# version이 특정 값과 같은지 확인
|
|
883
916
|
- when:
|
|
884
917
|
var:
|
|
885
918
|
version: "1.0.0"
|
|
886
|
-
run: echo "안정 버전 배포 중"
|
|
919
|
+
run: 'echo "안정 버전 배포 중"'
|
|
887
920
|
|
|
888
921
|
# 여러 변수 확인 (모두 일치해야 함)
|
|
889
922
|
- when:
|
|
890
923
|
var:
|
|
891
924
|
env: staging
|
|
892
925
|
version: "2.0.0"
|
|
893
|
-
run: echo "스테이징에 v2.0.0 배포 중"
|
|
926
|
+
run: 'echo "스테이징에 v2.0.0 배포 중"'
|
|
894
927
|
```
|
|
895
928
|
|
|
896
929
|
**동작:**
|
|
@@ -922,12 +955,12 @@ when:
|
|
|
922
955
|
# 변수가 존재하는지 확인
|
|
923
956
|
- when:
|
|
924
957
|
var: version
|
|
925
|
-
run: echo "Version: {{version}}"
|
|
958
|
+
run: 'echo "Version: {{version}}"'
|
|
926
959
|
|
|
927
960
|
# 'has' 별칭 사용
|
|
928
961
|
- when:
|
|
929
962
|
has: projectName
|
|
930
|
-
run: echo "Project: {{projectName}}"
|
|
963
|
+
run: 'echo "Project: {{projectName}}"'
|
|
931
964
|
```
|
|
932
965
|
|
|
933
966
|
**동작:**
|
|
@@ -961,7 +994,7 @@ when:
|
|
|
961
994
|
- file: ./dist
|
|
962
995
|
- var:
|
|
963
996
|
env: production
|
|
964
|
-
run: echo "프로덕션 빌드 준비 완료"
|
|
997
|
+
run: 'echo "프로덕션 빌드 준비 완료"'
|
|
965
998
|
|
|
966
999
|
- when:
|
|
967
1000
|
all:
|
|
@@ -970,7 +1003,7 @@ when:
|
|
|
970
1003
|
- var:
|
|
971
1004
|
version: "2.0.0"
|
|
972
1005
|
- file: ./dist
|
|
973
|
-
run: echo "스테이징에 v2.0.0 배포 중"
|
|
1006
|
+
run: 'echo "스테이징에 v2.0.0 배포 중"'
|
|
974
1007
|
```
|
|
975
1008
|
|
|
976
1009
|
**동작:**
|
|
@@ -1001,13 +1034,13 @@ when:
|
|
|
1001
1034
|
env: staging
|
|
1002
1035
|
- var:
|
|
1003
1036
|
env: production
|
|
1004
|
-
run: echo "서버에 배포 중"
|
|
1037
|
+
run: 'echo "서버에 배포 중"'
|
|
1005
1038
|
|
|
1006
1039
|
- when:
|
|
1007
1040
|
any:
|
|
1008
1041
|
- file: ./dist
|
|
1009
1042
|
- file: ./build
|
|
1010
|
-
run: echo "빌드 출력을 찾았습니다"
|
|
1043
|
+
run: 'echo "빌드 출력을 찾았습니다"'
|
|
1011
1044
|
```
|
|
1012
1045
|
|
|
1013
1046
|
**동작:**
|
|
@@ -1042,7 +1075,7 @@ when:
|
|
|
1042
1075
|
not:
|
|
1043
1076
|
var:
|
|
1044
1077
|
env: prod
|
|
1045
|
-
run: echo "프로덕션 환경이 아닙니다"
|
|
1078
|
+
run: 'echo "프로덕션 환경이 아닙니다"'
|
|
1046
1079
|
|
|
1047
1080
|
# 복잡한 부정
|
|
1048
1081
|
- when:
|
|
@@ -1051,7 +1084,7 @@ when:
|
|
|
1051
1084
|
- file: ./dist
|
|
1052
1085
|
- var:
|
|
1053
1086
|
env: prod
|
|
1054
|
-
run: echo "프로덕션 준비가 되지 않았습니다"
|
|
1087
|
+
run: 'echo "프로덕션 준비가 되지 않았습니다"'
|
|
1055
1088
|
```
|
|
1056
1089
|
|
|
1057
1090
|
**동작:**
|
|
@@ -1079,7 +1112,7 @@ when:
|
|
|
1079
1112
|
- not:
|
|
1080
1113
|
var:
|
|
1081
1114
|
version: "0.0.0"
|
|
1082
|
-
run: echo "배포 준비 완료"
|
|
1115
|
+
run: 'echo "배포 준비 완료"'
|
|
1083
1116
|
|
|
1084
1117
|
# 여러 수준의 중첩
|
|
1085
1118
|
- when:
|
|
@@ -1093,7 +1126,7 @@ when:
|
|
|
1093
1126
|
env: staging
|
|
1094
1127
|
- not:
|
|
1095
1128
|
file: ./test-results
|
|
1096
|
-
run: echo "조건부 배포"
|
|
1129
|
+
run: 'echo "조건부 배포"'
|
|
1097
1130
|
```
|
|
1098
1131
|
|
|
1099
1132
|
---
|
|
@@ -1104,9 +1137,9 @@ when:
|
|
|
1104
1137
|
|
|
1105
1138
|
**문법:**
|
|
1106
1139
|
```yaml
|
|
1107
|
-
run: echo "{{variableName}}"
|
|
1140
|
+
run: 'echo "{{variableName}}"'
|
|
1108
1141
|
# 또는 선택적으로 공백 사용
|
|
1109
|
-
run: echo "{{ variableName }}"
|
|
1142
|
+
run: 'echo "{{ variableName }}"'
|
|
1110
1143
|
```
|
|
1111
1144
|
|
|
1112
1145
|
**⚠️ 중요: YAML 문법 규칙**
|
|
@@ -1115,9 +1148,9 @@ run: echo "{{ variableName }}"
|
|
|
1115
1148
|
|
|
1116
1149
|
✅ **안전한 패턴:**
|
|
1117
1150
|
```yaml
|
|
1118
|
-
#
|
|
1119
|
-
- run: echo "Building {{version}}..."
|
|
1120
|
-
- run: npm run build --version={{version}}
|
|
1151
|
+
# 작은따옴표로 감싸기 (권장)
|
|
1152
|
+
- run: 'echo "Building {{version}}..."'
|
|
1153
|
+
- run: 'npm run build --version={{version}}'
|
|
1121
1154
|
|
|
1122
1155
|
# 전체 명령어를 작은따옴표로 감싸기
|
|
1123
1156
|
- run: 'echo "Selected: {{mode}}"'
|
|
@@ -1138,7 +1171,7 @@ run: echo "{{ variableName }}"
|
|
|
1138
1171
|
- prompt:
|
|
1139
1172
|
message: "프로젝트 이름을 입력하세요:"
|
|
1140
1173
|
as: projectName
|
|
1141
|
-
- run: echo "Building {{projectName}}..."
|
|
1174
|
+
- run: 'echo "Building {{projectName}}..."'
|
|
1142
1175
|
|
|
1143
1176
|
# 선택 변수 사용
|
|
1144
1177
|
- choose:
|
|
@@ -1147,10 +1180,10 @@ run: echo "{{ variableName }}"
|
|
|
1147
1180
|
- id: dev
|
|
1148
1181
|
label: "개발"
|
|
1149
1182
|
as: env
|
|
1150
|
-
- run: echo "Deploying to {{env}}"
|
|
1183
|
+
- run: 'echo "Deploying to {{env}}"'
|
|
1151
1184
|
|
|
1152
1185
|
# 여러 변수
|
|
1153
|
-
- run: echo "Building {{projectName}} version {{version}} for {{env}}"
|
|
1186
|
+
- run: 'echo "Building {{projectName}} version {{version}} for {{env}}"'
|
|
1154
1187
|
```
|
|
1155
1188
|
|
|
1156
1189
|
**동작:**
|
|
@@ -1170,7 +1203,7 @@ baseDir: ./
|
|
|
1170
1203
|
|
|
1171
1204
|
steps:
|
|
1172
1205
|
# 1. 간단한 명령
|
|
1173
|
-
- run: echo "워크플로우 시작 중..."
|
|
1206
|
+
- run: 'echo "워크플로우 시작 중..."'
|
|
1174
1207
|
|
|
1175
1208
|
# 2. 변수 저장이 있는 사용자 선택
|
|
1176
1209
|
- choose:
|
|
@@ -1196,12 +1229,12 @@ steps:
|
|
|
1196
1229
|
- when:
|
|
1197
1230
|
var:
|
|
1198
1231
|
env: dev
|
|
1199
|
-
run: echo "개발 환경에 배포 중..."
|
|
1232
|
+
run: 'echo "개발 환경에 배포 중..."'
|
|
1200
1233
|
|
|
1201
1234
|
- when:
|
|
1202
1235
|
var:
|
|
1203
1236
|
env: staging
|
|
1204
|
-
run: echo "스테이징에 배포 중..."
|
|
1237
|
+
run: 'echo "스테이징에 배포 중..."'
|
|
1205
1238
|
|
|
1206
1239
|
# 5. 복잡한 조건 (all)
|
|
1207
1240
|
- when:
|
|
@@ -1210,22 +1243,22 @@ steps:
|
|
|
1210
1243
|
env: prod
|
|
1211
1244
|
- var: deployReason
|
|
1212
1245
|
- file: ./dist
|
|
1213
|
-
run: echo "프로덕션 배포 승인됨"
|
|
1246
|
+
run: 'echo "프로덕션 배포 승인됨"'
|
|
1214
1247
|
|
|
1215
1248
|
# 6. 병렬 실행
|
|
1216
1249
|
- parallel:
|
|
1217
|
-
- run: npm run test:unit
|
|
1218
|
-
- run: npm run test:integration
|
|
1219
|
-
- run: npm run lint
|
|
1250
|
+
- run: 'npm run test:unit'
|
|
1251
|
+
- run: 'npm run test:integration'
|
|
1252
|
+
- run: 'npm run lint'
|
|
1220
1253
|
|
|
1221
1254
|
# 6.5. 스텝별 쉘 오버라이드
|
|
1222
|
-
- run: echo "zsh로 실행"
|
|
1255
|
+
- run: 'echo "zsh로 실행"'
|
|
1223
1256
|
shell: [zsh, -c] # 이 스텝만 워크플로우 쉘 오버라이드
|
|
1224
1257
|
|
|
1225
1258
|
# 7. 파일 존재 확인
|
|
1226
1259
|
- when:
|
|
1227
1260
|
file: ./test-results
|
|
1228
|
-
run: echo "테스트 완료"
|
|
1261
|
+
run: 'echo "테스트 완료"'
|
|
1229
1262
|
|
|
1230
1263
|
# 8. 결합된 조건 (any)
|
|
1231
1264
|
- when:
|
|
@@ -1234,7 +1267,7 @@ steps:
|
|
|
1234
1267
|
env: staging
|
|
1235
1268
|
- var:
|
|
1236
1269
|
env: prod
|
|
1237
|
-
run: echo "서버에 배포 중..."
|
|
1270
|
+
run: 'echo "서버에 배포 중..."'
|
|
1238
1271
|
|
|
1239
1272
|
# 9. 부정
|
|
1240
1273
|
- when:
|
|
@@ -1244,7 +1277,7 @@ steps:
|
|
|
1244
1277
|
message: "빌드 출력을 찾을 수 없습니다"
|
|
1245
1278
|
|
|
1246
1279
|
# 10. 변수 치환
|
|
1247
|
-
- run: echo "Deploying {{projectName}} version {{version}} to {{env}}"
|
|
1280
|
+
- run: 'echo "Deploying {{projectName}} version {{version}} to {{env}}"'
|
|
1248
1281
|
```
|
|
1249
1282
|
|
|
1250
1283
|
---
|
|
@@ -1430,9 +1463,11 @@ schedules:
|
|
|
1430
1463
|
|
|
1431
1464
|
```bash
|
|
1432
1465
|
tp schedule add schedules.yaml
|
|
1466
|
+
# 또는 경로 없이: 가장 가까운 tp/schedules/에서 파일 선택
|
|
1467
|
+
tp schedule add
|
|
1433
1468
|
```
|
|
1434
1469
|
|
|
1435
|
-
각 스케줄에 대해 별칭을 확인하거나 변경할 수
|
|
1470
|
+
각 스케줄에 대해 별칭을 확인하거나 변경할 수 있습니다. 추가 후에는 추가된 스케줄이 `tp schedule list`와 같은 카드 형식(크론, 언제 실행되는지 설명, 다음 실행, 활성 여부)으로 표시됩니다.
|
|
1436
1471
|
|
|
1437
1472
|
**Cron 표현식 형식:**
|
|
1438
1473
|
|
|
@@ -1465,19 +1500,21 @@ tp schedule add schedules.yaml
|
|
|
1465
1500
|
### 스케줄 관리
|
|
1466
1501
|
|
|
1467
1502
|
```bash
|
|
1468
|
-
# 모든 스케줄 목록 보기
|
|
1503
|
+
# 모든 스케줄 목록 보기 (카드 레이아웃: cron, "언제" 설명, 다음 실행 등)
|
|
1469
1504
|
tp schedule list
|
|
1470
1505
|
|
|
1471
|
-
# 스케줄 삭제
|
|
1506
|
+
# 스케줄 삭제 (삭제 후 삭제된 스케줄을 동일한 카드 형식으로 표시)
|
|
1472
1507
|
tp schedule remove
|
|
1473
1508
|
|
|
1474
1509
|
# 모든 스케줄 삭제
|
|
1475
1510
|
tp schedule remove-all
|
|
1476
1511
|
|
|
1477
|
-
# 스케줄 활성화/비활성화
|
|
1512
|
+
# 스케줄 활성화/비활성화 (토글 후 ENABLED/DISABLED를 굵게·색상으로 강조하고 스케줄 카드 표시)
|
|
1478
1513
|
tp schedule toggle
|
|
1479
1514
|
```
|
|
1480
1515
|
|
|
1516
|
+
**통일된 스케줄 UI:** list, add, toggle, remove 모두 동일한 스케줄 카드 레이아웃을 사용합니다. 각 카드에는 크론 표현식, 언제 실행되는지 사람이 읽기 쉬운 설명(예: "매분"), 타임존, 워크플로우 경로, 프로필(설정 시), 마지막 실행, 다음 실행이 표시됩니다. `tp schedule toggle` 후에는 새 상태(ENABLED는 초록, DISABLED는 회색)가 강조되어 한눈에 구분할 수 있습니다.
|
|
1517
|
+
|
|
1481
1518
|
### 스케줄러 실행
|
|
1482
1519
|
|
|
1483
1520
|
예약된 시간에 워크플로우를 실행하려면 스케줄러를 시작하세요. 두 가지 모드로 실행할 수 있습니다:
|
|
@@ -1532,6 +1569,7 @@ tp schedule status -n # 한 번만 표시 후 종료 (갱신 없음)
|
|
|
1532
1569
|
|
|
1533
1570
|
완전한 프로젝트 예제는 `examples/` 디렉토리를 확인하세요:
|
|
1534
1571
|
|
|
1572
|
+
- **`tp setup`** – 프로젝트 루트에서 `tp setup`을 실행하면 `tp/workflows/`, `tp/schedules/`와 예시 워크플로우 2개(choose, when, profiles, prompt), 예시 스케줄 파일 2개(프로필 사용 포함)가 생성됩니다. 모든 단계는 `echo`로 되어 있어 안전하게 실행한 뒤 실제 명령으로 바꿀 수 있습니다.
|
|
1535
1573
|
- **`monorepo-example/`** - 여러 프로젝트가 있는 모노레포 워크플로우
|
|
1536
1574
|
- **`simple-project/`** - 간단한 단일 프로젝트 워크플로우
|
|
1537
1575
|
- **`react-app/`** - React 애플리케이션 빌드 및 배포
|