@ticatec/omniflow 0.1.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.

Potentially problematic release.


This version of @ticatec/omniflow might be problematic. Click here for more details.

Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +476 -0
  3. package/dist/cli/commands/run.d.ts +7 -0
  4. package/dist/cli/commands/run.d.ts.map +1 -0
  5. package/dist/cli/commands/run.js +242 -0
  6. package/dist/cli/commands/run.js.map +1 -0
  7. package/dist/cli/index.d.ts +3 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +211 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/config/index.d.ts +2 -0
  12. package/dist/config/index.d.ts.map +1 -0
  13. package/dist/config/index.js +3 -0
  14. package/dist/config/index.js.map +1 -0
  15. package/dist/config/omniflow.d.ts +115 -0
  16. package/dist/config/omniflow.d.ts.map +1 -0
  17. package/dist/config/omniflow.js +451 -0
  18. package/dist/config/omniflow.js.map +1 -0
  19. package/dist/core/git.d.ts +22 -0
  20. package/dist/core/git.d.ts.map +1 -0
  21. package/dist/core/git.js +164 -0
  22. package/dist/core/git.js.map +1 -0
  23. package/dist/core/strategies/BaseMergeRequest.d.ts +58 -0
  24. package/dist/core/strategies/BaseMergeRequest.d.ts.map +1 -0
  25. package/dist/core/strategies/BaseMergeRequest.js +57 -0
  26. package/dist/core/strategies/BaseMergeRequest.js.map +1 -0
  27. package/dist/core/strategies/ForgejoRequest.d.ts +35 -0
  28. package/dist/core/strategies/ForgejoRequest.d.ts.map +1 -0
  29. package/dist/core/strategies/ForgejoRequest.js +82 -0
  30. package/dist/core/strategies/ForgejoRequest.js.map +1 -0
  31. package/dist/core/strategies/GitHubRequest.d.ts +34 -0
  32. package/dist/core/strategies/GitHubRequest.d.ts.map +1 -0
  33. package/dist/core/strategies/GitHubRequest.js +84 -0
  34. package/dist/core/strategies/GitHubRequest.js.map +1 -0
  35. package/dist/core/strategies/GitLabRequest.d.ts +25 -0
  36. package/dist/core/strategies/GitLabRequest.d.ts.map +1 -0
  37. package/dist/core/strategies/GitLabRequest.js +70 -0
  38. package/dist/core/strategies/GitLabRequest.js.map +1 -0
  39. package/dist/core/strategies/index.d.ts +36 -0
  40. package/dist/core/strategies/index.d.ts.map +1 -0
  41. package/dist/core/strategies/index.js +50 -0
  42. package/dist/core/strategies/index.js.map +1 -0
  43. package/dist/core/strategies/types.d.ts +22 -0
  44. package/dist/core/strategies/types.d.ts.map +1 -0
  45. package/dist/core/strategies/types.js +5 -0
  46. package/dist/core/strategies/types.js.map +1 -0
  47. package/dist/index.d.ts +2 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +3 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/types/config.d.ts +63 -0
  52. package/dist/types/config.d.ts.map +1 -0
  53. package/dist/types/config.js +3 -0
  54. package/dist/types/config.js.map +1 -0
  55. package/package.json +88 -0
@@ -0,0 +1,242 @@
1
+ // Omniflow run command
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import { $ } from 'zx';
5
+ import { OmniflowConfigLoader } from '../../config/index.js';
6
+ import { executeGitWorkflow } from '../../core/git.js';
7
+ // Omniflow 工作目录
8
+ const OMNIFLOW_HOME = process.env.OMNIFLOW_HOME || path.join(os.homedir(), '.omniflow');
9
+ export async function runCommand(projectKey, envName, commands, options) {
10
+ const loader = new OmniflowConfigLoader();
11
+ // Load configuration
12
+ const config = await loader.load();
13
+ // Get project
14
+ const project = await loader.getProject(projectKey);
15
+ if (!project) {
16
+ console.error(`❌ Project not found: ${projectKey}`);
17
+ const available = await loader.listProjects();
18
+ if (available.length > 0) {
19
+ console.log(`\nAvailable projects: ${available.map(p => p.key).join(', ')}`);
20
+ }
21
+ process.exit(1);
22
+ }
23
+ // Get environment configuration
24
+ const envConfig = await loader.getEnvironment(projectKey, envName);
25
+ if (!envConfig) {
26
+ console.error(`❌ Environment not found: ${envName}`);
27
+ const available = await loader.listEnvironments(projectKey);
28
+ if (available.length > 0) {
29
+ console.log(`\nAvailable environments: ${available.join(', ')}`);
30
+ }
31
+ process.exit(1);
32
+ }
33
+ // If no commands specified, show available commands
34
+ if (commands.length === 0) {
35
+ console.log(`\n📋 Available commands for ${projectKey}/${envName}:\n`);
36
+ if (!envConfig.commands || envConfig.commands.length === 0) {
37
+ console.log(` No commands defined`);
38
+ }
39
+ else {
40
+ for (const cmd of envConfig.commands) {
41
+ console.log(` ${cmd.name}${cmd.description ? ' - ' + cmd.description : ''}`);
42
+ }
43
+ }
44
+ console.log(`\nUsage: omniflow run -e ${envName} ${projectKey} <command> [command...]`);
45
+ process.exit(0);
46
+ }
47
+ // Validate all commands exist before running
48
+ const commandDefs = [];
49
+ for (const cmdName of commands) {
50
+ const def = envConfig.commands?.find(c => c.name === cmdName);
51
+ if (!def) {
52
+ console.error(`❌ Command not found: ${cmdName}`);
53
+ if (envConfig.commands && envConfig.commands.length > 0) {
54
+ console.log(`\nAvailable commands:`);
55
+ for (const cmd of envConfig.commands) {
56
+ console.log(` - ${cmd.name}${cmd.description ? ' - ' + cmd.description : ''}`);
57
+ }
58
+ }
59
+ process.exit(1);
60
+ }
61
+ commandDefs.push(def);
62
+ }
63
+ // Get git configuration
64
+ const gitConfig = await loader.getGitConfig(projectKey, envName);
65
+ if (!gitConfig) {
66
+ console.error(`❌ Git configuration not found for project: ${projectKey}`);
67
+ process.exit(1);
68
+ }
69
+ // Workspace path: $OMNIFLOW_HOME/project/<project-path>/<environment>/
70
+ const workspacePath = path.join(OMNIFLOW_HOME, 'project', ...projectKey.split('/'), envName);
71
+ const projectRoot = workspacePath;
72
+ console.log(`\n🚀 Running: ${project.name || projectKey}`);
73
+ console.log(` Project: ${projectKey}`);
74
+ console.log(` Environment: ${envName}`);
75
+ console.log(` Commands: ${commands.join(', ')}`);
76
+ console.log(` Branch: ${gitConfig.branch}`);
77
+ if (envConfig.merge_from) {
78
+ console.log(` (Remote merge: ${envConfig.merge_from} → ${gitConfig.branch})`);
79
+ }
80
+ console.log(` Workspace: ${workspacePath}`);
81
+ console.log('');
82
+ let overallSuccess = true;
83
+ const results = [];
84
+ try {
85
+ // Create workspace directory
86
+ await $ `mkdir -p ${workspacePath}`;
87
+ // Git workflow: clone
88
+ if (options.verbose) {
89
+ console.log(`🔄 Cloning: ${gitConfig.url}`);
90
+ }
91
+ const gitResult = await executeGitWorkflow({
92
+ url: gitConfig.url,
93
+ branch: gitConfig.branch,
94
+ merge_from: envConfig.merge_from,
95
+ strategy: gitConfig.strategy,
96
+ username: gitConfig.username,
97
+ password: gitConfig.password
98
+ }, projectRoot);
99
+ if (!gitResult.success) {
100
+ throw new Error(`Git workflow failed: ${gitResult.error}`);
101
+ }
102
+ if (options.verbose) {
103
+ console.log(`✓ Git ready: ${gitResult.branch} @ ${gitResult.commit.substring(0, 8)}`);
104
+ }
105
+ // Get merged variables: global -> project -> environment
106
+ const mergedVars = await loader.getMergedVars(projectKey, envName);
107
+ // Load shared commands from config repository
108
+ const sharedCommands = await loader.loadCommands() || {};
109
+ // Execute commands sequentially
110
+ for (let i = 0; i < commands.length; i++) {
111
+ const commandName = commands[i];
112
+ const commandDef = commandDefs[i];
113
+ console.log(`\n${'─'.repeat(50)}`);
114
+ console.log(`📋 [${i + 1}/${commands.length}] Running: ${commandName}${commandDef.description ? ' - ' + commandDef.description : ''}`);
115
+ console.log(`${'─'.repeat(50)}`);
116
+ // Prepare environment variables for the script
117
+ const scriptEnv = {
118
+ // System env
119
+ ...process.env,
120
+ // Merged variables (global -> project -> environment)
121
+ ...mergedVars,
122
+ // Workspace info
123
+ OMNIFLOW_HOME,
124
+ WORKSPACE: workspacePath,
125
+ PROJECT_ROOT: projectRoot,
126
+ PROJECT_KEY: projectKey,
127
+ PROJECT_NAME: project.name || projectKey,
128
+ ENVIRONMENT: envName,
129
+ COMMAND: commandName,
130
+ COMMAND_INDEX: String(i),
131
+ BRANCH: gitResult.branch,
132
+ COMMIT: gitResult.commit || ''
133
+ };
134
+ if (options.verbose) {
135
+ console.log(`\n📜 Environment variables:`);
136
+ console.log(` OMNIFLOW_HOME=${OMNIFLOW_HOME}`);
137
+ console.log(` WORKSPACE=${workspacePath}`);
138
+ console.log(` PROJECT_ROOT=${projectRoot}`);
139
+ console.log(` ENVIRONMENT=${envName}`);
140
+ console.log(` COMMAND=${commandName}`);
141
+ console.log(` BRANCH=${gitResult.branch}`);
142
+ console.log('');
143
+ }
144
+ let commandSuccess = false;
145
+ let commandError = '';
146
+ try {
147
+ if (options.dryRun) {
148
+ console.log(`[DRY RUN] Would execute command: ${commandName}`);
149
+ commandSuccess = true;
150
+ }
151
+ else {
152
+ // Execute the command script
153
+ // Command script path: ./modules/<command-name> or <custom-path>
154
+ const scriptPath = commandDef.name.startsWith('./')
155
+ ? commandDef.name
156
+ : `./modules/${commandDef.name}`;
157
+ const resolvedScriptPath = path.resolve(process.cwd(), scriptPath);
158
+ // Import and run the script
159
+ const scriptModule = await import(resolvedScriptPath);
160
+ if (typeof scriptModule.default === 'function') {
161
+ const context = {
162
+ workspace: workspacePath,
163
+ projectRoot: projectRoot,
164
+ project: {
165
+ key: projectKey,
166
+ name: project.name || projectKey,
167
+ description: project.description
168
+ },
169
+ environment: {
170
+ name: envName,
171
+ config: envConfig
172
+ },
173
+ command: {
174
+ name: commandName,
175
+ description: commandDef.description
176
+ },
177
+ git: {
178
+ url: gitConfig.url,
179
+ branch: gitResult.branch,
180
+ commit: gitResult.commit || ''
181
+ },
182
+ env: scriptEnv,
183
+ omniflow: config.omniflow,
184
+ commands: sharedCommands,
185
+ verbose: options.verbose
186
+ };
187
+ await scriptModule.default(context);
188
+ commandSuccess = true;
189
+ }
190
+ else {
191
+ throw new Error(`Script must export a default function: ${resolvedScriptPath}`);
192
+ }
193
+ }
194
+ }
195
+ catch (error) {
196
+ commandError = error instanceof Error ? error.message : String(error);
197
+ console.error(`\n❌ Error: ${commandError}`);
198
+ if (options.verbose && error instanceof Error) {
199
+ console.error(error.stack);
200
+ }
201
+ commandSuccess = false;
202
+ }
203
+ results.push({ command: commandName, success: commandSuccess, error: commandError });
204
+ if (commandSuccess) {
205
+ console.log(`\n✅ [${i + 1}/${commands.length}] ${commandName} completed`);
206
+ }
207
+ else {
208
+ console.log(`\n❌ [${i + 1}/${commands.length}] ${commandName} failed`);
209
+ overallSuccess = false;
210
+ // Stop on first failure
211
+ break;
212
+ }
213
+ }
214
+ }
215
+ catch (error) {
216
+ const errorMsg = error instanceof Error ? error.message : String(error);
217
+ console.error(`\n❌ Error: ${errorMsg}`);
218
+ if (options.verbose && error instanceof Error) {
219
+ console.error(error.stack);
220
+ }
221
+ overallSuccess = false;
222
+ }
223
+ // Summary
224
+ console.log(`\n${'═'.repeat(50)}`);
225
+ console.log(`📊 Summary:`);
226
+ for (const result of results) {
227
+ const icon = result.success ? '✅' : '❌';
228
+ console.log(` ${icon} ${result.command}`);
229
+ if (result.error) {
230
+ console.log(` Error: ${result.error}`);
231
+ }
232
+ }
233
+ console.log(`${'═'.repeat(50)}`);
234
+ if (overallSuccess) {
235
+ console.log(`\n✅ All commands completed successfully`);
236
+ }
237
+ else {
238
+ console.log(`\n❌ Some commands failed`);
239
+ }
240
+ process.exit(overallSuccess ? 0 : 1);
241
+ }
242
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,211 @@
1
+ #!/usr/bin/env node
2
+ // Omniflow CLI - CI/CD Pipeline Manager
3
+ import { Command } from 'commander';
4
+ import { OmniflowConfigLoader } from '../config/index.js';
5
+ import { runCommand } from './commands/run.js';
6
+ const program = new Command();
7
+ program
8
+ .name('omniflow')
9
+ .description('CI/CD pipeline manager for small teams')
10
+ .version('0.1.0');
11
+ // =============================================================================
12
+ // Run command - Execute project deployment
13
+ // =============================================================================
14
+ program
15
+ .command('run')
16
+ .description('Run deployment for a project')
17
+ .argument('<project>', 'Project key (e.g., omni-gate/platform)')
18
+ .argument('<commands...>', 'Commands to run (e.g., frontend-deploy backend-deploy)')
19
+ .requiredOption('-e, --environment <env>', 'Environment name (e.g., test, prod)')
20
+ .option('-d, --dry-run', 'Preview mode without execution')
21
+ .option('-v, --verbose', 'Verbose output')
22
+ .action(async (project, commands, options) => {
23
+ await runCommand(project, options.environment, commands, {
24
+ dryRun: options.dryRun || false,
25
+ verbose: options.verbose || false
26
+ });
27
+ });
28
+ // =============================================================================
29
+ // List command - List projects or environments
30
+ // =============================================================================
31
+ program
32
+ .command('list')
33
+ .description('List projects, environments, or commands')
34
+ .argument('<type>', 'Type to list: projects, environments, commands')
35
+ .argument('[project]', 'Project key (required for type: environments, commands)')
36
+ .argument('[environment]', 'Environment name (required for type: commands)')
37
+ .action(async (type, project, environment) => {
38
+ const loader = new OmniflowConfigLoader();
39
+ if (type === 'projects') {
40
+ const projects = await loader.listProjects();
41
+ console.log('Projects:\n');
42
+ for (const p of projects) {
43
+ console.log(` ${p.key}${p.description ? ' - ' + p.description : ''}`);
44
+ }
45
+ }
46
+ else if (type === 'environments' || type === 'branches') {
47
+ if (!project) {
48
+ console.error('❌ Project key is required for listing environments');
49
+ process.exit(1);
50
+ }
51
+ const environments = await loader.listEnvironments(project);
52
+ console.log(`Environments for ${project}:\n`);
53
+ for (const envName of environments) {
54
+ const envConfig = await loader.getEnvironment(project, envName);
55
+ console.log(` ${envName}${envConfig?.description ? ' - ' + envConfig.description : ''}`);
56
+ if (envConfig) {
57
+ console.log(` branch: ${envConfig.branch}`);
58
+ if (envConfig.merge_from) {
59
+ console.log(` merge_from: ${envConfig.merge_from}`);
60
+ }
61
+ }
62
+ }
63
+ }
64
+ else if (type === 'commands') {
65
+ if (!project || !environment) {
66
+ console.error('❌ Project key and environment name are required for listing commands');
67
+ process.exit(1);
68
+ }
69
+ const envConfig = await loader.getEnvironment(project, environment);
70
+ if (!envConfig) {
71
+ console.error(`❌ Environment not found: ${project}/${environment}`);
72
+ process.exit(1);
73
+ }
74
+ if (!envConfig.commands || envConfig.commands.length === 0) {
75
+ console.log(`No commands defined for ${project}/${environment}`);
76
+ return;
77
+ }
78
+ console.log(`Commands for ${project}/${environment}:\n`);
79
+ for (const cmd of envConfig.commands) {
80
+ console.log(` ${cmd.name}${cmd.description ? ' - ' + cmd.description : ''}`);
81
+ }
82
+ }
83
+ else {
84
+ console.error('❌ Invalid type. Use "projects", "environments", or "commands"');
85
+ process.exit(1);
86
+ }
87
+ });
88
+ // =============================================================================
89
+ // Show command - Show project details
90
+ // =============================================================================
91
+ program
92
+ .command('show')
93
+ .description('Show project or environment details')
94
+ .argument('<project>', 'Project key')
95
+ .argument('[environment]', 'Environment name (optional)')
96
+ .action(async (project, environment) => {
97
+ const loader = new OmniflowConfigLoader();
98
+ const projectConfig = await loader.getProject(project);
99
+ if (!projectConfig) {
100
+ console.error(`❌ Project not found: ${project}`);
101
+ process.exit(1);
102
+ }
103
+ console.log(`\nProject: ${project}`);
104
+ if (projectConfig.description) {
105
+ console.log(`Description: ${projectConfig.description}`);
106
+ }
107
+ if (projectConfig.repos) {
108
+ console.log(`\nGit:`);
109
+ console.log(` URL: ${projectConfig.repos.git}`);
110
+ if (projectConfig.repos.branch) {
111
+ console.log(` Default Branch: ${projectConfig.repos.branch}`);
112
+ }
113
+ }
114
+ if (environment) {
115
+ const envConfig = await loader.getEnvironment(project, environment);
116
+ if (!envConfig) {
117
+ console.error(`❌ Environment not found: ${environment}`);
118
+ process.exit(1);
119
+ }
120
+ console.log(`\nEnvironment: ${environment}`);
121
+ if (envConfig.description) {
122
+ console.log(`Description: ${envConfig.description}`);
123
+ }
124
+ console.log(` Target Branch: ${envConfig.branch}`);
125
+ if (envConfig.merge_from) {
126
+ console.log(` Merge From: ${envConfig.merge_from}`);
127
+ }
128
+ if (envConfig.vars) {
129
+ console.log(` Variables:`);
130
+ for (const [key, value] of Object.entries(envConfig.vars)) {
131
+ console.log(` ${key}=${value}`);
132
+ }
133
+ }
134
+ }
135
+ else {
136
+ console.log(`\nEnvironments:`);
137
+ const environments = await loader.listEnvironments(project);
138
+ for (const env of environments) {
139
+ console.log(` - ${env}`);
140
+ }
141
+ }
142
+ console.log('');
143
+ });
144
+ // =============================================================================
145
+ // Clean command - Clean workspace
146
+ // =============================================================================
147
+ program
148
+ .command('clean')
149
+ .description('Clean workspace for a project')
150
+ .argument('[project]', 'Project key (optional, cleans all if not specified)')
151
+ .option('-a, --all', 'Clean all workspaces')
152
+ .action(async (project, options) => {
153
+ const path = await import('path');
154
+ const os = await import('os');
155
+ const fs = await import('fs/promises');
156
+ const OMNIFLOW_HOME = process.env.OMNIFLOW_HOME || path.join(os.homedir(), '.omniflow');
157
+ if (options.all || !project) {
158
+ // Clean all workspaces
159
+ try {
160
+ await fs.rm(OMNIFLOW_HOME, { recursive: true, force: true });
161
+ console.log(`✅ Cleaned all workspaces: ${OMNIFLOW_HOME}`);
162
+ }
163
+ catch (error) {
164
+ console.error(`❌ Failed to clean: ${error.message}`);
165
+ }
166
+ }
167
+ else {
168
+ // Clean specific project workspace
169
+ const workspacePath = path.join(OMNIFLOW_HOME, ...project.split('/'));
170
+ try {
171
+ await fs.rm(workspacePath, { recursive: true, force: true });
172
+ console.log(`✅ Cleaned workspace: ${workspacePath}`);
173
+ }
174
+ catch (error) {
175
+ console.error(`❌ Failed to clean: ${error.message}`);
176
+ }
177
+ }
178
+ });
179
+ // =============================================================================
180
+ // Reload command - Fetch latest config from git and update cache
181
+ // =============================================================================
182
+ program
183
+ .command('reload')
184
+ .description('Reload configuration from git (update local cache)')
185
+ .action(async () => {
186
+ const loader = new OmniflowConfigLoader();
187
+ try {
188
+ console.log('🔄 Fetching latest configuration from git...');
189
+ // Force reload (clears cache and fetches fresh)
190
+ await loader.reload();
191
+ // Show summary
192
+ const projects = await loader.listProjects();
193
+ const tree = await loader.listProjectTree();
194
+ console.log('✅ Configuration cache updated\n');
195
+ console.log(`📊 Summary:`);
196
+ console.log(` Projects: ${projects.length}`);
197
+ console.log(` Folders: ${tree.filter(n => n.type === 'folder').length}`);
198
+ if (projects.length > 0) {
199
+ console.log(`\n📁 Projects:`);
200
+ for (const p of projects) {
201
+ console.log(` - ${p.key}${p.description ? ' - ' + p.description : ''}`);
202
+ }
203
+ }
204
+ }
205
+ catch (error) {
206
+ console.error(`❌ Failed to reload config: ${error.message}`);
207
+ process.exit(1);
208
+ }
209
+ });
210
+ program.parse();
211
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { OmniflowConfigLoader } from './omniflow.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,3 @@
1
+ // Config exports
2
+ export { OmniflowConfigLoader } from './omniflow.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AAEjB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,115 @@
1
+ import type { OmniflowConfig, ProjectDefinition, ProjectItem, EnvironmentConfig, ProjectNode } from '../types/config.js';
2
+ export declare class OmniflowConfigLoader {
3
+ private config;
4
+ private initialized;
5
+ /**
6
+ * Ensure configuration is initialized (fetch from git if needed)
7
+ */
8
+ private ensureInitialized;
9
+ /**
10
+ * Load configuration
11
+ * Uses cached config if available, otherwise fetches from git
12
+ */
13
+ load(): Promise<OmniflowConfig>;
14
+ /**
15
+ * Find a project by its path (supports nested paths like "omni-gate/platform")
16
+ */
17
+ findProjectByPath(projects: ProjectItem[], pathParts: string[]): ProjectItem | null;
18
+ /**
19
+ * Get a specific project configuration by path
20
+ * @param projectPath Project path like "omni-gate/platform" or "platform"
21
+ */
22
+ getProject(projectPath: string): Promise<ProjectDefinition | null>;
23
+ /**
24
+ * Get all projects (flattened, excluding folders)
25
+ */
26
+ listProjects(): Promise<Array<{
27
+ key: string;
28
+ name: string;
29
+ description?: string;
30
+ }>>;
31
+ /**
32
+ * List all items (including folders) with their structure
33
+ */
34
+ listProjectTree(): Promise<ProjectNode[]>;
35
+ /**
36
+ * Get environment configuration for a project
37
+ * @param projectPath Project path like "omni-gate/platform"
38
+ * @param envName Environment name like "test" or "prod"
39
+ */
40
+ getEnvironment(projectPath: string, envName: string): Promise<EnvironmentConfig | null>;
41
+ /**
42
+ * Alias for getEnvironment (backward compatibility)
43
+ */
44
+ getBranch(projectPath: string, branchName: string): Promise<EnvironmentConfig | null>;
45
+ /**
46
+ * List environments for a project
47
+ * @param projectPath Project path like "omni-gate/platform"
48
+ */
49
+ listEnvironments(projectPath: string): Promise<string[]>;
50
+ /**
51
+ * Alias for listEnvironments (backward compatibility)
52
+ */
53
+ listBranches(projectPath: string): Promise<string[]>;
54
+ /**
55
+ * Get merged Git configuration for a project
56
+ * @param projectPath Project path like "omni-gate/platform"
57
+ * @param envName Environment name like "test" or "prod"
58
+ */
59
+ getGitConfig(projectPath: string, envName?: string): Promise<{
60
+ url: string;
61
+ branch: string;
62
+ username?: string;
63
+ password?: string;
64
+ merge_from?: string;
65
+ strategy?: string;
66
+ } | null>;
67
+ /**
68
+ * Get SSH configuration
69
+ */
70
+ getSshConfig(serverName: string): Promise<{
71
+ server: string;
72
+ user: string;
73
+ privateKeyFile?: string;
74
+ port?: number;
75
+ } | null>;
76
+ /**
77
+ * Resolve environment variables in configuration
78
+ */
79
+ private resolveEnvVars;
80
+ /**
81
+ * Reload configuration (fetches from git again)
82
+ */
83
+ reload(): Promise<void>;
84
+ /**
85
+ * Collect vars from the project path (traverses folder hierarchy)
86
+ * Returns vars from all folders in the path + the project itself
87
+ */
88
+ private collectVarsFromPath;
89
+ /**
90
+ * Get merged variables for a project and environment
91
+ * Priority: global -> parent folders -> project -> environment (later overrides earlier)
92
+ */
93
+ getMergedVars(projectPath: string, envName: string): Promise<Record<string, string>>;
94
+ /**
95
+ * Load commands.js from omniflow home directory
96
+ * Returns the exported object or null if file doesn't exist
97
+ */
98
+ loadCommands(): Promise<Object | null>;
99
+ /**
100
+ * Get the data directory path for projects
101
+ * Maps to ~/.omniflow/data/
102
+ */
103
+ getDataDir(): string;
104
+ /**
105
+ * Get project path by project key (e.g., "omni-gate/platform" -> ~/.omniflow/data/omni-gate/platform)
106
+ */
107
+ getProjectPath(projectKey: string): string;
108
+ }
109
+ /**
110
+ * Load Omniflow configuration from git
111
+ * Configuration is fetched from the repository specified by OMNIFLOW_CONFIG_REPO
112
+ * @returns The loaded configuration
113
+ */
114
+ export declare function loadOmniflowConfig(): Promise<OmniflowConfig>;
115
+ //# sourceMappingURL=omniflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omniflow.d.ts","sourceRoot":"","sources":["../../src/config/omniflow.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EAEjB,WAAW,EACZ,MAAM,oBAAoB,CAAA;AAE3B,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,WAAW,CAAQ;IAE3B;;OAEG;YACW,iBAAiB;IA4E/B;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC;IAuCrC;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,IAAI;IAqBnF;;;OAGG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAOxE;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA0BzF;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAsB/C;;;;OAIG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAS7F;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAI3F;;;OAGG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO9D;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAI1D;;;;OAIG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QACjE,GAAG,EAAE,MAAM,CAAA;QACX,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GAAG,IAAI,CAAC;IAoDT;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAC9C,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,GAAG,IAAI,CAAC;IAMT;;OAEG;IACH,OAAO,CAAC,cAAc;IA0BtB;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAuE7B;;;OAGG;YACW,mBAAmB;IA6BjC;;;OAGG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAgB1F;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAuB5C;;;OAGG;IACH,UAAU,IAAI,MAAM;IAKpB;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;CAG3C;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,CAGlE"}