run method
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);
}