CLI update

This commit is contained in:
leedongmyung[desktop] 2023-11-18 14:31:02 +09:00
parent 93441b0430
commit 60f1d6298e
3 changed files with 109 additions and 89 deletions

View file

@ -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();

View file

@ -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 {

View file

@ -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;
}