build_manager 기능 결합

This commit is contained in:
leedongmyung[desktop] 2023-11-04 18:53:03 +09:00
parent 3e51c48f75
commit 7cb627a88b
24 changed files with 111 additions and 47 deletions

12
.vscode/launch.json vendored
View file

@ -5,25 +5,25 @@
"version": "0.2.0", "version": "0.2.0",
"configurations": [ "configurations": [
{ {
"name": "oto_linux", "name": "stop",
"request": "launch", "request": "launch",
"type": "dart", "type": "dart",
"program": "./bin/main.dart", "program": "./bin/main.dart",
"args": ["stop"] "args": ["stop", "-h"]
}, },
{ {
"name": "oto_mac", "name": "install",
"request": "launch", "request": "launch",
"type": "dart", "type": "dart",
"program": "./bin/main.dart", "program": "./bin/main.dart",
"args": ["uninstall"] "args": ["install", "-h"]
}, },
{ {
"name": "oto_win", "name": "exe",
"request": "launch", "request": "launch",
"type": "dart", "type": "dart",
"program": "./bin/main.dart", "program": "./bin/main.dart",
"args": ["uninstall"] "args": ["exe", "-j", "-t"]
} }
] ]
} }

View file

@ -0,0 +1 @@
{"name":"Build Manager","version":"0.0.16","gitHash":"3e51c48f756f5b5d0ef9643309ebe0f3df2ce025","buildDate":"2023-11-04 18:48:24"}

View file

@ -0,0 +1,9 @@
PATH=%PATH_WIN%
#cd ../dart_framework && git pull origin master
cd ../%JOB_NAME%
call ./assets/script/check_rev.bat
set /p RESULT=<result.txt
IF "%RESULT%"=="FALSE " flutter clean && flutter packages upgrade && flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs

View file

@ -1,3 +1,4 @@
import 'package:oto_cli/cli/commands/command_exe.dart';
import 'package:oto_cli/cli/commands/command_install.dart'; import 'package:oto_cli/cli/commands/command_install.dart';
import 'package:oto_cli/cli/commands/command_start.dart'; import 'package:oto_cli/cli/commands/command_start.dart';
@ -6,11 +7,12 @@ import 'package:oto_cli/cli/commands/command_template.dart';
import 'package:oto_cli/oto/application.dart'; import 'package:oto_cli/oto/application.dart';
void main(List<String> arguments) async { void main(List<String> arguments) async {
var app = Application.to; var app = Application.instance;
CLI.initialize('OTO', arguments, [ CLI.initialize('OTO', arguments, [
CommandTemplate(), CommandTemplate(),
CommandInstall(), CommandInstall(),
CommandUninstall(), CommandUninstall(),
CommandExe(),
CommandStart(), CommandStart(),
CommandStop() CommandStop()
]); ]);

View file

@ -49,11 +49,12 @@ abstract class CommandBase {
void printHelp({List<String>? append}) { void printHelp({List<String>? append}) {
var exeName = CLI.executableFileName; var exeName = CLI.executableFileName;
final argumentTag = '{ARGUMENTS}'; final argumentTag = '{ARGUMENTS}';
final argumentDesc = arguments.isEmpty ? '' : '[arguments]';
var list = [ var list = [
'', '',
getDescription(), getDescription(),
'', '',
'Usage: ${CLI.style('$exeName $name $usage', color: Color.lightGreen)}', 'Usage: ${CLI.style('$exeName $name $usage', color: Color.lightGreen)}$argumentDesc',
argumentTag, argumentTag,
]; ];

View file

@ -0,0 +1,51 @@
import 'dart:async';
import 'dart:io';
import 'package:oto_cli/cli/cli.dart';
import 'package:oto_cli/cli/commands/command_base.dart';
import 'package:dart_framework/utils/system_util.dart';
import 'package:oto_cli/oto/application.dart';
class CommandExe extends CommandBase {
@override
Map<String, List<String>> get arguments => {
'-j': ["Used when it's a Jenkins build."],
'-f {file path}': ["Run the yaml file to process."],
'-t': ["This is the setup for testing."]
};
@override
String get name => 'exe';
@override
Future execute(List<String> parameters) {
for (var item in parameters) {
if (item == '-j') {
startJenkinsBuild(parameters.contains('-t'));
break;
}
if (item.startsWith('-f ')) {
startYaml(item.replaceFirst('-f ', ''));
break;
}
}
return simpleFuture;
}
void startJenkinsBuild(bool isTest) {
Application.instance.build(isTest);
}
void startYaml(String target) {
var file = File(target);
if (file.existsSync()) {
} else {
print(
CLI.style('There are no files in path "$target"', color: Color.red));
}
}
@override
String getDescription() {
return ':::: Read documents written in yaml to do process task.';
}
}

View file

@ -9,7 +9,7 @@ import 'package:oto_cli/oto/test_data.dart';
class Application { class Application {
Application._privateConstructor(); Application._privateConstructor();
static final Application _instance = Application._privateConstructor(); static final Application _instance = Application._privateConstructor();
static Application get to => _instance; static Application get instance => _instance;
Map<String, dynamic>? _property; Map<String, dynamic>? _property;
Map<String, dynamic>? get property { Map<String, dynamic>? get property {
@ -21,14 +21,14 @@ class Application {
return _jenkinsData; return _jenkinsData;
} }
Future<void> build(List<String> arguments) async { Future<void> build(bool isTest) async {
// await test(); // await test();
// return; // return;
Map<String, dynamic>? buildMap; Map<String, dynamic>? buildMap;
Map<String, dynamic>? jenkinsMap; Map<String, dynamic>? jenkinsMap;
var envArgs = envArguments(arguments); // var envArgs = envArguments(arguments);
bool isTest = envArgs.containsKey('isTest'); //for Unit Test // bool isTest = envArgs.containsKey('isTest'); //for Unit Test
if (isTest) { if (isTest) {
//Test map //Test map
buildMap = TestData.buildMap; buildMap = TestData.buildMap;
@ -41,14 +41,15 @@ class Application {
print('Start build...'); print('Start build...');
String jsonStr = ''; String jsonStr = '';
if (Platform.isMacOS || Platform.isLinux) { if (Platform.isMacOS || Platform.isLinux) {
await Process.run('zsh', ['./lib/shell/jenkins_env_params.sh']) await Process.run('zsh', [
.then((ProcessResult result) => jsonStr = result.stdout); '${Directory.current.path}/assets/script/jenkins_env_params.sh'
]).then((ProcessResult result) => jsonStr = result.stdout);
jenkinsMap = getMapFromJson(jsonStr)!; jenkinsMap = getMapFromJson(jsonStr)!;
} else if (Platform.isWindows) { } else if (Platform.isWindows) {
print('Win Test!!'); print('Win Test!!');
await Process.run('cmd', [ await Process.run('cmd', [
'/C', '/C',
'${Directory.current.path}/lib/shell/jenkins_env_params.bat' '${Directory.current.path}/assets/script/jenkins_env_params.bat'
]).then((ProcessResult result) => jsonStr = result.stdout); ]).then((ProcessResult result) => jsonStr = result.stdout);
jenkinsMap = getMapFromJson(jsonStr); jenkinsMap = getMapFromJson(jsonStr);
} else { } else {
@ -69,7 +70,7 @@ class Application {
buildMap = getMapFromYaml(buildStr); buildMap = getMapFromYaml(buildStr);
} }
execute(buildMap!); await execute(buildMap!);
} }
} }
@ -91,7 +92,6 @@ class Application {
c.complete(); c.complete();
printBuildStep('Build Successfully Complete'); printBuildStep('Build Successfully Complete');
exit(0); exit(0);
return c.future;
} }
void printBuildStep(String name) { void printBuildStep(String name) {

View file

@ -11,7 +11,7 @@ class CreateAppData implements Command {
@override @override
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var jenkins = Application.to.jenkinsData!; var jenkins = Application.instance.jenkinsData!;
var data = DataAppDataCreator.fromJson(command.param); var data = DataAppDataCreator.fromJson(command.param);
var workspace = data.workspace ?? jenkins.workspace; var workspace = data.workspace ?? jenkins.workspace;
workspace = workspace.replaceAll('\\', '/'); workspace = workspace.replaceAll('\\', '/');

View file

@ -19,7 +19,7 @@ class BuildDart implements Command {
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var data = DataBuildDart.fromJson(command.param); var data = DataBuildDart.fromJson(command.param);
var workspace = Path.getNormal(Application.to.jenkinsData!.workspace); var workspace = Path.getNormal(Application.instance.jenkinsData!.workspace);
var targetPath = var targetPath =
Path.getNormal(Command.replaceTag(data.targetPath ?? workspace)); Path.getNormal(Command.replaceTag(data.targetPath ?? workspace));

View file

@ -16,7 +16,7 @@ class BuildDartCompile extends BuildDart {
var c = Completer<StringBuffer>(); var c = Completer<StringBuffer>();
var data = DataBuildDartCompile.fromJson(command.param); var data = DataBuildDartCompile.fromJson(command.param);
var extension = getExeExtension(); var extension = getExeExtension();
var workspace = Path.getNormal(Application.to.jenkinsData!.workspace); var workspace = Path.getNormal(Application.instance.jenkinsData!.workspace);
var targetPath = var targetPath =
Path.getNormal(Command.replaceTag(data.targetPath ?? workspace)); Path.getNormal(Command.replaceTag(data.targetPath ?? workspace));
var binPath = path.join(targetPath, 'bin'); var binPath = path.join(targetPath, 'bin');

View file

@ -11,7 +11,7 @@ class BuildDotNet implements Command {
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var data = DataBuildDotNet.fromJson(command.param); var data = DataBuildDotNet.fromJson(command.param);
var workspace = Application.to.jenkinsData!.workspace; var workspace = Application.instance.jenkinsData!.workspace;
var shell = StringBuffer(); var shell = StringBuffer();
// shell.writeln('C:\\Windows\\System32\\chcp.com 65001'); // shell.writeln('C:\\Windows\\System32\\chcp.com 65001');
shell.writeln('cd $workspace'); shell.writeln('cd $workspace');

View file

@ -13,7 +13,7 @@ class BuildiOS implements Command {
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var data = DataBuildiOS.fromJson(command.param); var data = DataBuildiOS.fromJson(command.param);
var workspace = Path.getNormal(Application.to.jenkinsData!.workspace); var workspace = Path.getNormal(Application.instance.jenkinsData!.workspace);
var workspacePath = Path.getNormal(Command.replaceTag(data.workspacePath)); var workspacePath = Path.getNormal(Command.replaceTag(data.workspacePath));
var destination = data.destination ?? 'generic/platform=iOS build'; var destination = data.destination ?? 'generic/platform=iOS build';
var cleanPod = data.cleanPod ?? false; var cleanPod = data.cleanPod ?? false;
@ -60,7 +60,7 @@ class ArchiveiOS implements Command {
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var data = DataArchiveiOS.fromJson(command.param); var data = DataArchiveiOS.fromJson(command.param);
var workspace = Path.getNormal(Application.to.jenkinsData!.workspace); var workspace = Path.getNormal(Application.instance.jenkinsData!.workspace);
var workspacePath = Path.getNormal(Command.replaceTag(data.workspacePath)); var workspacePath = Path.getNormal(Command.replaceTag(data.workspacePath));
var archivePath = Path.getNormal(Command.replaceTag(data.archivePath)); var archivePath = Path.getNormal(Command.replaceTag(data.archivePath));
@ -83,7 +83,7 @@ class ExportiOS implements Command {
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var data = DataExportiOS.fromJson(command.param); var data = DataExportiOS.fromJson(command.param);
var workspace = Path.getNormal(Application.to.jenkinsData!.workspace); var workspace = Path.getNormal(Application.instance.jenkinsData!.workspace);
var archivePath = Path.getNormal(Command.replaceTag(data.archivePath)); var archivePath = Path.getNormal(Command.replaceTag(data.archivePath));
var exportPath = Path.getNormal(Command.replaceTag(data.exportPath)); var exportPath = Path.getNormal(Command.replaceTag(data.exportPath));
var exportOptionPlistPath = var exportOptionPlistPath =

View file

@ -87,7 +87,7 @@ abstract class Command {
tag = match!.group(2)!; tag = match!.group(2)!;
if (tag.startsWith('common')) { if (tag.startsWith('common')) {
var key = tag.replaceFirst('common.', ''); var key = tag.replaceFirst('common.', '');
Application.to.property![key] = value; Application.instance.property![key] = value;
} }
} }
@ -95,7 +95,7 @@ abstract class Command {
var setted = false; var setted = false;
dynamic data; dynamic data;
if (value.startsWith('common.')) { if (value.startsWith('common.')) {
var map = Application.to.property; var map = Application.instance.property;
var param = value.replaceFirst('common.', ''); var param = value.replaceFirst('common.', '');
if (map!.containsKey(param)) { if (map!.containsKey(param)) {
data = map[param]; data = map[param];
@ -127,8 +127,8 @@ class SimpleCommand implements Command {
@override @override
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var common = Application.to.property; var common = Application.instance.property;
var jenkins = Application.to.jenkinsData; var jenkins = Application.instance.jenkinsData;
print(command.param); print(command.param);
//Start here //Start here
c.complete(true); c.complete(true);

View file

@ -10,8 +10,8 @@ class Copy implements Command {
@override @override
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var common = Application.to.property; var common = Application.instance.property;
var jenkins = Application.to.jenkinsData; var jenkins = Application.instance.jenkinsData;
var data = DataCopy.fromJson(command.param); var data = DataCopy.fromJson(command.param);
var result = true; var result = true;
var isMove = data.isMove == null ? false : data.isMove!; var isMove = data.isMove == null ? false : data.isMove!;

View file

@ -9,8 +9,8 @@ class Delete implements Command {
@override @override
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var common = Application.to.property; var common = Application.instance.property;
var jenkins = Application.to.jenkinsData; var jenkins = Application.instance.jenkinsData;
var data = DataDelete.fromJson(command.param); var data = DataDelete.fromJson(command.param);
var result = true; var result = true;
try { try {

View file

@ -11,8 +11,8 @@ class Rename implements Command {
@override @override
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var common = Application.to.property; var common = Application.instance.property;
var jenkins = Application.to.jenkinsData; var jenkins = Application.instance.jenkinsData;
var data = DataRename.fromJson(command.param); var data = DataRename.fromJson(command.param);
var result = true; var result = true;
var entries = data.renameMap.entries; var entries = data.renameMap.entries;

View file

@ -9,8 +9,8 @@ class Shell implements Command {
@override @override
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var common = Application.to.property; var common = Application.instance.property;
var jenkins = Application.to.jenkinsData!; var jenkins = Application.instance.jenkinsData!;
var data = DataShell.fromJson(command.param); var data = DataShell.fromJson(command.param);
print(command.param); print(command.param);
//Start here //Start here

View file

@ -29,7 +29,8 @@ class Uploader implements Command {
'========================= [Connected! Start Upload] ================'); '========================= [Connected! Start Upload] ================');
var entries = map.entries; var entries = map.entries;
for (var entry in entries) { for (var entry in entries) {
var local = path.join(Application.to.jenkinsData!.workspace, entry.key); var local =
path.join(Application.instance.jenkinsData!.workspace, entry.key);
var remote = entry.value; var remote = entry.value;
print('[Upload]: $local ====> $remote'); print('[Upload]: $local ====> $remote');

View file

@ -9,8 +9,8 @@ class ExecuteApp implements Command {
@override @override
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var common = Application.to.property; var common = Application.instance.property;
var jenkins = Application.to.jenkinsData; var jenkins = Application.instance.jenkinsData;
var data = DataExecuteApp.fromJson(command.param); var data = DataExecuteApp.fromJson(command.param);
var exe = Command.replaceTag(data.executable); var exe = Command.replaceTag(data.executable);

View file

@ -15,7 +15,7 @@ class PublishiOS implements Command {
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var data = DataPublishiOS.fromJson(command.param); var data = DataPublishiOS.fromJson(command.param);
var workspace = Path.getNormal(Application.to.jenkinsData!.workspace); var workspace = Path.getNormal(Application.instance.jenkinsData!.workspace);
var menifestURL = Command.replaceTag(data.menifestURL); var menifestURL = Command.replaceTag(data.menifestURL);
var destinationPath = Command.replaceTag(data.destinationPath); var destinationPath = Command.replaceTag(data.destinationPath);

View file

@ -10,8 +10,8 @@ class Slack implements Command {
@override @override
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var common = Application.to.property; var common = Application.instance.property;
var jenkins = Application.to.jenkinsData; var jenkins = Application.instance.jenkinsData;
var data = DataSlack.fromJson(command.param); var data = DataSlack.fromJson(command.param);
var result = true; var result = true;
@ -26,8 +26,8 @@ class SlackBuild implements Command {
@override @override
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var common = Application.to.property; var common = Application.instance.property;
var jenkins = Application.to.jenkinsData; var jenkins = Application.instance.jenkinsData;
var data = DataSlackBuild.fromJson(command.param); var data = DataSlackBuild.fromJson(command.param);
var result = true; var result = true;

View file

@ -11,8 +11,8 @@ class Zip implements Command {
@override @override
Future<bool> execute(DataCommand command) async { Future<bool> execute(DataCommand command) async {
Completer<bool> c = Completer<bool>(); Completer<bool> c = Completer<bool>();
var common = Application.to.property; var common = Application.instance.property;
var jenkins = Application.to.jenkinsData; var jenkins = Application.instance.jenkinsData;
var data = DataZip.fromJson(command.param); var data = DataZip.fromJson(command.param);
try { try {
var zipFilePath = Path.getNormal(Command.replaceTag(data.zipFile)); var zipFilePath = Path.getNormal(Command.replaceTag(data.zipFile));

View file

@ -1 +0,0 @@