@sfdxy/mule-build 1.0.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.
- package/README.md +301 -0
- package/dist/bin/mule-build.d.ts +8 -0
- package/dist/bin/mule-build.d.ts.map +1 -0
- package/dist/bin/mule-build.js +12 -0
- package/dist/bin/mule-build.js.map +1 -0
- package/dist/src/api/enforce.d.ts +11 -0
- package/dist/src/api/enforce.d.ts.map +1 -0
- package/dist/src/api/enforce.js +58 -0
- package/dist/src/api/enforce.js.map +1 -0
- package/dist/src/api/index.d.ts +12 -0
- package/dist/src/api/index.d.ts.map +1 -0
- package/dist/src/api/index.js +12 -0
- package/dist/src/api/index.js.map +1 -0
- package/dist/src/api/package.d.ts +15 -0
- package/dist/src/api/package.d.ts.map +1 -0
- package/dist/src/api/package.js +242 -0
- package/dist/src/api/package.js.map +1 -0
- package/dist/src/api/release.d.ts +11 -0
- package/dist/src/api/release.d.ts.map +1 -0
- package/dist/src/api/release.js +102 -0
- package/dist/src/api/release.js.map +1 -0
- package/dist/src/api/run.d.ts +11 -0
- package/dist/src/api/run.d.ts.map +1 -0
- package/dist/src/api/run.js +44 -0
- package/dist/src/api/run.js.map +1 -0
- package/dist/src/api/strip.d.ts +11 -0
- package/dist/src/api/strip.d.ts.map +1 -0
- package/dist/src/api/strip.js +57 -0
- package/dist/src/api/strip.js.map +1 -0
- package/dist/src/cli.d.ts +15 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +174 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/config/ConfigLoader.d.ts +19 -0
- package/dist/src/config/ConfigLoader.d.ts.map +1 -0
- package/dist/src/config/ConfigLoader.js +84 -0
- package/dist/src/config/ConfigLoader.js.map +1 -0
- package/dist/src/config/SystemChecker.d.ts +29 -0
- package/dist/src/config/SystemChecker.d.ts.map +1 -0
- package/dist/src/config/SystemChecker.js +85 -0
- package/dist/src/config/SystemChecker.js.map +1 -0
- package/dist/src/config/defaults.d.ts +17 -0
- package/dist/src/config/defaults.d.ts.map +1 -0
- package/dist/src/config/defaults.js +37 -0
- package/dist/src/config/defaults.js.map +1 -0
- package/dist/src/engine/LocalRuntime.d.ts +41 -0
- package/dist/src/engine/LocalRuntime.d.ts.map +1 -0
- package/dist/src/engine/LocalRuntime.js +132 -0
- package/dist/src/engine/LocalRuntime.js.map +1 -0
- package/dist/src/engine/MavenBuilder.d.ts +49 -0
- package/dist/src/engine/MavenBuilder.d.ts.map +1 -0
- package/dist/src/engine/MavenBuilder.js +126 -0
- package/dist/src/engine/MavenBuilder.js.map +1 -0
- package/dist/src/engine/PomParser.d.ts +53 -0
- package/dist/src/engine/PomParser.d.ts.map +1 -0
- package/dist/src/engine/PomParser.js +175 -0
- package/dist/src/engine/PomParser.js.map +1 -0
- package/dist/src/engine/XmlProcessor.d.ts +47 -0
- package/dist/src/engine/XmlProcessor.d.ts.map +1 -0
- package/dist/src/engine/XmlProcessor.js +213 -0
- package/dist/src/engine/XmlProcessor.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +13 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/types/index.d.ts +209 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +16 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/utils/exec.d.ts +20 -0
- package/dist/src/utils/exec.d.ts.map +1 -0
- package/dist/src/utils/exec.js +57 -0
- package/dist/src/utils/exec.js.map +1 -0
- package/dist/src/utils/git.d.ts +26 -0
- package/dist/src/utils/git.d.ts.map +1 -0
- package/dist/src/utils/git.js +71 -0
- package/dist/src/utils/git.js.map +1 -0
- package/dist/src/utils/logger.d.ts +21 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +59 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/package.json +80 -0
package/dist/src/cli.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mule-Build CLI
|
|
3
|
+
*
|
|
4
|
+
* Command-line interface for MuleSoft build automation.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { packageProject } from './api/package.js';
|
|
9
|
+
import { runLocal } from './api/run.js';
|
|
10
|
+
import { releaseVersion } from './api/release.js';
|
|
11
|
+
import { stripSecure } from './api/strip.js';
|
|
12
|
+
import { enforceSecure } from './api/enforce.js';
|
|
13
|
+
import { setLogLevel } from './utils/logger.js';
|
|
14
|
+
// Package info
|
|
15
|
+
const VERSION = '1.0.0';
|
|
16
|
+
const NAME = 'mule-build';
|
|
17
|
+
/**
|
|
18
|
+
* Create and configure the CLI program
|
|
19
|
+
*/
|
|
20
|
+
export function createProgram() {
|
|
21
|
+
const program = new Command();
|
|
22
|
+
program
|
|
23
|
+
.name(NAME)
|
|
24
|
+
.description('MuleSoft build automation CLI')
|
|
25
|
+
.version(VERSION)
|
|
26
|
+
.option('-v, --verbose', 'Enable verbose output')
|
|
27
|
+
.hook('preAction', (thisCommand) => {
|
|
28
|
+
const opts = thisCommand.opts();
|
|
29
|
+
if (opts.verbose) {
|
|
30
|
+
setLogLevel('debug');
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
// Package command
|
|
34
|
+
program
|
|
35
|
+
.command('package')
|
|
36
|
+
.description('Build the MuleSoft application package')
|
|
37
|
+
.option('--strip-secure', 'Strip secure:: prefixes for local development (explicit opt-in)')
|
|
38
|
+
.option('-e, --env <environment>', 'Target environment: production (enforces secure::)')
|
|
39
|
+
.option('-s, --with-source', 'Include source code in package (Studio importable)')
|
|
40
|
+
.option('-S, --skip-tests', 'Skip MUnit tests')
|
|
41
|
+
.option('--version <version>', 'Override version')
|
|
42
|
+
.action(async (options) => {
|
|
43
|
+
// Validate environment if provided
|
|
44
|
+
if (options.env && options.env !== 'production') {
|
|
45
|
+
console.error(chalk.red(`Invalid environment: ${options.env}. Only 'production' is supported.`));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
// Warn about incompatible options
|
|
49
|
+
if (options.stripSecure && options.env === 'production') {
|
|
50
|
+
console.error(chalk.red('Cannot use --strip-secure with -e production'));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const result = await packageProject({
|
|
54
|
+
environment: options.env,
|
|
55
|
+
stripSecure: options.stripSecure,
|
|
56
|
+
withSource: options.withSource,
|
|
57
|
+
skipTests: options.skipTests,
|
|
58
|
+
version: options.version,
|
|
59
|
+
});
|
|
60
|
+
if (!result.success) {
|
|
61
|
+
console.error(chalk.red(`Build failed: ${result.error?.message}`));
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
console.log(chalk.green(`\n✓ Package built successfully: ${result.data?.jarPath}`));
|
|
65
|
+
});
|
|
66
|
+
// Run command
|
|
67
|
+
program
|
|
68
|
+
.command('run')
|
|
69
|
+
.description('Build and deploy to local Mule runtime (strips secure:: automatically)')
|
|
70
|
+
.option('-d, --debug', 'Enable remote debugging on port 5005')
|
|
71
|
+
.option('-c, --clean', 'Run mvn clean before building')
|
|
72
|
+
.action(async (options) => {
|
|
73
|
+
const result = await runLocal({
|
|
74
|
+
debug: options.debug,
|
|
75
|
+
clean: options.clean,
|
|
76
|
+
});
|
|
77
|
+
if (!result.success) {
|
|
78
|
+
console.error(chalk.red(`Run failed: ${result.error?.message}`));
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
console.log(chalk.green('\n✓ Application deployed to local runtime'));
|
|
82
|
+
});
|
|
83
|
+
// Release command
|
|
84
|
+
program
|
|
85
|
+
.command('release')
|
|
86
|
+
.description('Bump version and create a release')
|
|
87
|
+
.requiredOption('-b, --bump <type>', 'Version bump type: major | minor | patch')
|
|
88
|
+
.option('--no-tag', 'Skip git tag creation')
|
|
89
|
+
.option('--no-push', 'Skip git push')
|
|
90
|
+
.action(async (options) => {
|
|
91
|
+
const bump = options.bump;
|
|
92
|
+
if (!['major', 'minor', 'patch'].includes(bump)) {
|
|
93
|
+
console.error(chalk.red(`Invalid bump type: ${bump}. Use 'major', 'minor', or 'patch'.`));
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
const result = await releaseVersion({
|
|
97
|
+
bump,
|
|
98
|
+
tag: options.tag,
|
|
99
|
+
push: options.push,
|
|
100
|
+
});
|
|
101
|
+
if (!result.success) {
|
|
102
|
+
console.error(chalk.red(`Release failed: ${result.error?.message}`));
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
console.log(chalk.green(`\n✓ Released version ${result.data?.newVersion}`));
|
|
106
|
+
if (result.data?.tagName) {
|
|
107
|
+
console.log(chalk.blue(` Tag: ${result.data.tagName}`));
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
// Strip command
|
|
111
|
+
program
|
|
112
|
+
.command('strip')
|
|
113
|
+
.description('Strip secure:: prefixes from XML files')
|
|
114
|
+
.option('-f, --file <path>', 'Process single file')
|
|
115
|
+
.option('-d, --dir <path>', 'Process all XML files in directory (default: src/main/mule)')
|
|
116
|
+
.option('--dry-run', 'Show changes without modifying files')
|
|
117
|
+
.action(async (options) => {
|
|
118
|
+
const result = await stripSecure({
|
|
119
|
+
file: options.file,
|
|
120
|
+
directory: options.dir,
|
|
121
|
+
dryRun: options.dryRun,
|
|
122
|
+
});
|
|
123
|
+
if (!result.success) {
|
|
124
|
+
console.error(chalk.red(`Strip failed: ${result.error?.message}`));
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
if (options.dryRun) {
|
|
128
|
+
console.log(chalk.yellow('\nDry run complete. No files were modified.'));
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
console.log(chalk.green('\n✓ Secure prefixes stripped successfully'));
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
// Enforce command
|
|
135
|
+
program
|
|
136
|
+
.command('enforce')
|
|
137
|
+
.description('Check for unsecured sensitive properties')
|
|
138
|
+
.option('-f, --file <path>', 'Check single file')
|
|
139
|
+
.option('-d, --dir <path>', 'Check all XML files in directory (default: src/main/mule)')
|
|
140
|
+
.action(async (options) => {
|
|
141
|
+
const result = await enforceSecure({
|
|
142
|
+
file: options.file,
|
|
143
|
+
directory: options.dir,
|
|
144
|
+
});
|
|
145
|
+
if (!result.success) {
|
|
146
|
+
console.error(chalk.red(`Enforce failed: ${result.error?.message}`));
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
if (result.data?.valid) {
|
|
150
|
+
console.log(chalk.green('\n✓ All sensitive properties are properly secured'));
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
console.log(chalk.red(`\n✗ Found ${result.data?.violations.length} unsecured properties`));
|
|
154
|
+
process.exit(1);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
return program;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Run the CLI
|
|
161
|
+
*/
|
|
162
|
+
export async function run(args = process.argv) {
|
|
163
|
+
const program = createProgram();
|
|
164
|
+
await program.parseAsync(args);
|
|
165
|
+
}
|
|
166
|
+
// Run CLI if this is the main module
|
|
167
|
+
const isMainModule = process.argv[1]?.includes('cli');
|
|
168
|
+
if (isMainModule) {
|
|
169
|
+
run().catch((error) => {
|
|
170
|
+
console.error(chalk.red(`Fatal error: ${error.message}`));
|
|
171
|
+
process.exit(1);
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Loader
|
|
3
|
+
*
|
|
4
|
+
* Loads and merges configuration from mule-build.yaml with defaults.
|
|
5
|
+
*/
|
|
6
|
+
import { Result, MuleBuildConfig, ProfileConfig } from '../types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Load configuration from mule-build.yaml or use defaults
|
|
9
|
+
*/
|
|
10
|
+
export declare function loadConfig(cwd?: string): Result<MuleBuildConfig>;
|
|
11
|
+
/**
|
|
12
|
+
* Get profile configuration for an environment
|
|
13
|
+
*/
|
|
14
|
+
export declare function getProfileConfig(config: MuleBuildConfig, environment: string): ProfileConfig;
|
|
15
|
+
/**
|
|
16
|
+
* Check if configuration file exists
|
|
17
|
+
*/
|
|
18
|
+
export declare function configExists(cwd?: string): boolean;
|
|
19
|
+
//# sourceMappingURL=ConfigLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,MAAM,EAAW,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMpF;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAAC,eAAe,CAAC,CAiC/E;AAkBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,CAoB5F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAEjE"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Loader
|
|
3
|
+
*
|
|
4
|
+
* Loads and merges configuration from mule-build.yaml with defaults.
|
|
5
|
+
*/
|
|
6
|
+
import { readFileSync, existsSync } from 'fs';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import { parse } from 'yaml';
|
|
9
|
+
import { ok, err } from '../types/index.js';
|
|
10
|
+
import { DEFAULT_CONFIG, getDefaultProfile } from './defaults.js';
|
|
11
|
+
import { getProjectName } from '../engine/PomParser.js';
|
|
12
|
+
const CONFIG_FILENAME = 'mule-build.yaml';
|
|
13
|
+
/**
|
|
14
|
+
* Load configuration from mule-build.yaml or use defaults
|
|
15
|
+
*/
|
|
16
|
+
export function loadConfig(cwd = process.cwd()) {
|
|
17
|
+
const configPath = join(cwd, CONFIG_FILENAME);
|
|
18
|
+
// Start with defaults
|
|
19
|
+
let config = { ...DEFAULT_CONFIG };
|
|
20
|
+
// Try to load config file
|
|
21
|
+
if (existsSync(configPath)) {
|
|
22
|
+
try {
|
|
23
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
24
|
+
const fileConfig = parse(content);
|
|
25
|
+
// Merge with defaults
|
|
26
|
+
config = mergeConfig(config, fileConfig);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
return err(new Error(`Failed to parse ${CONFIG_FILENAME}: ${error instanceof Error ? error.message : String(error)}`));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Auto-detect project name if not set
|
|
33
|
+
if (!config.project?.name) {
|
|
34
|
+
const nameResult = getProjectName(cwd);
|
|
35
|
+
if (nameResult.success && nameResult.data) {
|
|
36
|
+
config.project = config.project ?? {};
|
|
37
|
+
config.project.name = nameResult.data;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return ok(config);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Merge two configurations, with override taking precedence
|
|
44
|
+
*/
|
|
45
|
+
function mergeConfig(base, override) {
|
|
46
|
+
return {
|
|
47
|
+
project: {
|
|
48
|
+
...base.project,
|
|
49
|
+
...override.project,
|
|
50
|
+
},
|
|
51
|
+
profiles: {
|
|
52
|
+
...base.profiles,
|
|
53
|
+
...override.profiles,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get profile configuration for an environment
|
|
59
|
+
*/
|
|
60
|
+
export function getProfileConfig(config, environment) {
|
|
61
|
+
const profile = config.profiles?.[environment];
|
|
62
|
+
if (profile) {
|
|
63
|
+
return profile;
|
|
64
|
+
}
|
|
65
|
+
// Fall back to defaults for production
|
|
66
|
+
if (environment === 'production') {
|
|
67
|
+
return getDefaultProfile('production');
|
|
68
|
+
}
|
|
69
|
+
// Unknown environment, return empty profile
|
|
70
|
+
return {
|
|
71
|
+
description: 'Default',
|
|
72
|
+
mavenProfile: undefined,
|
|
73
|
+
secureProperties: undefined,
|
|
74
|
+
includeSource: false,
|
|
75
|
+
enforceGitClean: false,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if configuration file exists
|
|
80
|
+
*/
|
|
81
|
+
export function configExists(cwd = process.cwd()) {
|
|
82
|
+
return existsSync(join(cwd, CONFIG_FILENAME));
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=ConfigLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigLoader.js","sourceRoot":"","sources":["../../../src/config/ConfigLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System Checker
|
|
3
|
+
*
|
|
4
|
+
* Pre-flight validation for mule-build operations.
|
|
5
|
+
*/
|
|
6
|
+
import { Result } from '../types/index.js';
|
|
7
|
+
export interface SystemCheckResult {
|
|
8
|
+
maven: boolean;
|
|
9
|
+
muleHome: boolean;
|
|
10
|
+
pomXml: boolean;
|
|
11
|
+
muleSourceDir: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface SystemCheckError {
|
|
14
|
+
component: string;
|
|
15
|
+
message: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Run all system checks
|
|
19
|
+
*/
|
|
20
|
+
export declare function runSystemChecks(cwd?: string): Promise<Result<SystemCheckResult>>;
|
|
21
|
+
/**
|
|
22
|
+
* Check if basic requirements for build are met
|
|
23
|
+
*/
|
|
24
|
+
export declare function canBuild(cwd?: string): Promise<Result<void>>;
|
|
25
|
+
/**
|
|
26
|
+
* Check if requirements for local run are met
|
|
27
|
+
*/
|
|
28
|
+
export declare function canRun(cwd?: string): Promise<Result<void>>;
|
|
29
|
+
//# sourceMappingURL=SystemChecker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SystemChecker.d.ts","sourceRoot":"","sources":["../../../src/config/SystemChecker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,MAAM,EAAW,MAAM,mBAAmB,CAAC;AAKpD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CA+CpC;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAWjF;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAc/E"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System Checker
|
|
3
|
+
*
|
|
4
|
+
* Pre-flight validation for mule-build operations.
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync } from 'fs';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import { ok, err } from '../types/index.js';
|
|
9
|
+
import { isMavenInstalled } from '../engine/MavenBuilder.js';
|
|
10
|
+
import { validateMuleHome } from '../engine/LocalRuntime.js';
|
|
11
|
+
import { pomExists } from '../engine/PomParser.js';
|
|
12
|
+
/**
|
|
13
|
+
* Run all system checks
|
|
14
|
+
*/
|
|
15
|
+
export async function runSystemChecks(cwd = process.cwd()) {
|
|
16
|
+
const errors = [];
|
|
17
|
+
// Check Maven
|
|
18
|
+
const mavenInstalled = await isMavenInstalled();
|
|
19
|
+
if (!mavenInstalled) {
|
|
20
|
+
errors.push({
|
|
21
|
+
component: 'maven',
|
|
22
|
+
message: 'Maven is not installed or not in PATH',
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
// Check MULE_HOME (optional, only needed for run command)
|
|
26
|
+
const muleHomeResult = validateMuleHome();
|
|
27
|
+
const muleHomeValid = muleHomeResult.success;
|
|
28
|
+
// Check pom.xml
|
|
29
|
+
const pomValid = pomExists(cwd);
|
|
30
|
+
if (!pomValid) {
|
|
31
|
+
errors.push({
|
|
32
|
+
component: 'pom.xml',
|
|
33
|
+
message: 'pom.xml not found in current directory',
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
// Check src/main/mule directory
|
|
37
|
+
const muleSourceDir = join(cwd, 'src', 'main', 'mule');
|
|
38
|
+
const muleSourceExists = existsSync(muleSourceDir);
|
|
39
|
+
if (!muleSourceExists) {
|
|
40
|
+
errors.push({
|
|
41
|
+
component: 'mule source',
|
|
42
|
+
message: 'src/main/mule directory not found',
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const result = {
|
|
46
|
+
maven: mavenInstalled,
|
|
47
|
+
muleHome: muleHomeValid,
|
|
48
|
+
pomXml: pomValid,
|
|
49
|
+
muleSourceDir: muleSourceExists,
|
|
50
|
+
};
|
|
51
|
+
if (errors.length > 0) {
|
|
52
|
+
return err(new Error(errors.map((e) => `${e.component}: ${e.message}`).join('; ')));
|
|
53
|
+
}
|
|
54
|
+
return ok(result);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check if basic requirements for build are met
|
|
58
|
+
*/
|
|
59
|
+
export async function canBuild(cwd = process.cwd()) {
|
|
60
|
+
const mavenInstalled = await isMavenInstalled();
|
|
61
|
+
if (!mavenInstalled) {
|
|
62
|
+
return err(new Error('Maven is not installed or not in PATH'));
|
|
63
|
+
}
|
|
64
|
+
if (!pomExists(cwd)) {
|
|
65
|
+
return err(new Error('pom.xml not found in current directory'));
|
|
66
|
+
}
|
|
67
|
+
return ok(undefined);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check if requirements for local run are met
|
|
71
|
+
*/
|
|
72
|
+
export async function canRun(cwd = process.cwd()) {
|
|
73
|
+
// First check build requirements
|
|
74
|
+
const buildCheck = await canBuild(cwd);
|
|
75
|
+
if (!buildCheck.success) {
|
|
76
|
+
return buildCheck;
|
|
77
|
+
}
|
|
78
|
+
// Check MULE_HOME
|
|
79
|
+
const muleHomeResult = validateMuleHome();
|
|
80
|
+
if (!muleHomeResult.success) {
|
|
81
|
+
return err(muleHomeResult.error ?? new Error('MULE_HOME is not configured'));
|
|
82
|
+
}
|
|
83
|
+
return ok(undefined);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=SystemChecker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SystemChecker.js","sourceRoot":"","sources":["../../../src/config/SystemChecker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default configuration values
|
|
3
|
+
*/
|
|
4
|
+
import { MuleBuildConfig, ProfileConfig, BuildEnvironment } from '../types/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Default profile configurations
|
|
7
|
+
*/
|
|
8
|
+
export declare const DEFAULT_PROFILES: Record<string, ProfileConfig>;
|
|
9
|
+
/**
|
|
10
|
+
* Default configuration when no config file is found
|
|
11
|
+
*/
|
|
12
|
+
export declare const DEFAULT_CONFIG: MuleBuildConfig;
|
|
13
|
+
/**
|
|
14
|
+
* Get the default profile for an environment
|
|
15
|
+
*/
|
|
16
|
+
export declare function getDefaultProfile(environment: BuildEnvironment): ProfileConfig;
|
|
17
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAQ1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,eAK5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,GAAG,aAAa,CAU9E"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default configuration values
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Default profile configurations
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_PROFILES = {
|
|
8
|
+
production: {
|
|
9
|
+
description: 'CI/CD Artifacts',
|
|
10
|
+
mavenProfile: 'prod',
|
|
11
|
+
secureProperties: 'enforce',
|
|
12
|
+
includeSource: false,
|
|
13
|
+
enforceGitClean: true,
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Default configuration when no config file is found
|
|
18
|
+
*/
|
|
19
|
+
export const DEFAULT_CONFIG = {
|
|
20
|
+
project: {
|
|
21
|
+
name: undefined, // Auto-detected from pom.xml
|
|
22
|
+
},
|
|
23
|
+
profiles: DEFAULT_PROFILES,
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Get the default profile for an environment
|
|
27
|
+
*/
|
|
28
|
+
export function getDefaultProfile(environment) {
|
|
29
|
+
return (DEFAULT_PROFILES[environment] ?? {
|
|
30
|
+
description: 'Default',
|
|
31
|
+
mavenProfile: undefined,
|
|
32
|
+
secureProperties: undefined,
|
|
33
|
+
includeSource: false,
|
|
34
|
+
enforceGitClean: false,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAkC;IAC7D,UAAU,EAAE;QACV,WAAW,EAAE,iBAAiB;QAC9B,YAAY,EAAE,MAAM;QACpB,gBAAgB,EAAE,SAAS;QAC3B,aAAa,EAAE,KAAK;QACpB,eAAe,EAAE,IAAI;KACtB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,OAAO,EAAE;QACP,IAAI,EAAE,SAAS,EAAE,6BAA6B;KAC/C;IACD,QAAQ,EAAE,gBAAgB;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAA6B;IAC7D,OAAO,CACL,gBAAgB,CAAC,WAAW,CAAC,IAAI;QAC/B,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,SAAS;QACvB,gBAAgB,EAAE,SAAS;QAC3B,aAAa,EAAE,KAAK;QACpB,eAAe,EAAE,KAAK;KACvB,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Runtime Engine
|
|
3
|
+
*
|
|
4
|
+
* Handles local Mule runtime interactions for development.
|
|
5
|
+
*/
|
|
6
|
+
import { Result, RunResult } from '../types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Get MULE_HOME from environment
|
|
9
|
+
*/
|
|
10
|
+
export declare function getMuleHome(): string | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Validate MULE_HOME is set and valid
|
|
13
|
+
*/
|
|
14
|
+
export declare function validateMuleHome(): Result<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Get the apps directory path
|
|
17
|
+
*/
|
|
18
|
+
export declare function getAppsDir(muleHome: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Get the logs directory path
|
|
21
|
+
*/
|
|
22
|
+
export declare function getLogsDir(muleHome: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Check if a port is in use
|
|
25
|
+
*/
|
|
26
|
+
export declare function isPortInUse(port: number): Promise<boolean>;
|
|
27
|
+
/**
|
|
28
|
+
* Deploy a JAR to the local Mule runtime
|
|
29
|
+
*/
|
|
30
|
+
export declare function deployToLocal(jarPath: string): Promise<Result<RunResult>>;
|
|
31
|
+
/**
|
|
32
|
+
* Start the Mule runtime with optional debug mode
|
|
33
|
+
*/
|
|
34
|
+
export declare function startMuleRuntime(options?: {
|
|
35
|
+
debug?: boolean;
|
|
36
|
+
}): Promise<Result<void>>;
|
|
37
|
+
/**
|
|
38
|
+
* Stop the Mule runtime
|
|
39
|
+
*/
|
|
40
|
+
export declare function stopMuleRuntime(): Promise<Result<void>>;
|
|
41
|
+
//# sourceMappingURL=LocalRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalRuntime.d.ts","sourceRoot":"","sources":["../../../src/engine/LocalRuntime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,MAAM,EAAW,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAI/D;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,SAAS,CAEhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,CAAC,CAiBjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQhE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAsC/E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAyB/F;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAkB7D"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Runtime Engine
|
|
3
|
+
*
|
|
4
|
+
* Handles local Mule runtime interactions for development.
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync, copyFileSync } from 'fs';
|
|
7
|
+
import { join, basename } from 'path';
|
|
8
|
+
import { ok, err } from '../types/index.js';
|
|
9
|
+
import { exec } from '../utils/exec.js';
|
|
10
|
+
import { logger } from '../utils/logger.js';
|
|
11
|
+
/**
|
|
12
|
+
* Get MULE_HOME from environment
|
|
13
|
+
*/
|
|
14
|
+
export function getMuleHome() {
|
|
15
|
+
return process.env.MULE_HOME;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Validate MULE_HOME is set and valid
|
|
19
|
+
*/
|
|
20
|
+
export function validateMuleHome() {
|
|
21
|
+
const muleHome = getMuleHome();
|
|
22
|
+
if (!muleHome) {
|
|
23
|
+
return err(new Error('MULE_HOME environment variable is not set'));
|
|
24
|
+
}
|
|
25
|
+
if (!existsSync(muleHome)) {
|
|
26
|
+
return err(new Error(`MULE_HOME directory does not exist: ${muleHome}`));
|
|
27
|
+
}
|
|
28
|
+
const muleBin = join(muleHome, 'bin', 'mule');
|
|
29
|
+
if (!existsSync(muleBin)) {
|
|
30
|
+
return err(new Error(`Mule executable not found at: ${muleBin}`));
|
|
31
|
+
}
|
|
32
|
+
return ok(muleHome);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get the apps directory path
|
|
36
|
+
*/
|
|
37
|
+
export function getAppsDir(muleHome) {
|
|
38
|
+
return join(muleHome, 'apps');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get the logs directory path
|
|
42
|
+
*/
|
|
43
|
+
export function getLogsDir(muleHome) {
|
|
44
|
+
return join(muleHome, 'logs');
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if a port is in use
|
|
48
|
+
*/
|
|
49
|
+
export async function isPortInUse(port) {
|
|
50
|
+
const result = await exec('lsof', ['-i', `:${port}`]);
|
|
51
|
+
if (!result.success) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
return result.data?.stdout.trim() !== '';
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Deploy a JAR to the local Mule runtime
|
|
58
|
+
*/
|
|
59
|
+
export async function deployToLocal(jarPath) {
|
|
60
|
+
// Validate MULE_HOME
|
|
61
|
+
const muleHomeResult = validateMuleHome();
|
|
62
|
+
if (!muleHomeResult.success || !muleHomeResult.data) {
|
|
63
|
+
return err(muleHomeResult.error ?? new Error('Invalid MULE_HOME'));
|
|
64
|
+
}
|
|
65
|
+
const muleHome = muleHomeResult.data;
|
|
66
|
+
// Validate JAR exists
|
|
67
|
+
if (!existsSync(jarPath)) {
|
|
68
|
+
return err(new Error(`JAR file not found: ${jarPath}`));
|
|
69
|
+
}
|
|
70
|
+
// Check port 8081
|
|
71
|
+
const portInUse = await isPortInUse(8081);
|
|
72
|
+
if (portInUse) {
|
|
73
|
+
return err(new Error('Port 8081 is already in use. Stop the existing Mule runtime first.'));
|
|
74
|
+
}
|
|
75
|
+
// Copy JAR to apps directory
|
|
76
|
+
const appsDir = getAppsDir(muleHome);
|
|
77
|
+
const jarName = basename(jarPath);
|
|
78
|
+
const targetPath = join(appsDir, jarName);
|
|
79
|
+
try {
|
|
80
|
+
logger.step(`Deploying ${jarName} to ${appsDir}...`);
|
|
81
|
+
copyFileSync(jarPath, targetPath);
|
|
82
|
+
logger.success(`Deployed ${jarName}`);
|
|
83
|
+
return ok({
|
|
84
|
+
deployed: true,
|
|
85
|
+
jarPath: targetPath,
|
|
86
|
+
message: `Application deployed to ${targetPath}. Mule runtime will auto-detect and deploy.`,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
return err(error instanceof Error ? error : new Error(String(error)));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Start the Mule runtime with optional debug mode
|
|
95
|
+
*/
|
|
96
|
+
export async function startMuleRuntime(options = {}) {
|
|
97
|
+
const muleHomeResult = validateMuleHome();
|
|
98
|
+
if (!muleHomeResult.success || !muleHomeResult.data) {
|
|
99
|
+
return err(muleHomeResult.error ?? new Error('Invalid MULE_HOME'));
|
|
100
|
+
}
|
|
101
|
+
const muleHome = muleHomeResult.data;
|
|
102
|
+
const muleBin = join(muleHome, 'bin', 'mule');
|
|
103
|
+
const args = ['start'];
|
|
104
|
+
if (options.debug) {
|
|
105
|
+
args.push('-debug');
|
|
106
|
+
logger.info('Starting Mule with debug enabled on port 5005');
|
|
107
|
+
}
|
|
108
|
+
logger.step('Starting Mule runtime...');
|
|
109
|
+
const result = await exec(muleBin, args, { cwd: muleHome });
|
|
110
|
+
if (!result.success) {
|
|
111
|
+
return err(result.error ?? new Error('Failed to start Mule'));
|
|
112
|
+
}
|
|
113
|
+
return ok(undefined);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Stop the Mule runtime
|
|
117
|
+
*/
|
|
118
|
+
export async function stopMuleRuntime() {
|
|
119
|
+
const muleHomeResult = validateMuleHome();
|
|
120
|
+
if (!muleHomeResult.success || !muleHomeResult.data) {
|
|
121
|
+
return err(muleHomeResult.error ?? new Error('Invalid MULE_HOME'));
|
|
122
|
+
}
|
|
123
|
+
const muleHome = muleHomeResult.data;
|
|
124
|
+
const muleBin = join(muleHome, 'bin', 'mule');
|
|
125
|
+
logger.step('Stopping Mule runtime...');
|
|
126
|
+
const result = await exec(muleBin, ['stop'], { cwd: muleHome });
|
|
127
|
+
if (!result.success) {
|
|
128
|
+
return err(result.error ?? new Error('Failed to stop Mule'));
|
|
129
|
+
}
|
|
130
|
+
return ok(undefined);
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=LocalRuntime.js.map
|