task-pipeliner 0.1.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 (161) hide show
  1. package/LICENSE +21 -0
  2. package/README.ko.md +1034 -0
  3. package/README.md +1031 -0
  4. package/dist/cli/index.d.ts +19 -0
  5. package/dist/cli/index.d.ts.map +1 -0
  6. package/dist/cli/index.js +147 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/cli/prompts.d.ts +48 -0
  9. package/dist/cli/prompts.d.ts.map +1 -0
  10. package/dist/cli/prompts.js +75 -0
  11. package/dist/cli/prompts.js.map +1 -0
  12. package/dist/cli/ui.d.ts +39 -0
  13. package/dist/cli/ui.d.ts.map +1 -0
  14. package/dist/cli/ui.js +84 -0
  15. package/dist/cli/ui.js.map +1 -0
  16. package/dist/core/__tests__/actual-execution.test.d.ts +2 -0
  17. package/dist/core/__tests__/actual-execution.test.d.ts.map +1 -0
  18. package/dist/core/__tests__/actual-execution.test.js +140 -0
  19. package/dist/core/__tests__/actual-execution.test.js.map +1 -0
  20. package/dist/core/__tests__/base-dir.test.d.ts +2 -0
  21. package/dist/core/__tests__/base-dir.test.d.ts.map +1 -0
  22. package/dist/core/__tests__/base-dir.test.js +146 -0
  23. package/dist/core/__tests__/base-dir.test.js.map +1 -0
  24. package/dist/core/__tests__/built-code-execution.test.d.ts +2 -0
  25. package/dist/core/__tests__/built-code-execution.test.d.ts.map +1 -0
  26. package/dist/core/__tests__/built-code-execution.test.js +48 -0
  27. package/dist/core/__tests__/built-code-execution.test.js.map +1 -0
  28. package/dist/core/__tests__/choose-as-var-condition.test.d.ts +2 -0
  29. package/dist/core/__tests__/choose-as-var-condition.test.d.ts.map +1 -0
  30. package/dist/core/__tests__/choose-as-var-condition.test.js +308 -0
  31. package/dist/core/__tests__/choose-as-var-condition.test.js.map +1 -0
  32. package/dist/core/__tests__/cli-integration.test.d.ts +2 -0
  33. package/dist/core/__tests__/cli-integration.test.d.ts.map +1 -0
  34. package/dist/core/__tests__/cli-integration.test.js +83 -0
  35. package/dist/core/__tests__/cli-integration.test.js.map +1 -0
  36. package/dist/core/__tests__/comprehensive-basic-yaml.test.d.ts +2 -0
  37. package/dist/core/__tests__/comprehensive-basic-yaml.test.d.ts.map +1 -0
  38. package/dist/core/__tests__/comprehensive-basic-yaml.test.js +111 -0
  39. package/dist/core/__tests__/comprehensive-basic-yaml.test.js.map +1 -0
  40. package/dist/core/__tests__/condition-evaluator.test.d.ts +2 -0
  41. package/dist/core/__tests__/condition-evaluator.test.d.ts.map +1 -0
  42. package/dist/core/__tests__/condition-evaluator.test.js +170 -0
  43. package/dist/core/__tests__/condition-evaluator.test.js.map +1 -0
  44. package/dist/core/__tests__/debug-basic-yaml.test.d.ts +2 -0
  45. package/dist/core/__tests__/debug-basic-yaml.test.d.ts.map +1 -0
  46. package/dist/core/__tests__/debug-basic-yaml.test.js +128 -0
  47. package/dist/core/__tests__/debug-basic-yaml.test.js.map +1 -0
  48. package/dist/core/__tests__/example-files.test.d.ts +2 -0
  49. package/dist/core/__tests__/example-files.test.d.ts.map +1 -0
  50. package/dist/core/__tests__/example-files.test.js +200 -0
  51. package/dist/core/__tests__/example-files.test.js.map +1 -0
  52. package/dist/core/__tests__/executor-choice-integration.test.d.ts +2 -0
  53. package/dist/core/__tests__/executor-choice-integration.test.d.ts.map +1 -0
  54. package/dist/core/__tests__/executor-choice-integration.test.js +171 -0
  55. package/dist/core/__tests__/executor-choice-integration.test.js.map +1 -0
  56. package/dist/core/__tests__/executor-choice.test.d.ts +2 -0
  57. package/dist/core/__tests__/executor-choice.test.d.ts.map +1 -0
  58. package/dist/core/__tests__/executor-choice.test.js +174 -0
  59. package/dist/core/__tests__/executor-choice.test.js.map +1 -0
  60. package/dist/core/__tests__/executor-parallel.test.d.ts +2 -0
  61. package/dist/core/__tests__/executor-parallel.test.d.ts.map +1 -0
  62. package/dist/core/__tests__/executor-parallel.test.js +136 -0
  63. package/dist/core/__tests__/executor-parallel.test.js.map +1 -0
  64. package/dist/core/__tests__/executor-prompt.test.d.ts +2 -0
  65. package/dist/core/__tests__/executor-prompt.test.d.ts.map +1 -0
  66. package/dist/core/__tests__/executor-prompt.test.js +149 -0
  67. package/dist/core/__tests__/executor-prompt.test.js.map +1 -0
  68. package/dist/core/__tests__/executor-real-scenario.test.d.ts +2 -0
  69. package/dist/core/__tests__/executor-real-scenario.test.d.ts.map +1 -0
  70. package/dist/core/__tests__/executor-real-scenario.test.js +169 -0
  71. package/dist/core/__tests__/executor-real-scenario.test.js.map +1 -0
  72. package/dist/core/__tests__/file-condition.test.d.ts +2 -0
  73. package/dist/core/__tests__/file-condition.test.d.ts.map +1 -0
  74. package/dist/core/__tests__/file-condition.test.js +182 -0
  75. package/dist/core/__tests__/file-condition.test.js.map +1 -0
  76. package/dist/core/__tests__/final-verification.test.d.ts +2 -0
  77. package/dist/core/__tests__/final-verification.test.d.ts.map +1 -0
  78. package/dist/core/__tests__/final-verification.test.js +59 -0
  79. package/dist/core/__tests__/final-verification.test.js.map +1 -0
  80. package/dist/core/__tests__/parallel-when-condition.test.d.ts +2 -0
  81. package/dist/core/__tests__/parallel-when-condition.test.d.ts.map +1 -0
  82. package/dist/core/__tests__/parallel-when-condition.test.js +155 -0
  83. package/dist/core/__tests__/parallel-when-condition.test.js.map +1 -0
  84. package/dist/core/__tests__/parser.test.d.ts +2 -0
  85. package/dist/core/__tests__/parser.test.d.ts.map +1 -0
  86. package/dist/core/__tests__/parser.test.js +94 -0
  87. package/dist/core/__tests__/parser.test.js.map +1 -0
  88. package/dist/core/__tests__/real-inquirer-test.test.d.ts +2 -0
  89. package/dist/core/__tests__/real-inquirer-test.test.d.ts.map +1 -0
  90. package/dist/core/__tests__/real-inquirer-test.test.js +20 -0
  91. package/dist/core/__tests__/real-inquirer-test.test.js.map +1 -0
  92. package/dist/core/__tests__/reproduce-bug.test.d.ts +2 -0
  93. package/dist/core/__tests__/reproduce-bug.test.d.ts.map +1 -0
  94. package/dist/core/__tests__/reproduce-bug.test.js +84 -0
  95. package/dist/core/__tests__/reproduce-bug.test.js.map +1 -0
  96. package/dist/core/__tests__/timeout-retry.test.d.ts +2 -0
  97. package/dist/core/__tests__/timeout-retry.test.d.ts.map +1 -0
  98. package/dist/core/__tests__/timeout-retry.test.js +184 -0
  99. package/dist/core/__tests__/timeout-retry.test.js.map +1 -0
  100. package/dist/core/__tests__/workflow-validation.test.d.ts +2 -0
  101. package/dist/core/__tests__/workflow-validation.test.d.ts.map +1 -0
  102. package/dist/core/__tests__/workflow-validation.test.js +120 -0
  103. package/dist/core/__tests__/workflow-validation.test.js.map +1 -0
  104. package/dist/core/__tests__/workspace.test.d.ts +2 -0
  105. package/dist/core/__tests__/workspace.test.d.ts.map +1 -0
  106. package/dist/core/__tests__/workspace.test.js +29 -0
  107. package/dist/core/__tests__/workspace.test.js.map +1 -0
  108. package/dist/core/__tests__/yaml-integration.test.d.ts +2 -0
  109. package/dist/core/__tests__/yaml-integration.test.d.ts.map +1 -0
  110. package/dist/core/__tests__/yaml-integration.test.js +114 -0
  111. package/dist/core/__tests__/yaml-integration.test.js.map +1 -0
  112. package/dist/core/__tests__/yaml-scenarios.test.d.ts +2 -0
  113. package/dist/core/__tests__/yaml-scenarios.test.d.ts.map +1 -0
  114. package/dist/core/__tests__/yaml-scenarios.test.js +199 -0
  115. package/dist/core/__tests__/yaml-scenarios.test.js.map +1 -0
  116. package/dist/core/condition-evaluator.d.ts +44 -0
  117. package/dist/core/condition-evaluator.d.ts.map +1 -0
  118. package/dist/core/condition-evaluator.js +121 -0
  119. package/dist/core/condition-evaluator.js.map +1 -0
  120. package/dist/core/executor.d.ts +172 -0
  121. package/dist/core/executor.d.ts.map +1 -0
  122. package/dist/core/executor.js +579 -0
  123. package/dist/core/executor.js.map +1 -0
  124. package/dist/core/parser.d.ts +41 -0
  125. package/dist/core/parser.d.ts.map +1 -0
  126. package/dist/core/parser.js +202 -0
  127. package/dist/core/parser.js.map +1 -0
  128. package/dist/core/rust-task-runner.d.ts +14 -0
  129. package/dist/core/rust-task-runner.d.ts.map +1 -0
  130. package/dist/core/rust-task-runner.js +34 -0
  131. package/dist/core/rust-task-runner.js.map +1 -0
  132. package/dist/core/task-runner.d.ts +63 -0
  133. package/dist/core/task-runner.d.ts.map +1 -0
  134. package/dist/core/task-runner.js +252 -0
  135. package/dist/core/task-runner.js.map +1 -0
  136. package/dist/core/template.d.ts +11 -0
  137. package/dist/core/template.d.ts.map +1 -0
  138. package/dist/core/template.js +36 -0
  139. package/dist/core/template.js.map +1 -0
  140. package/dist/core/workflow-schema.d.ts +31 -0
  141. package/dist/core/workflow-schema.d.ts.map +1 -0
  142. package/dist/core/workflow-schema.js +125 -0
  143. package/dist/core/workflow-schema.js.map +1 -0
  144. package/dist/core/workspace.d.ts +90 -0
  145. package/dist/core/workspace.d.ts.map +1 -0
  146. package/dist/core/workspace.js +143 -0
  147. package/dist/core/workspace.js.map +1 -0
  148. package/dist/index.d.ts +10 -0
  149. package/dist/index.d.ts.map +1 -0
  150. package/dist/index.js +10 -0
  151. package/dist/index.js.map +1 -0
  152. package/dist/task-pipeliner-rs.node +0 -0
  153. package/dist/types/condition.d.ts +62 -0
  154. package/dist/types/condition.d.ts.map +1 -0
  155. package/dist/types/condition.js +6 -0
  156. package/dist/types/condition.js.map +1 -0
  157. package/dist/types/workflow.d.ts +69 -0
  158. package/dist/types/workflow.d.ts.map +1 -0
  159. package/dist/types/workflow.js +2 -0
  160. package/dist/types/workflow.js.map +1 -0
  161. package/package.json +67 -0
@@ -0,0 +1,84 @@
1
+ import { readFileSync } from 'fs';
2
+ import { describe, expect, it, vi } from 'vitest';
3
+ import { parse } from 'yaml';
4
+ import { Executor } from '../executor.js';
5
+ // Bug reproduction test: same environment as actual execution
6
+ describe('BUG REPRODUCTION: Choice condition not working', () => {
7
+ it('REPRODUCE: Execute basic.yaml and verify staging step runs', async () => {
8
+ const content = readFileSync('examples/yaml-examples/basic.yaml', 'utf-8');
9
+ const workflow = parse(content);
10
+ const executor = new Executor();
11
+ const executed = [];
12
+ // Use actual taskRunner
13
+ const taskRunner = executor.taskRunner;
14
+ const originalRun = taskRunner.run.bind(taskRunner);
15
+ taskRunner.run = vi.fn().mockImplementation(async (cmd) => {
16
+ executed.push(cmd);
17
+ console.log(`[EXEC] ${cmd}`);
18
+ return await originalRun(cmd);
19
+ });
20
+ // Use actual choicePrompt (mocked)
21
+ const choicePrompt = executor.choicePrompt;
22
+ choicePrompt.prompt = vi.fn().mockResolvedValue({ id: 'staging', label: 'Staging' });
23
+ // Mock TextPrompt (prevent timeout)
24
+ const textPrompt = executor.textPrompt;
25
+ textPrompt.prompt = vi.fn().mockResolvedValue('1.0.0');
26
+ process.env.CI = 'false';
27
+ try {
28
+ // Execute
29
+ await executor.execute(workflow);
30
+ // Verify
31
+ console.log('\n=== EXECUTION RESULT ===');
32
+ console.log('Executed:', executed);
33
+ console.log('Workspace choices:', Array.from(executor.workspace.state.choices.entries()));
34
+ // Required: staging step must execute
35
+ expect(executed).toContain('echo "Deploying to staging..."');
36
+ expect(executed).not.toContain('echo "Deploying to production..."');
37
+ // Verify workspace
38
+ const workspace = executor.workspace;
39
+ expect(workspace.hasChoice('staging')).toBe(true);
40
+ expect(workspace.getChoice('staging')).toBe('staging');
41
+ if (!executed.includes('echo "Deploying to staging..."')) {
42
+ throw new Error('BUG REPRODUCED: staging step did not execute!');
43
+ }
44
+ }
45
+ finally {
46
+ delete process.env.CI;
47
+ }
48
+ });
49
+ it('DEBUG: Trace exact execution flow', async () => {
50
+ const workflow = {
51
+ steps: [
52
+ { choose: { message: 'Choose?', options: [{ id: 'staging', label: 'S' }] } },
53
+ { choose: { message: 'Choose?', options: [{ id: 'staging', label: 'S' }], as: 'env' } },
54
+ { when: { var: { env: 'staging' } }, run: 'echo "Staging"' },
55
+ ],
56
+ };
57
+ const executor = new Executor();
58
+ const executed = [];
59
+ const taskRunner = executor.taskRunner;
60
+ taskRunner.run = vi.fn().mockImplementation((cmd) => {
61
+ executed.push(cmd);
62
+ return Promise.resolve(true);
63
+ });
64
+ const choicePrompt = executor.choicePrompt;
65
+ choicePrompt.prompt = vi.fn()
66
+ .mockResolvedValueOnce({ id: 'staging', label: 'S' })
67
+ .mockResolvedValueOnce({ id: 'staging', label: 'S' });
68
+ // Mock TextPrompt (prevent timeout)
69
+ const textPrompt = executor.textPrompt;
70
+ textPrompt.prompt = vi.fn().mockResolvedValue('1.0.0');
71
+ // Workspace state before execution
72
+ const workspaceBefore = executor.workspace;
73
+ console.log('Before execution - choices:', Array.from(workspaceBefore.state.choices.entries()));
74
+ await executor.execute(workflow);
75
+ // Workspace state after execution
76
+ const workspaceAfter = executor.workspace;
77
+ console.log('After execution - choices:', Array.from(workspaceAfter.state.choices.entries()));
78
+ console.log('Executed commands:', executed);
79
+ // Required verification
80
+ expect(workspaceAfter.hasChoice('staging')).toBe(true);
81
+ expect(executed).toContain('echo "Staging"');
82
+ });
83
+ });
84
+ //# sourceMappingURL=reproduce-bug.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reproduce-bug.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/reproduce-bug.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=timeout-retry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout-retry.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/timeout-retry.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,184 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { Executor } from '../executor.js';
3
+ // Mock TaskRunner
4
+ const mockRun = vi.fn();
5
+ vi.mock('../task-runner.js', () => {
6
+ return {
7
+ TaskRunner: vi.fn().mockImplementation(() => {
8
+ return {
9
+ run: mockRun,
10
+ };
11
+ }),
12
+ };
13
+ });
14
+ describe('Timeout and Retry', () => {
15
+ let executor;
16
+ beforeEach(() => {
17
+ vi.clearAllMocks();
18
+ executor = new Executor();
19
+ });
20
+ describe('Timeout', () => {
21
+ it('should pass timeout to TaskRunner', async () => {
22
+ mockRun.mockResolvedValueOnce(true);
23
+ const workflow = {
24
+ steps: [
25
+ {
26
+ run: 'echo "test"',
27
+ timeout: 30, // 30 seconds
28
+ },
29
+ ],
30
+ };
31
+ await executor.execute(workflow);
32
+ expect(mockRun).toHaveBeenCalledWith('echo "test"', expect.any(Number), 'echo "test"', undefined, false, false, undefined, undefined, undefined, 30 // timeout should be passed
33
+ );
34
+ });
35
+ it('should handle timeout when command exceeds limit', async () => {
36
+ // Simulate timeout by returning false
37
+ mockRun.mockResolvedValueOnce(false);
38
+ const workflow = {
39
+ steps: [
40
+ {
41
+ run: 'sleep 100',
42
+ timeout: 1, // 1 second timeout
43
+ },
44
+ ],
45
+ };
46
+ // Executor throws error on failure, which is expected
47
+ await expect(executor.execute(workflow)).rejects.toThrow();
48
+ expect(mockRun).toHaveBeenCalledWith('sleep 100', expect.any(Number), 'sleep 100', undefined, false, false, undefined, undefined, undefined, 1);
49
+ });
50
+ it('should work without timeout (undefined)', async () => {
51
+ mockRun.mockResolvedValueOnce(true);
52
+ const workflow = {
53
+ steps: [
54
+ {
55
+ run: 'echo "test"',
56
+ // no timeout specified
57
+ },
58
+ ],
59
+ };
60
+ await executor.execute(workflow);
61
+ expect(mockRun).toHaveBeenCalledWith('echo "test"', expect.any(Number), 'echo "test"', undefined, false, false, undefined, undefined, undefined, undefined // timeout should be undefined
62
+ );
63
+ });
64
+ });
65
+ describe('Retry', () => {
66
+ it('should retry on failure', async () => {
67
+ // First attempt fails, second succeeds
68
+ mockRun.mockResolvedValueOnce(false);
69
+ mockRun.mockResolvedValueOnce(true);
70
+ const workflow = {
71
+ steps: [
72
+ {
73
+ run: 'echo "test"',
74
+ retry: 1, // Retry once
75
+ },
76
+ ],
77
+ };
78
+ await executor.execute(workflow);
79
+ // Should be called twice (initial + 1 retry)
80
+ expect(mockRun).toHaveBeenCalledTimes(2);
81
+ });
82
+ it('should retry multiple times', async () => {
83
+ // First two attempts fail, third succeeds
84
+ mockRun.mockResolvedValueOnce(false);
85
+ mockRun.mockResolvedValueOnce(false);
86
+ mockRun.mockResolvedValueOnce(true);
87
+ const workflow = {
88
+ steps: [
89
+ {
90
+ run: 'echo "test"',
91
+ retry: 2, // Retry twice
92
+ },
93
+ ],
94
+ };
95
+ await executor.execute(workflow);
96
+ // Should be called 3 times (initial + 2 retries)
97
+ expect(mockRun).toHaveBeenCalledTimes(3);
98
+ });
99
+ it('should stop retrying after success', async () => {
100
+ // First attempt succeeds
101
+ mockRun.mockResolvedValueOnce(true);
102
+ const workflow = {
103
+ steps: [
104
+ {
105
+ run: 'echo "test"',
106
+ retry: 5, // Even though retry is 5, should stop after success
107
+ },
108
+ ],
109
+ };
110
+ await executor.execute(workflow);
111
+ // Should be called only once (success on first try)
112
+ expect(mockRun).toHaveBeenCalledTimes(1);
113
+ });
114
+ it('should stop after max retries even if still failing', async () => {
115
+ // All attempts fail
116
+ mockRun.mockResolvedValue(false);
117
+ const workflow = {
118
+ steps: [
119
+ {
120
+ run: 'echo "test"',
121
+ retry: 2, // Retry twice
122
+ },
123
+ ],
124
+ };
125
+ // Executor throws error on failure after all retries, which is expected
126
+ await expect(executor.execute(workflow)).rejects.toThrow();
127
+ // Should be called 3 times (initial + 2 retries), then stop
128
+ expect(mockRun).toHaveBeenCalledTimes(3);
129
+ });
130
+ it('should not retry if retry is 0', async () => {
131
+ mockRun.mockResolvedValueOnce(false);
132
+ const workflow = {
133
+ steps: [
134
+ {
135
+ run: 'echo "test"',
136
+ retry: 0, // No retry
137
+ },
138
+ ],
139
+ };
140
+ // Executor throws error on failure, which is expected
141
+ await expect(executor.execute(workflow)).rejects.toThrow();
142
+ // Should be called only once
143
+ expect(mockRun).toHaveBeenCalledTimes(1);
144
+ });
145
+ it('should not retry if retry is not specified', async () => {
146
+ mockRun.mockResolvedValueOnce(false);
147
+ const workflow = {
148
+ steps: [
149
+ {
150
+ run: 'echo "test"',
151
+ // retry not specified
152
+ },
153
+ ],
154
+ };
155
+ // Executor throws error on failure, which is expected
156
+ await expect(executor.execute(workflow)).rejects.toThrow();
157
+ // Should be called only once (default: no retry)
158
+ expect(mockRun).toHaveBeenCalledTimes(1);
159
+ });
160
+ });
161
+ describe('Timeout and Retry Combined', () => {
162
+ it('should support both timeout and retry', async () => {
163
+ mockRun.mockResolvedValueOnce(false);
164
+ mockRun.mockResolvedValueOnce(true);
165
+ const workflow = {
166
+ steps: [
167
+ {
168
+ run: 'echo "test"',
169
+ timeout: 30,
170
+ retry: 1,
171
+ },
172
+ ],
173
+ };
174
+ await executor.execute(workflow);
175
+ // Both timeout and retry should be passed
176
+ expect(mockRun).toHaveBeenCalledTimes(2);
177
+ expect(mockRun).toHaveBeenNthCalledWith(1, 'echo "test"', expect.any(Number), 'echo "test"', undefined, false, false, undefined, undefined, undefined, 30 // timeout
178
+ );
179
+ expect(mockRun).toHaveBeenNthCalledWith(2, 'echo "test"', expect.any(Number), 'echo "test"', undefined, false, false, undefined, undefined, undefined, 30 // timeout (same for retry)
180
+ );
181
+ });
182
+ });
183
+ });
184
+ //# sourceMappingURL=timeout-retry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout-retry.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/timeout-retry.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workflow-validation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-validation.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/workflow-validation.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,120 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { YAMLParser, JSONParser } from '../parser.js';
3
+ describe('Workflow Validation', () => {
4
+ describe('YAMLParser', () => {
5
+ it('should validate correct workflow', () => {
6
+ const parser = new YAMLParser();
7
+ const yaml = `
8
+ name: test
9
+ steps:
10
+ - run: echo "hello"
11
+ `;
12
+ const workflow = parser.parse(yaml);
13
+ expect(workflow.name).toBe('test');
14
+ expect(workflow.steps).toHaveLength(1);
15
+ });
16
+ it('should reject workflow with invalid step', () => {
17
+ const parser = new YAMLParser();
18
+ const yaml = `
19
+ name: test
20
+ steps:
21
+ - invalid_step: "this should fail"
22
+ `;
23
+ expect(() => parser.parse(yaml)).toThrow('Invalid workflow structure');
24
+ });
25
+ it('should reject workflow without steps', () => {
26
+ const parser = new YAMLParser();
27
+ const yaml = `
28
+ name: test
29
+ `;
30
+ expect(() => parser.parse(yaml)).toThrow('Invalid workflow structure');
31
+ });
32
+ it('should reject workflow with empty steps array', () => {
33
+ const parser = new YAMLParser();
34
+ const yaml = `
35
+ name: test
36
+ steps: []
37
+ `;
38
+ expect(() => parser.parse(yaml)).toThrow('Invalid workflow structure');
39
+ });
40
+ it('should validate workflow with all step types', () => {
41
+ const parser = new YAMLParser();
42
+ const yaml = `
43
+ name: test
44
+ steps:
45
+ - run: echo "hello"
46
+ - choose:
47
+ message: "Select"
48
+ options:
49
+ - id: opt1
50
+ label: "Option 1"
51
+ as: choice
52
+ - prompt:
53
+ message: "Enter name"
54
+ as: name
55
+ - parallel:
56
+ - run: echo "task1"
57
+ - run: echo "task2"
58
+ - fail:
59
+ message: "Error"
60
+ `;
61
+ const workflow = parser.parse(yaml);
62
+ expect(workflow.steps).toHaveLength(5);
63
+ });
64
+ });
65
+ describe('JSONParser', () => {
66
+ it('should validate correct workflow', () => {
67
+ const parser = new JSONParser();
68
+ const json = JSON.stringify({
69
+ name: 'test',
70
+ steps: [
71
+ { run: 'echo "hello"' }
72
+ ]
73
+ });
74
+ const workflow = parser.parse(json);
75
+ expect(workflow.name).toBe('test');
76
+ expect(workflow.steps).toHaveLength(1);
77
+ });
78
+ it('should reject workflow with invalid step', () => {
79
+ const parser = new JSONParser();
80
+ const json = JSON.stringify({
81
+ name: 'test',
82
+ steps: [
83
+ { invalid_step: 'this should fail' }
84
+ ]
85
+ });
86
+ expect(() => parser.parse(json)).toThrow('Invalid workflow structure');
87
+ });
88
+ it('should reject workflow without steps', () => {
89
+ const parser = new JSONParser();
90
+ const json = JSON.stringify({
91
+ name: 'test'
92
+ });
93
+ expect(() => parser.parse(json)).toThrow('Invalid workflow structure');
94
+ });
95
+ it('should reject invalid JSON format', () => {
96
+ const parser = new JSONParser();
97
+ const json = '{ invalid json }';
98
+ expect(() => parser.parse(json)).toThrow('Invalid JSON format');
99
+ });
100
+ it('should validate workflow with conditions', () => {
101
+ const parser = new JSONParser();
102
+ const json = JSON.stringify({
103
+ steps: [
104
+ {
105
+ run: 'echo "hello"',
106
+ when: {
107
+ var: {
108
+ env: 'dev'
109
+ }
110
+ }
111
+ }
112
+ ]
113
+ });
114
+ const workflow = parser.parse(json);
115
+ expect(workflow.steps).toHaveLength(1);
116
+ expect(workflow.steps[0]).toHaveProperty('when');
117
+ });
118
+ });
119
+ });
120
+ //# sourceMappingURL=workflow-validation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-validation.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/workflow-validation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workspace.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/workspace.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { Workspace } from '../workspace.js';
3
+ describe('Workspace', () => {
4
+ it('should set and get facts', () => {
5
+ const workspace = new Workspace();
6
+ workspace.setFact('test', true);
7
+ expect(workspace.hasFact('test')).toBe(true);
8
+ expect(workspace.getFact('test')).toBe(true);
9
+ });
10
+ it('should set and get choices', () => {
11
+ const workspace = new Workspace();
12
+ workspace.setChoice('staging', 'staging');
13
+ expect(workspace.hasChoice('staging')).toBe(true);
14
+ expect(workspace.getChoice('staging')).toBe('staging');
15
+ });
16
+ it('should return false for non-existent choice', () => {
17
+ const workspace = new Workspace();
18
+ expect(workspace.hasChoice('nonexistent')).toBe(false);
19
+ });
20
+ it('should clone workspace state', () => {
21
+ const workspace = new Workspace();
22
+ workspace.setFact('test', true);
23
+ workspace.setChoice('staging', 'staging');
24
+ const cloned = workspace.clone();
25
+ expect(cloned.hasFact('test')).toBe(true);
26
+ expect(cloned.hasChoice('staging')).toBe(true);
27
+ });
28
+ });
29
+ //# sourceMappingURL=workspace.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/workspace.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QAClC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QAClC,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QAClC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChC,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAE1C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=yaml-integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-integration.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/yaml-integration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,114 @@
1
+ import { readFileSync } from 'fs';
2
+ import { resolve, dirname } from 'path';
3
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
4
+ import { parse } from 'yaml';
5
+ import { Executor } from '../executor.js';
6
+ // Mock TaskRunner
7
+ const mockRun = vi.fn().mockResolvedValue(true);
8
+ vi.mock('../task-runner.js', () => {
9
+ return {
10
+ TaskRunner: vi.fn().mockImplementation(() => {
11
+ return {
12
+ run: mockRun,
13
+ };
14
+ }),
15
+ };
16
+ });
17
+ // Mock ChoicePrompt, TextPrompt
18
+ const mockChoicePrompt = vi.fn();
19
+ const mockTextPrompt = vi.fn();
20
+ vi.mock('../../cli/prompts.js', () => {
21
+ return {
22
+ ChoicePrompt: vi.fn().mockImplementation(() => {
23
+ return {
24
+ prompt: mockChoicePrompt,
25
+ };
26
+ }),
27
+ TextPrompt: vi.fn().mockImplementation(() => {
28
+ return {
29
+ prompt: mockTextPrompt,
30
+ };
31
+ }),
32
+ };
33
+ });
34
+ describe('YAML Integration Tests', () => {
35
+ let executor;
36
+ beforeEach(() => {
37
+ vi.clearAllMocks();
38
+ executor = new Executor();
39
+ });
40
+ it('should execute basic.yaml workflow correctly - staging choice', async () => {
41
+ const yamlContent = readFileSync('examples/yaml-examples/basic.yaml', 'utf-8');
42
+ const workflow = parse(yamlContent);
43
+ // Mock staging selection
44
+ mockChoicePrompt.mockResolvedValueOnce({ id: 'staging', label: 'Staging' });
45
+ await executor.execute(workflow);
46
+ // All steps should be executed
47
+ const calls = mockRun.mock.calls.map(call => call[0]);
48
+ expect(calls).toContain('echo "Building..."');
49
+ // Staging step should execute after staging is selected
50
+ expect(calls).toContain('echo "Deploying to staging..."');
51
+ // Prod step should not be executed
52
+ expect(calls).not.toContain('echo "Deploying to production..."');
53
+ });
54
+ it('should execute basic.yaml workflow correctly - prod choice', async () => {
55
+ const yamlContent = readFileSync('examples/yaml-examples/basic.yaml', 'utf-8');
56
+ const workflow = parse(yamlContent);
57
+ // Mock prod selection
58
+ mockChoicePrompt.mockResolvedValueOnce({ id: 'prod', label: 'Production' });
59
+ await executor.execute(workflow);
60
+ // Prod step should execute after prod is selected
61
+ const calls = mockRun.mock.calls.map(call => call[0]);
62
+ expect(calls).toContain('echo "Deploying to production..."');
63
+ // Staging step should not be executed
64
+ expect(calls).not.toContain('echo "Deploying to staging..."');
65
+ });
66
+ it('should execute parallel.yaml workflow correctly', async () => {
67
+ const yamlContent = readFileSync('examples/yaml-examples/parallel.yaml', 'utf-8');
68
+ const workflow = parse(yamlContent);
69
+ mockChoicePrompt.mockResolvedValueOnce({ id: 'blue_green', label: 'Blue-Green' });
70
+ await executor.execute(workflow);
71
+ // All parallel steps should be executed
72
+ const calls = mockRun.mock.calls.map(call => call[0]);
73
+ expect(calls).toContain('echo "Running web tests..."');
74
+ expect(calls).toContain('echo "Running API tests..."');
75
+ // Step execution based on selection
76
+ expect(calls).toContain('echo "Deploying with blue-green strategy..."');
77
+ });
78
+ it('should verify workspace state after each step', async () => {
79
+ const yamlContent = readFileSync('examples/yaml-examples/basic.yaml', 'utf-8');
80
+ const workflow = parse(yamlContent);
81
+ mockChoicePrompt.mockResolvedValueOnce({ id: 'staging', label: 'Staging' });
82
+ await executor.execute(workflow);
83
+ // Check workspace state
84
+ const workspace = executor.workspace;
85
+ // Staging choice should be set
86
+ expect(workspace.hasChoice('staging')).toBe(true);
87
+ expect(workspace.getChoice('staging')).toBe('staging');
88
+ // Prod choice should not be set
89
+ expect(workspace.hasChoice('prod')).toBe(false);
90
+ });
91
+ it('should execute base-dir-example.yaml with baseDir correctly', async () => {
92
+ const yamlContent = readFileSync('examples/yaml-examples/base-dir-example.yaml', 'utf-8');
93
+ const workflow = parse(yamlContent);
94
+ // Set file path for baseDir resolution
95
+ workflow._filePath = resolve(process.cwd(), 'examples/yaml-examples/base-dir-example.yaml');
96
+ await executor.execute(workflow);
97
+ // Verify commands were executed
98
+ expect(mockRun).toHaveBeenCalledTimes(2);
99
+ // Verify baseDir was resolved correctly
100
+ // baseDir is relative to YAML file directory (examples/), so ./examples resolves to examples/examples
101
+ if (!workflow._filePath) {
102
+ throw new Error('_filePath should be set');
103
+ }
104
+ const yamlDir = dirname(workflow._filePath);
105
+ const expectedBaseDir = resolve(yamlDir, 'examples');
106
+ const actualBaseDir = executor.baseDir;
107
+ expect(actualBaseDir).toBe(expectedBaseDir);
108
+ // Verify all commands used the correct cwd
109
+ mockRun.mock.calls.forEach(call => {
110
+ expect(call[8]).toBe(expectedBaseDir); // cwd is 9th parameter (index 8)
111
+ });
112
+ });
113
+ });
114
+ //# sourceMappingURL=yaml-integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-integration.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/yaml-integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=yaml-scenarios.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-scenarios.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/yaml-scenarios.test.ts"],"names":[],"mappings":""}