buildProject function

Future<void> buildProject({
  1. String output = 'server',
  2. bool docker = false,
})

Compiles the current DartAPI project to a self-contained native executable via dart compile exe.

Run from inside the project directory:

dartapi build                    # produces ./server
dartapi build --output=myapp     # custom binary name
dartapi build --docker           # also writes a Dockerfile

Implementation

Future<void> buildProject({
  String output = 'server',
  bool docker = false,
}) async {
  final entrypoint = 'bin/main.dart';

  if (!File(entrypoint).existsSync()) {
    print('❌  $entrypoint not found. Run this command from your project root.');
    exit(1);
  }

  print('Building DartAPI project...');
  print('  dart compile exe $entrypoint -o $output');
  print('');

  final result = await Process.run(
    'dart',
    ['compile', 'exe', entrypoint, '-o', output],
  );

  if (result.stdout.toString().isNotEmpty) print(result.stdout);
  if (result.stderr.toString().isNotEmpty) print(result.stderr);

  if (result.exitCode != 0) {
    print('');
    print('❌  Build failed (exit code ${result.exitCode}).');
    exit(result.exitCode);
  }

  print('');
  print('******************************');
  print('Build successful → ./$output');
  print('Run with:  ./$output --port=8080');

  if (docker) {
    await _writeDockerfile(output);
    print('Dockerfile written → ./Dockerfile');
    print('Build image:  docker build -t my-app .');
    print('Run image:    docker run -p 8080:8080 my-app');
  }

  print('******************************');
}