CLI update
This commit is contained in:
parent
93441b0430
commit
60f1d6298e
3 changed files with 109 additions and 89 deletions
|
|
@ -1,4 +1,5 @@
|
|||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:dart_framework/utils/system_util.dart';
|
||||
|
|
@ -103,33 +104,36 @@ class CLI {
|
|||
|
||||
static String style(String message,
|
||||
{Color? color, Color? background, Style? style}) {
|
||||
// if (Platform.isWindows) {
|
||||
// return message;
|
||||
// } else {
|
||||
return printer.getStyle(message,
|
||||
color: color, background: background, style: style);
|
||||
// }
|
||||
}
|
||||
|
||||
static final commandNameSpace = 18;
|
||||
static get serviceName => CLI.current.config.serviceName;
|
||||
static get executableFileName => CLI.current.config.executableFileName;
|
||||
|
||||
static Future print(List<String> printList) async {
|
||||
static Future print(List<String> printList, {Color? color}) async {
|
||||
if (color != null) {
|
||||
for (var i = 0; i < printList.length; ++i) {
|
||||
printList[i] = CLI.style(printList[i], color: color);
|
||||
}
|
||||
}
|
||||
await printer.printCLI(printList);
|
||||
return simpleFuture;
|
||||
}
|
||||
|
||||
static Future printBuffer(StringBuffer buffer) async {
|
||||
return await printString(buffer.toString());
|
||||
static Future printBuffer(StringBuffer buffer, {Color? color}) async {
|
||||
return await printString(buffer.toString(), color: color);
|
||||
}
|
||||
|
||||
static Future printString(String str) async {
|
||||
return await print(str.split('\n'));
|
||||
static Future printString(String str, {Color? color}) async {
|
||||
str = str.replaceAll('\r', '');
|
||||
return await print(str.split('\n'), color: color);
|
||||
}
|
||||
|
||||
static Future println(String str, Color color) async {
|
||||
return await printString(CLI.style(str, color: color));
|
||||
static Future println(String str, {Color? color}) async {
|
||||
str = str.replaceAll('\n', '').replaceAll('\r', '');
|
||||
return await printString(str, color: color);
|
||||
}
|
||||
|
||||
late CLIConfig config;
|
||||
|
|
@ -214,39 +218,53 @@ class _PrinterWindows extends Printer {
|
|||
Future printCLI(List<String> printList) async {
|
||||
var c = Completer();
|
||||
StringBuffer message = StringBuffer();
|
||||
message.writeln('@echo off');
|
||||
message.writeln('setlocal');
|
||||
message.writeln('call :setESC');
|
||||
message.writeln('@echo off\r');
|
||||
message.writeln('chcp 65001');
|
||||
message.writeln('setlocal\r');
|
||||
message.writeln('call :setESC\r');
|
||||
|
||||
if (printList.length == 1) {
|
||||
message.writeln('echo | set /p=${printList.first}');
|
||||
} else {
|
||||
for (var item in printList) {
|
||||
item = item
|
||||
.replaceAll('^', '^^')
|
||||
.replaceAll('<', '^<')
|
||||
.replaceAll('>', '^>')
|
||||
.replaceAll('[', '^[')
|
||||
.replaceAll('╷', '^╷')
|
||||
.replaceAll('│', '^│')
|
||||
.replaceAll('╵', '^╵')
|
||||
.replaceAll(']', '^]')
|
||||
.replaceAll('|', '^|')
|
||||
.replaceAll('\r', '')
|
||||
.replaceAll('\n', '');
|
||||
if (item.trim().isEmpty) {
|
||||
message.writeln('echo.');
|
||||
message.writeln('echo.\r');
|
||||
} else {
|
||||
item = item
|
||||
// .replaceAll('<', '^<')
|
||||
// .replaceAll('>', '^>')
|
||||
// .replaceAll('[', '^[')
|
||||
.replaceAll(']', '^]')
|
||||
.replaceAll('|', '^|')
|
||||
.replaceAll('\n', '');
|
||||
message.writeln('echo $item');
|
||||
message.writeln('echo $item\r');
|
||||
}
|
||||
}
|
||||
}
|
||||
message.writeln(':setESC');
|
||||
message.writeln(':setESC\r');
|
||||
message.writeln(
|
||||
'''for /F "tokens=1,2 delims=#" %%a in ('"prompt #\$H#\$E# & echo on & for %%b in (1) do rem"') do (''');
|
||||
message.writeln(' set ESC=%%b');
|
||||
message.writeln(' exit /B 0');
|
||||
message.writeln(')');
|
||||
// message.writeln('exit /B 0');
|
||||
'''for /F "tokens=1,2 delims=#" %%a in ('"prompt #\$H#\$E# & echo on & for %%b in (1) do rem"') do (\r''');
|
||||
message.writeln(' set ESC=%%b\r');
|
||||
message.writeln(' exit /B 0\r');
|
||||
message.writeln(')\r');
|
||||
message.writeln('exit /B 0\r');
|
||||
|
||||
var temp = await getTempFile(message.toString(), 'bat');
|
||||
await Process.run('cmd', ['/C', temp.path]).then((ProcessResult result) {
|
||||
await Process.run('cmd', ['/C', temp.path],
|
||||
stderrEncoding: utf8, stdoutEncoding: utf8)
|
||||
.then((ProcessResult result) {
|
||||
print(result.stdout);
|
||||
|
||||
String error = result.stderr;
|
||||
if (error.isNotEmpty) {
|
||||
print(
|
||||
'=============== Error ===============\r\n${result.stderr}\r\n\r\nr\n=============== Script ===============\r\n${message.toString()}');
|
||||
}
|
||||
});
|
||||
await temp.delete();
|
||||
c.complete();
|
||||
|
|
|
|||
|
|
@ -35,9 +35,8 @@ class CommandManager {
|
|||
}
|
||||
|
||||
if (!printHelp) {
|
||||
await CLI.print([
|
||||
CLI.style('Execute command: $command$argStr', color: Color.green)
|
||||
]);
|
||||
await CLI.println('Execute command: $command$argStr',
|
||||
color: Color.green);
|
||||
await commandItem.execute(parameters);
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -27,73 +27,77 @@ class Application {
|
|||
}
|
||||
|
||||
Future<void> build(BuildType buildType, {String? yamlContent}) async {
|
||||
// setKorean();
|
||||
setUTF8();
|
||||
|
||||
Map<String, dynamic>? buildMap;
|
||||
Map<String, dynamic>? jenkinsMap;
|
||||
String buildContent = '';
|
||||
// var envArgs = envArguments(arguments);
|
||||
// bool isTest = envArgs.containsKey('isTest'); //for Unit Test
|
||||
switch (buildType) {
|
||||
case BuildType.test:
|
||||
//Test map
|
||||
_jenkinsData = DataJenkins.fromJson(TestData.jenkinsMap!);
|
||||
buildMap = TestData.buildMap;
|
||||
print('Start test build...');
|
||||
break;
|
||||
try {
|
||||
switch (buildType) {
|
||||
case BuildType.test:
|
||||
//Test map
|
||||
_jenkinsData = DataJenkins.fromJson(TestData.jenkinsMap!);
|
||||
buildMap = TestData.buildMap;
|
||||
print('Start test build...');
|
||||
break;
|
||||
|
||||
case BuildType.jenkins:
|
||||
String os = Platform.operatingSystem;
|
||||
var enable = true;
|
||||
print('Current OS: $os');
|
||||
print('Start build...');
|
||||
String jsonStr = '';
|
||||
if (Platform.isMacOS || Platform.isLinux) {
|
||||
await Process.run('zsh', [
|
||||
'${Directory.current.path}/assets/script/shell/jenkins_env_params.sh'
|
||||
]).then((ProcessResult result) => jsonStr = result.stdout);
|
||||
jenkinsMap = getMapFromJson(jsonStr)!;
|
||||
} else if (Platform.isWindows) {
|
||||
await Process.run('cmd', [
|
||||
'/C',
|
||||
'${Directory.current.path}/assets/script/batch/jenkins_env_params.bat'
|
||||
]).then((ProcessResult result) => jsonStr = result.stdout);
|
||||
jsonStr = jsonStr.substring(jsonStr.indexOf('{'));
|
||||
jsonStr = jsonStr.replaceAll('\\', '/');
|
||||
jenkinsMap = getMapFromJson(jsonStr);
|
||||
} else {
|
||||
enable = false;
|
||||
print(
|
||||
'is not Mac/Windows/Linux. build must be execute in Mac/Windows os system');
|
||||
}
|
||||
if (enable) {
|
||||
await printBuildStep('Jenkins Variables');
|
||||
print(jsonStr);
|
||||
}
|
||||
_jenkinsData = DataJenkins.fromJson(jenkinsMap!);
|
||||
buildContent = await getBuildData();
|
||||
buildMap = getMapFromYaml(buildContent);
|
||||
break;
|
||||
case BuildType.jenkins:
|
||||
String os = Platform.operatingSystem;
|
||||
var enable = true;
|
||||
print('Current OS: $os');
|
||||
print('Start build...');
|
||||
String jsonStr = '';
|
||||
if (Platform.isMacOS || Platform.isLinux) {
|
||||
await Process.run('zsh', [
|
||||
'${Directory.current.path}/assets/script/shell/jenkins_env_params.sh'
|
||||
]).then((ProcessResult result) => jsonStr = result.stdout);
|
||||
jenkinsMap = getMapFromJson(jsonStr)!;
|
||||
} else if (Platform.isWindows) {
|
||||
await Process.run('cmd', [
|
||||
'/C',
|
||||
'${Directory.current.path}/assets/script/batch/jenkins_env_params.bat'
|
||||
]).then((ProcessResult result) => jsonStr = result.stdout);
|
||||
jsonStr = jsonStr.substring(jsonStr.indexOf('{'));
|
||||
jsonStr = jsonStr.replaceAll('\\', '/');
|
||||
jenkinsMap = getMapFromJson(jsonStr);
|
||||
} else {
|
||||
enable = false;
|
||||
print(
|
||||
'is not Mac/Windows/Linux. build must be execute in Mac/Windows os system');
|
||||
}
|
||||
if (enable) {
|
||||
await printBuildStep('Jenkins Variables');
|
||||
print(jsonStr);
|
||||
}
|
||||
_jenkinsData = DataJenkins.fromJson(jenkinsMap!);
|
||||
buildContent = await getBuildData();
|
||||
buildMap = getMapFromYaml(buildContent);
|
||||
break;
|
||||
|
||||
case BuildType.file:
|
||||
_jenkinsData = DataJenkins.fromJson(FileData.jenkinsMap!);
|
||||
buildContent = yamlContent!;
|
||||
buildMap = getMapFromYaml(buildContent);
|
||||
break;
|
||||
case BuildType.file:
|
||||
_jenkinsData = DataJenkins.fromJson(FileData.jenkinsMap!);
|
||||
buildContent = yamlContent!;
|
||||
buildMap = getMapFromYaml(buildContent);
|
||||
break;
|
||||
}
|
||||
} on Exception catch (e) {
|
||||
await CLI.printString(e.toString(), color: Color.red);
|
||||
return;
|
||||
}
|
||||
|
||||
await CLI.println(
|
||||
'********************************* Build Data *************************************',
|
||||
Color.magenta);
|
||||
color: Color.magenta);
|
||||
print(buildContent);
|
||||
|
||||
await execute(buildMap!);
|
||||
}
|
||||
|
||||
Future setKorean() async {
|
||||
Future setUTF8() async {
|
||||
if (Platform.isWindows) {
|
||||
var data = await ProcessExecutor.start(
|
||||
StringBuffer('C:\\Windows\\System32\\chcp.com 65001'));
|
||||
var data = await ProcessExecutor.start(StringBuffer('chcp 65001'));
|
||||
var exitCode = await data.process.exitCode;
|
||||
print('======> Set Korean: ${exitCode == 0}');
|
||||
}
|
||||
|
|
@ -122,13 +126,12 @@ class Application {
|
|||
|
||||
Future printBuildStep(String name, {Color? color}) async {
|
||||
var colorIn = color ?? Color.green;
|
||||
await CLI.println(
|
||||
'************************************************************************************',
|
||||
colorIn);
|
||||
await CLI.println('* $name', colorIn);
|
||||
await CLI.println(
|
||||
'************************************************************************************',
|
||||
colorIn);
|
||||
var message =
|
||||
'''************************************************************************************
|
||||
* $name
|
||||
************************************************************************************''';
|
||||
|
||||
await CLI.printString(message, color: colorIn);
|
||||
return simpleFuture;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue