diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000..c2e90e81 Binary files /dev/null and b/.DS_Store differ diff --git a/.idea/angel_cli.iml b/.idea/angel_cli.iml new file mode 100644 index 00000000..e673c03e --- /dev/null +++ b/.idea/angel_cli.iml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..5f91449b --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index 5f33cd5b..87776e1c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,14 @@ # angel_cli -Command-line tools for the Angel framework. \ No newline at end of file +Command-line tools for the Angel framework. + +To install: + +```bash +$ pub global activate angel_cli +``` + +And then, for information on each command: + +```bash +$ angel --help +``` \ No newline at end of file diff --git a/bin/angel.dart b/bin/angel.dart index fd9e44d0..d16d4266 100644 --- a/bin/angel.dart +++ b/bin/angel.dart @@ -16,7 +16,8 @@ main(List args) { ..addCommand(new ServiceCommand()) ..addCommand(new InitCommand()) ..addCommand(new TestCommand()) - ..addCommand(new PluginCommand()); + ..addCommand(new PluginCommand()) + ..addCommand(new StartCommand()); return runner.run(args).then((_) {}).catchError((exc) { stderr.writeln("Oops, something went wrong: $exc"); diff --git a/lib/src/commands/commands.dart b/lib/src/commands/commands.dart index 14041531..7e82dcc3 100644 --- a/lib/src/commands/commands.dart +++ b/lib/src/commands/commands.dart @@ -4,4 +4,5 @@ export "doctor.dart"; export "init.dart"; export "plugin.dart"; export "service.dart"; +export "start.dart"; export "test.dart"; \ No newline at end of file diff --git a/lib/src/commands/start.dart b/lib/src/commands/start.dart new file mode 100644 index 00000000..23ceff96 --- /dev/null +++ b/lib/src/commands/start.dart @@ -0,0 +1,63 @@ +import 'dart:io'; +import 'package:args/command_runner.dart'; +import 'package:yaml/yaml.dart'; + +class StartCommand extends Command { + @override + String get name => 'start'; + + @override + String get description => + 'Runs any `start` scripts, and then runs the server.'; + + StartCommand() : super() { + argParser.addFlag('production', + help: 'Starts the server in production mode.', + negatable: false, + defaultsTo: false); + } + + @override + run() async { + final pubspec = new File('pubspec.yaml'); + + if (await pubspec.exists()) { + // Run start scripts + final doc = loadYamlDocument(await pubspec.readAsString()); + final scriptsNode = doc.contents['scripts']; + + if (scriptsNode != null && scriptsNode.containsKey('start')) { + final scripts = scriptsNode['start'] is List + ? scriptsNode['start'] + : [scriptsNode['start']]; + + for (String script in scripts) { + final split = script.split(' '); + final result = await Process.run(split.first, split.skip(1).toList(), + stdoutEncoding: null, stderrEncoding: null); + final code = result.exitCode; + + stdout.add(result.stdout); + stderr.add(result.stderr); + + if (code != 0) { + throw new Exception("Command '$script' exited with code $code."); + } + } + } + } + + print('Starting server...'); + + final env = {}; + + if (argResults['production']) env['ANGEL_ENV'] = 'production'; + + final server = await Process.start(Platform.executable, ['bin/server.dart'], + environment: env); + server.stdout.pipe(stdout); + server.stderr.pipe(stderr); + + exitCode = await server.exitCode; + } +} diff --git a/pubspec.yaml b/pubspec.yaml index e434f181..75278ac7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: angel_cli -version: 1.0.0-dev+5 +version: 1.0.0-dev+6 description: Command-line tools for the Angel framework. author: Tobe O homepage: https://github.com/angel-dart/angel_cli