run method

  1. @override
Future<bool> run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
Future<bool> run() async {
  bool result = true;
  final closer = logger.header("Lambdas");

  logger.printFixed('   🔎 Finding lambdas');
  final String lambdasPath = path.join(rootDir, 'lambdas');
  final lambdaRoots = Directory(lambdasPath)
      .listSync(recursive: false, followLinks: false)
      .whereType<Directory>()
      .map((e) => e.path)
      .toList(growable: false)
      .sorted();
  logger.printDone('found ${lambdaRoots.length}');

  final ind = '   ';
  final subInd = ind + ind;
  for (var lambdaDir in lambdaRoots) {
    var lambdaName = path.basename(lambdaDir);
    final blockLogger = logger.collapsibleBlock(
      "Æ›  Handling $lambdaName",
      ind,
    );
    final outputName = Utils.getIaCValue(lambdaDir, 'handler');
    final zipInAssets = path.join(lambdaDir, 'assets');
    final zipInLambda = path.join(lambdaDir, '.dist', outputName);
    final zipOutput = path.join(lambdaDir, '.dist', 'lambda_$lambdaName.zip');
    final lambdaInputs = [zipInLambda];

    if (Directory(zipInAssets).existsSync()) {
      lambdaInputs.add(zipInAssets);
    }

    final testSequence = [DartTestTask(this, blockLogger)];
    final fullSequence = [
      CleanDirTask(this, blockLogger),
      PubGetTask(this, blockLogger),
      ...testSequence,
      DartCompileTask(this, blockLogger),
      ZipArchiveTask(this, blockLogger)
    ];

    useSequence(testOnly ? testSequence : fullSequence);

    result = await runSequence({
      CleanDirTask.taskName: {'target': lambdaDir, 'indent': subInd},
      PubGetTask.taskName: {'target': lambdaDir, 'indent': subInd},
      DartTestTask.taskName: {'target': lambdaDir, 'indent': subInd},
      DartCompileTask.taskName: {'target': lambdaDir, 'indent': subInd},
      ZipArchiveTask.taskName: {
        'input': lambdaInputs.join(','),
        'output': zipOutput,
        'indent': subInd
      },
    });

    result = blockLogger.close(result);
  }

  return closer(result);
}