task-pipeliner 0.2.2 → 0.2.3
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 +17 -1
- package/README.md +17 -1
- package/dist/index.cjs +18 -16
- package/dist/index.js +18 -16
- package/dist/task-pipeliner-rs.node +0 -0
- package/package.json +10 -1
- package/dist/cli/index.d.ts +0 -19
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -305
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/prompts.d.ts +0 -48
- package/dist/cli/prompts.d.ts.map +0 -1
- package/dist/cli/prompts.js +0 -75
- package/dist/cli/prompts.js.map +0 -1
- package/dist/cli/ui.d.ts +0 -39
- package/dist/cli/ui.d.ts.map +0 -1
- package/dist/cli/ui.js +0 -84
- package/dist/cli/ui.js.map +0 -1
- package/dist/core/__tests__/actual-execution.test.d.ts +0 -2
- package/dist/core/__tests__/actual-execution.test.d.ts.map +0 -1
- package/dist/core/__tests__/actual-execution.test.js +0 -147
- package/dist/core/__tests__/actual-execution.test.js.map +0 -1
- package/dist/core/__tests__/base-dir.test.d.ts +0 -2
- package/dist/core/__tests__/base-dir.test.d.ts.map +0 -1
- package/dist/core/__tests__/base-dir.test.js +0 -146
- package/dist/core/__tests__/base-dir.test.js.map +0 -1
- package/dist/core/__tests__/built-code-execution.test.d.ts +0 -2
- package/dist/core/__tests__/built-code-execution.test.d.ts.map +0 -1
- package/dist/core/__tests__/built-code-execution.test.js +0 -48
- package/dist/core/__tests__/built-code-execution.test.js.map +0 -1
- package/dist/core/__tests__/choose-as-var-condition.test.d.ts +0 -2
- package/dist/core/__tests__/choose-as-var-condition.test.d.ts.map +0 -1
- package/dist/core/__tests__/choose-as-var-condition.test.js +0 -308
- package/dist/core/__tests__/choose-as-var-condition.test.js.map +0 -1
- package/dist/core/__tests__/cli-integration.test.d.ts +0 -2
- package/dist/core/__tests__/cli-integration.test.d.ts.map +0 -1
- package/dist/core/__tests__/cli-integration.test.js +0 -83
- package/dist/core/__tests__/cli-integration.test.js.map +0 -1
- package/dist/core/__tests__/comprehensive-basic-yaml.test.d.ts +0 -2
- package/dist/core/__tests__/comprehensive-basic-yaml.test.d.ts.map +0 -1
- package/dist/core/__tests__/comprehensive-basic-yaml.test.js +0 -114
- package/dist/core/__tests__/comprehensive-basic-yaml.test.js.map +0 -1
- package/dist/core/__tests__/condition-evaluator.test.d.ts +0 -2
- package/dist/core/__tests__/condition-evaluator.test.d.ts.map +0 -1
- package/dist/core/__tests__/condition-evaluator.test.js +0 -164
- package/dist/core/__tests__/condition-evaluator.test.js.map +0 -1
- package/dist/core/__tests__/debug-basic-yaml.test.d.ts +0 -2
- package/dist/core/__tests__/debug-basic-yaml.test.d.ts.map +0 -1
- package/dist/core/__tests__/debug-basic-yaml.test.js +0 -126
- package/dist/core/__tests__/debug-basic-yaml.test.js.map +0 -1
- package/dist/core/__tests__/example-files.test.d.ts +0 -2
- package/dist/core/__tests__/example-files.test.d.ts.map +0 -1
- package/dist/core/__tests__/example-files.test.js +0 -199
- package/dist/core/__tests__/example-files.test.js.map +0 -1
- package/dist/core/__tests__/executor-choice-integration.test.d.ts +0 -2
- package/dist/core/__tests__/executor-choice-integration.test.d.ts.map +0 -1
- package/dist/core/__tests__/executor-choice-integration.test.js +0 -169
- package/dist/core/__tests__/executor-choice-integration.test.js.map +0 -1
- package/dist/core/__tests__/executor-choice.test.d.ts +0 -2
- package/dist/core/__tests__/executor-choice.test.d.ts.map +0 -1
- package/dist/core/__tests__/executor-choice.test.js +0 -170
- package/dist/core/__tests__/executor-choice.test.js.map +0 -1
- package/dist/core/__tests__/executor-parallel.test.d.ts +0 -2
- package/dist/core/__tests__/executor-parallel.test.d.ts.map +0 -1
- package/dist/core/__tests__/executor-parallel.test.js +0 -129
- package/dist/core/__tests__/executor-parallel.test.js.map +0 -1
- package/dist/core/__tests__/executor-prompt.test.d.ts +0 -2
- package/dist/core/__tests__/executor-prompt.test.d.ts.map +0 -1
- package/dist/core/__tests__/executor-prompt.test.js +0 -147
- package/dist/core/__tests__/executor-prompt.test.js.map +0 -1
- package/dist/core/__tests__/executor-real-scenario.test.d.ts +0 -2
- package/dist/core/__tests__/executor-real-scenario.test.d.ts.map +0 -1
- package/dist/core/__tests__/executor-real-scenario.test.js +0 -169
- package/dist/core/__tests__/executor-real-scenario.test.js.map +0 -1
- package/dist/core/__tests__/file-condition.test.d.ts +0 -2
- package/dist/core/__tests__/file-condition.test.d.ts.map +0 -1
- package/dist/core/__tests__/file-condition.test.js +0 -172
- package/dist/core/__tests__/file-condition.test.js.map +0 -1
- package/dist/core/__tests__/final-verification.test.d.ts +0 -2
- package/dist/core/__tests__/final-verification.test.d.ts.map +0 -1
- package/dist/core/__tests__/final-verification.test.js +0 -56
- package/dist/core/__tests__/final-verification.test.js.map +0 -1
- package/dist/core/__tests__/parallel-when-condition.test.d.ts +0 -2
- package/dist/core/__tests__/parallel-when-condition.test.d.ts.map +0 -1
- package/dist/core/__tests__/parallel-when-condition.test.js +0 -155
- package/dist/core/__tests__/parallel-when-condition.test.js.map +0 -1
- package/dist/core/__tests__/parser.test.d.ts +0 -2
- package/dist/core/__tests__/parser.test.d.ts.map +0 -1
- package/dist/core/__tests__/parser.test.js +0 -91
- package/dist/core/__tests__/parser.test.js.map +0 -1
- package/dist/core/__tests__/real-inquirer-test.test.d.ts +0 -2
- package/dist/core/__tests__/real-inquirer-test.test.d.ts.map +0 -1
- package/dist/core/__tests__/real-inquirer-test.test.js +0 -20
- package/dist/core/__tests__/real-inquirer-test.test.js.map +0 -1
- package/dist/core/__tests__/reproduce-bug.test.d.ts +0 -2
- package/dist/core/__tests__/reproduce-bug.test.d.ts.map +0 -1
- package/dist/core/__tests__/reproduce-bug.test.js +0 -85
- package/dist/core/__tests__/reproduce-bug.test.js.map +0 -1
- package/dist/core/__tests__/timeout-retry.test.d.ts +0 -2
- package/dist/core/__tests__/timeout-retry.test.d.ts.map +0 -1
- package/dist/core/__tests__/timeout-retry.test.js +0 -184
- package/dist/core/__tests__/timeout-retry.test.js.map +0 -1
- package/dist/core/__tests__/workflow-validation.test.d.ts +0 -2
- package/dist/core/__tests__/workflow-validation.test.d.ts.map +0 -1
- package/dist/core/__tests__/workflow-validation.test.js +0 -116
- package/dist/core/__tests__/workflow-validation.test.js.map +0 -1
- package/dist/core/__tests__/workspace.test.d.ts +0 -2
- package/dist/core/__tests__/workspace.test.d.ts.map +0 -1
- package/dist/core/__tests__/workspace.test.js +0 -29
- package/dist/core/__tests__/workspace.test.js.map +0 -1
- package/dist/core/__tests__/yaml-integration.test.d.ts +0 -2
- package/dist/core/__tests__/yaml-integration.test.d.ts.map +0 -1
- package/dist/core/__tests__/yaml-integration.test.js +0 -114
- package/dist/core/__tests__/yaml-integration.test.js.map +0 -1
- package/dist/core/__tests__/yaml-scenarios.test.d.ts +0 -2
- package/dist/core/__tests__/yaml-scenarios.test.d.ts.map +0 -1
- package/dist/core/__tests__/yaml-scenarios.test.js +0 -197
- package/dist/core/__tests__/yaml-scenarios.test.js.map +0 -1
- package/dist/core/condition-evaluator.d.ts +0 -44
- package/dist/core/condition-evaluator.d.ts.map +0 -1
- package/dist/core/condition-evaluator.js +0 -121
- package/dist/core/condition-evaluator.js.map +0 -1
- package/dist/core/executor.d.ts +0 -172
- package/dist/core/executor.d.ts.map +0 -1
- package/dist/core/executor.js +0 -590
- package/dist/core/executor.js.map +0 -1
- package/dist/core/history.d.ts +0 -51
- package/dist/core/history.d.ts.map +0 -1
- package/dist/core/history.js +0 -57
- package/dist/core/history.js.map +0 -1
- package/dist/core/parser.d.ts +0 -41
- package/dist/core/parser.d.ts.map +0 -1
- package/dist/core/parser.js +0 -206
- package/dist/core/parser.js.map +0 -1
- package/dist/core/recorder.d.ts +0 -48
- package/dist/core/recorder.d.ts.map +0 -1
- package/dist/core/recorder.js +0 -56
- package/dist/core/recorder.js.map +0 -1
- package/dist/core/rust-task-runner.d.ts +0 -14
- package/dist/core/rust-task-runner.d.ts.map +0 -1
- package/dist/core/rust-task-runner.js +0 -34
- package/dist/core/rust-task-runner.js.map +0 -1
- package/dist/core/task-runner.d.ts +0 -63
- package/dist/core/task-runner.d.ts.map +0 -1
- package/dist/core/task-runner.js +0 -259
- package/dist/core/task-runner.js.map +0 -1
- package/dist/core/template.d.ts +0 -11
- package/dist/core/template.d.ts.map +0 -1
- package/dist/core/template.js +0 -36
- package/dist/core/template.js.map +0 -1
- package/dist/core/workflow-schema.d.ts +0 -31
- package/dist/core/workflow-schema.d.ts.map +0 -1
- package/dist/core/workflow-schema.js +0 -127
- package/dist/core/workflow-schema.js.map +0 -1
- package/dist/core/workspace.d.ts +0 -90
- package/dist/core/workspace.d.ts.map +0 -1
- package/dist/core/workspace.js +0 -143
- package/dist/core/workspace.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/types/condition.d.ts +0 -62
- package/dist/types/condition.d.ts.map +0 -1
- package/dist/types/condition.js +0 -6
- package/dist/types/condition.js.map +0 -1
- package/dist/types/workflow.d.ts +0 -90
- package/dist/types/workflow.d.ts.map +0 -1
- package/dist/types/workflow.js +0 -2
- package/dist/types/workflow.js.map +0 -1
|
@@ -1,114 +0,0 @@
|
|
|
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';
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-integration.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/yaml-integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-scenarios.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/yaml-scenarios.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
-
import { Executor } from '../executor';
|
|
3
|
-
// Mock ChoicePrompt, TextPrompt
|
|
4
|
-
vi.mock('../../cli/prompts.js', () => {
|
|
5
|
-
return {
|
|
6
|
-
ChoicePrompt: vi.fn().mockImplementation(() => {
|
|
7
|
-
return {
|
|
8
|
-
prompt: vi.fn(),
|
|
9
|
-
};
|
|
10
|
-
}),
|
|
11
|
-
TextPrompt: vi.fn().mockImplementation(() => {
|
|
12
|
-
return {
|
|
13
|
-
prompt: vi.fn(),
|
|
14
|
-
};
|
|
15
|
-
}),
|
|
16
|
-
};
|
|
17
|
-
});
|
|
18
|
-
// Mock TaskRunner
|
|
19
|
-
const mockRun = vi.fn().mockResolvedValue(true);
|
|
20
|
-
vi.mock('../task-runner.js', () => {
|
|
21
|
-
return {
|
|
22
|
-
TaskRunner: vi.fn().mockImplementation(() => {
|
|
23
|
-
return {
|
|
24
|
-
run: mockRun,
|
|
25
|
-
displayBufferedOutput: vi.fn(),
|
|
26
|
-
};
|
|
27
|
-
}),
|
|
28
|
-
};
|
|
29
|
-
});
|
|
30
|
-
describe('YAML Scenario Tests', () => {
|
|
31
|
-
let executor;
|
|
32
|
-
beforeEach(() => {
|
|
33
|
-
vi.clearAllMocks();
|
|
34
|
-
executor = new Executor();
|
|
35
|
-
});
|
|
36
|
-
describe('basic.yaml', () => {
|
|
37
|
-
it('should execute basic workflow with choice', async () => {
|
|
38
|
-
const workflow = {
|
|
39
|
-
steps: [
|
|
40
|
-
{ run: 'echo "Building..."' },
|
|
41
|
-
{
|
|
42
|
-
choose: {
|
|
43
|
-
message: 'Deploy to which environment?',
|
|
44
|
-
options: [
|
|
45
|
-
{ id: 'staging', label: 'Staging' },
|
|
46
|
-
{ id: 'prod', label: 'Production' },
|
|
47
|
-
],
|
|
48
|
-
as: 'env',
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
when: {
|
|
53
|
-
var: {
|
|
54
|
-
env: 'staging',
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
run: 'echo "Deploying to staging..."',
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
when: {
|
|
61
|
-
var: {
|
|
62
|
-
env: 'prod',
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
|
-
run: 'echo "Deploying to production..."',
|
|
66
|
-
},
|
|
67
|
-
],
|
|
68
|
-
};
|
|
69
|
-
const choicePrompt = executor.choicePrompt;
|
|
70
|
-
choicePrompt.prompt = vi.fn().mockResolvedValue({ id: 'staging', label: 'Staging' });
|
|
71
|
-
await executor.execute(workflow);
|
|
72
|
-
const calls = mockRun.mock.calls.map((call) => call[0]);
|
|
73
|
-
expect(calls).toContain('echo "Deploying to staging..."');
|
|
74
|
-
expect(calls).not.toContain('echo "Deploying to production..."');
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
describe('prompt.yaml', () => {
|
|
78
|
-
it('should execute prompt workflow with variables', async () => {
|
|
79
|
-
const workflow = {
|
|
80
|
-
steps: [
|
|
81
|
-
{
|
|
82
|
-
prompt: {
|
|
83
|
-
message: 'What is your name?',
|
|
84
|
-
as: 'user_name',
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
when: { var: 'user_name' },
|
|
89
|
-
run: 'echo "Hello, {{user_name}}!"',
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
prompt: {
|
|
93
|
-
message: 'Enter version number:',
|
|
94
|
-
as: 'version',
|
|
95
|
-
default: '1.0.0',
|
|
96
|
-
},
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
when: { var: 'version' },
|
|
100
|
-
run: 'echo "Building version {{version}}..."',
|
|
101
|
-
},
|
|
102
|
-
],
|
|
103
|
-
};
|
|
104
|
-
const textPrompt = executor.textPrompt;
|
|
105
|
-
textPrompt.prompt = vi.fn().mockResolvedValueOnce('John').mockResolvedValueOnce('2.0.0');
|
|
106
|
-
await executor.execute(workflow);
|
|
107
|
-
const calls = mockRun.mock.calls.map((call) => call[0]);
|
|
108
|
-
expect(calls).toContain('echo "Hello, John!"');
|
|
109
|
-
expect(calls).toContain('echo "Building version 2.0.0..."');
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
describe('parallel.yaml', () => {
|
|
113
|
-
it('should execute parallel steps', async () => {
|
|
114
|
-
const workflow = {
|
|
115
|
-
steps: [
|
|
116
|
-
{
|
|
117
|
-
parallel: [
|
|
118
|
-
{ run: 'echo "Running web tests..."' },
|
|
119
|
-
{ run: 'echo "Running API tests..."' },
|
|
120
|
-
],
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
choose: {
|
|
124
|
-
message: 'Deploy strategy?',
|
|
125
|
-
options: [
|
|
126
|
-
{ id: 'blue_green', label: 'Blue-Green' },
|
|
127
|
-
{ id: 'rolling', label: 'Rolling' },
|
|
128
|
-
],
|
|
129
|
-
as: 'strategy',
|
|
130
|
-
},
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
when: {
|
|
134
|
-
var: {
|
|
135
|
-
strategy: 'blue_green',
|
|
136
|
-
},
|
|
137
|
-
},
|
|
138
|
-
run: 'echo "Deploying with blue-green strategy..."',
|
|
139
|
-
},
|
|
140
|
-
],
|
|
141
|
-
};
|
|
142
|
-
const choicePrompt = executor.choicePrompt;
|
|
143
|
-
choicePrompt.prompt = vi.fn().mockResolvedValue({ id: 'blue_green', label: 'Blue-Green' });
|
|
144
|
-
await executor.execute(workflow);
|
|
145
|
-
const calls = mockRun.mock.calls.map((call) => call[0]);
|
|
146
|
-
expect(calls).toContain('echo "Running web tests..."');
|
|
147
|
-
expect(calls).toContain('echo "Running API tests..."');
|
|
148
|
-
expect(calls).toContain('echo "Deploying with blue-green strategy..."');
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
describe('conditions.yaml', () => {
|
|
152
|
-
it('should check file existence', async () => {
|
|
153
|
-
const workflow = {
|
|
154
|
-
steps: [
|
|
155
|
-
{
|
|
156
|
-
when: { file: 'package.json' },
|
|
157
|
-
run: 'echo "Package.json exists"',
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
when: {
|
|
161
|
-
not: { file: 'nonexistent.txt' },
|
|
162
|
-
},
|
|
163
|
-
run: 'echo "File does not exist"',
|
|
164
|
-
},
|
|
165
|
-
],
|
|
166
|
-
};
|
|
167
|
-
await executor.execute(workflow);
|
|
168
|
-
const calls = mockRun.mock.calls.map((call) => call[0]);
|
|
169
|
-
expect(calls).toContain('echo "Package.json exists"');
|
|
170
|
-
expect(calls).toContain('echo "File does not exist"');
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
describe('variables.yaml', () => {
|
|
174
|
-
it('should use variables from prompts', async () => {
|
|
175
|
-
const workflow = {
|
|
176
|
-
steps: [
|
|
177
|
-
{
|
|
178
|
-
prompt: {
|
|
179
|
-
message: 'Enter project name:',
|
|
180
|
-
as: 'project_name',
|
|
181
|
-
},
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
when: { var: 'project_name' },
|
|
185
|
-
run: 'echo "Building {{project_name}}..."',
|
|
186
|
-
},
|
|
187
|
-
],
|
|
188
|
-
};
|
|
189
|
-
const textPrompt = executor.textPrompt;
|
|
190
|
-
textPrompt.prompt = vi.fn().mockResolvedValue('my-app');
|
|
191
|
-
await executor.execute(workflow);
|
|
192
|
-
const calls = mockRun.mock.calls.map((call) => call[0]);
|
|
193
|
-
expect(calls).toContain('echo "Building my-app..."');
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
//# sourceMappingURL=yaml-scenarios.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-scenarios.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/yaml-scenarios.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { Condition } from '../types/condition';
|
|
2
|
-
import type { Workspace } from './workspace';
|
|
3
|
-
/**
|
|
4
|
-
* Condition Evaluator
|
|
5
|
-
* Evaluates conditions as questions about the workspace
|
|
6
|
-
*/
|
|
7
|
-
export declare class ConditionEvaluator {
|
|
8
|
-
private workspace;
|
|
9
|
-
constructor(workspace: Workspace);
|
|
10
|
-
/**
|
|
11
|
-
* Evaluate condition as a question about the workspace
|
|
12
|
-
* Returns true if condition is met, false otherwise
|
|
13
|
-
*/
|
|
14
|
-
evaluate(condition: Condition): boolean;
|
|
15
|
-
/**
|
|
16
|
-
* Check if a variable or fact exists in workspace, or compare variable value
|
|
17
|
-
*
|
|
18
|
-
* Supports two formats:
|
|
19
|
-
* 1. { var: 'name' } - Check if variable exists
|
|
20
|
-
* 2. { var: { name: 'value' } } - Check if variable equals specific value
|
|
21
|
-
*/
|
|
22
|
-
private evaluateVarExists;
|
|
23
|
-
/**
|
|
24
|
-
* Check if a file or directory exists
|
|
25
|
-
*/
|
|
26
|
-
private evaluateFileExists;
|
|
27
|
-
/**
|
|
28
|
-
* Check if user made a specific choice
|
|
29
|
-
*/
|
|
30
|
-
private evaluateChoice;
|
|
31
|
-
/**
|
|
32
|
-
* Check if all conditions are true (AND logic)
|
|
33
|
-
*/
|
|
34
|
-
private evaluateAll;
|
|
35
|
-
/**
|
|
36
|
-
* Check if any condition is true (OR logic)
|
|
37
|
-
*/
|
|
38
|
-
private evaluateAny;
|
|
39
|
-
/**
|
|
40
|
-
* Negate a condition (NOT logic)
|
|
41
|
-
*/
|
|
42
|
-
private evaluateNot;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=condition-evaluator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"condition-evaluator.d.ts","sourceRoot":"","sources":["../../src/core/condition-evaluator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;GAGG;AAEH,qBAAa,kBAAkB;IACjB,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAExC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAoCvC;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAyCzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,WAAW;CAGpB"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { existsSync } from 'fs';
|
|
2
|
-
import { resolve } from 'path';
|
|
3
|
-
/**
|
|
4
|
-
* Condition Evaluator
|
|
5
|
-
* Evaluates conditions as questions about the workspace
|
|
6
|
-
*/
|
|
7
|
-
export class ConditionEvaluator {
|
|
8
|
-
workspace;
|
|
9
|
-
constructor(workspace) {
|
|
10
|
-
this.workspace = workspace;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Evaluate condition as a question about the workspace
|
|
14
|
-
* Returns true if condition is met, false otherwise
|
|
15
|
-
*/
|
|
16
|
-
evaluate(condition) {
|
|
17
|
-
// Check if variable or fact exists, or compare variable value
|
|
18
|
-
// This should be checked before 'choice' to support var value comparison
|
|
19
|
-
if ('var' in condition || 'has' in condition) {
|
|
20
|
-
return this.evaluateVarExists(condition);
|
|
21
|
-
}
|
|
22
|
-
// Check if file exists
|
|
23
|
-
if ('file' in condition) {
|
|
24
|
-
return this.evaluateFileExists(condition);
|
|
25
|
-
}
|
|
26
|
-
// Check if user made a specific choice (deprecated, use var instead)
|
|
27
|
-
// Kept for backward compatibility
|
|
28
|
-
if ('choice' in condition) {
|
|
29
|
-
return this.evaluateChoice(condition);
|
|
30
|
-
}
|
|
31
|
-
// All conditions must be true (AND)
|
|
32
|
-
if ('all' in condition) {
|
|
33
|
-
return this.evaluateAll(condition);
|
|
34
|
-
}
|
|
35
|
-
// Any condition can be true (OR)
|
|
36
|
-
if ('any' in condition) {
|
|
37
|
-
return this.evaluateAny(condition);
|
|
38
|
-
}
|
|
39
|
-
// Negate a condition (NOT)
|
|
40
|
-
if ('not' in condition) {
|
|
41
|
-
return this.evaluateNot(condition);
|
|
42
|
-
}
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Check if a variable or fact exists in workspace, or compare variable value
|
|
47
|
-
*
|
|
48
|
-
* Supports two formats:
|
|
49
|
-
* 1. { var: 'name' } - Check if variable exists
|
|
50
|
-
* 2. { var: { name: 'value' } } - Check if variable equals specific value
|
|
51
|
-
*/
|
|
52
|
-
evaluateVarExists(condition) {
|
|
53
|
-
// Handle 'has' alias (existence check only)
|
|
54
|
-
if (condition.has) {
|
|
55
|
-
return this.workspace.hasVariable(condition.has) || this.workspace.hasFact(condition.has);
|
|
56
|
-
}
|
|
57
|
-
if (!condition.var) {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
// If var is an object, it's a value comparison: { var: { env: 'dev' } }
|
|
61
|
-
if (typeof condition.var === 'object') {
|
|
62
|
-
// Check each variable-value pair
|
|
63
|
-
for (const [variableName, expectedValue] of Object.entries(condition.var)) {
|
|
64
|
-
// Get variable value (prefer variable over fact)
|
|
65
|
-
const variableValue = this.workspace.getVariable(variableName);
|
|
66
|
-
const factValue = this.workspace.getFact(variableName);
|
|
67
|
-
const actualValue = variableValue ?? (factValue !== undefined ? factValue.toString() : undefined);
|
|
68
|
-
// If variable doesn't exist, condition is false
|
|
69
|
-
if (actualValue === undefined) {
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
// Compare values (both should be strings for comparison)
|
|
73
|
-
if (actualValue !== expectedValue) {
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return true;
|
|
78
|
-
}
|
|
79
|
-
// If var is a string, it's an existence check: { var: 'name' }
|
|
80
|
-
const variableName = condition.var;
|
|
81
|
-
return this.workspace.hasVariable(variableName) || this.workspace.hasFact(variableName);
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Check if a file or directory exists
|
|
85
|
-
*/
|
|
86
|
-
evaluateFileExists(condition) {
|
|
87
|
-
try {
|
|
88
|
-
const filePath = condition.file.trim();
|
|
89
|
-
const absolutePath = resolve(process.cwd(), filePath);
|
|
90
|
-
return existsSync(absolutePath);
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
return false;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Check if user made a specific choice
|
|
98
|
-
*/
|
|
99
|
-
evaluateChoice(condition) {
|
|
100
|
-
return this.workspace.hasChoice(condition.choice);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Check if all conditions are true (AND logic)
|
|
104
|
-
*/
|
|
105
|
-
evaluateAll(condition) {
|
|
106
|
-
return condition.all.every((subCondition) => this.evaluate(subCondition));
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Check if any condition is true (OR logic)
|
|
110
|
-
*/
|
|
111
|
-
evaluateAny(condition) {
|
|
112
|
-
return condition.any.some((subCondition) => this.evaluate(subCondition));
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Negate a condition (NOT logic)
|
|
116
|
-
*/
|
|
117
|
-
evaluateNot(condition) {
|
|
118
|
-
return !this.evaluate(condition.not);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=condition-evaluator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"condition-evaluator.js","sourceRoot":"","sources":["../../src/core/condition-evaluator.ts"],"names":[],"mappings":"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"}
|