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.
Files changed (4) hide show
  1. package/README.ko.md +148 -110
  2. package/README.md +152 -113
  3. package/dist/index.cjs +170 -79
  4. package/package.json +1 -1
package/README.ko.md CHANGED
@@ -2,17 +2,31 @@
2
2
 
3
3
  > 조건 기반 실행과 아름다운 CLI 출력을 제공하는 강력한 워크플로우 오케스트레이션 도구
4
4
 
5
- **버전:** 0.3.3
5
+ **버전:** 0.3.5
6
6
 
7
7
  ![fox2](https://github.com/user-attachments/assets/fdf8d786-6a91-4d2d-9dc1-72be6f3ccd98)
8
8
 
9
9
  [![npm version](https://img.shields.io/npm/v/task-pipeliner)](https://www.npmjs.com/package/task-pipeliner)
10
10
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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 remove # 스케줄 삭제
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
- 나은 조직화를 위해 프로젝트에 `tp` 디렉토리를 만들고 모든 워크플로우 파일을 그곳에 배치할 수 있습니다. 파일을 지정하지 않고 `tp run`을 실행하면 task-pipeliner가 자동으로 가장 가까운 `tp` 디렉토리(현재 디렉토리부터 시작하여 상위로 탐색)를 찾아 대화형으로 워크플로우를 선택할 수 있게 해줍니다.
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
- mkdir tp
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. 해당 디렉토리의 모든 워크플로우 파일 (`.yaml`, `.yml`, `.json`)을 나열합니다
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
- 대화형 메뉴는 파일 이름과 워크플로우의 `name` (YAML/JSON 내용에서) 모두 표시하여 쉽게 식별할 수 있습니다.
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 애플리케이션 빌드 및 배포