execute method

  1. @override
Future<NativeStepResult> execute(
  1. NativeBuildContext context,
  2. ResolvedSource source
)
override

Execute this build step.

The context provides access to the build configuration and logger. Returns a NativeStepResult containing any artifacts produced by this step.

Implementation

@override
Future<NativeStepResult> execute(
  NativeBuildContext context,
  ResolvedSource source,
) async {
  final logger = context.logger;
  logger?.info('[$id] Starting command step');
  final r = runner ?? ProcessRunner(logger: logger);
  final workDirPath = workingDirectory == null
      ? context.directories.work.path
      : expandRecipeValue(workingDirectory!, context, source);
  final workDir = Directory(
    p.isAbsolute(workDirPath)
        ? workDirPath
        : p.join(context.directories.work.path, workDirPath),
  );
  final env = environment == null
      ? null
      : expandRecipeStringMap(environment!, context, source);

  for (final cmd in expandRecipeCommands(commands, context, source)) {
    logger?.info('[$id] Running: ${cmd.join(' ')}');
    await r.runStreaming(
      cmd[0],
      cmd.sublist(1),
      workingDirectory: workDir,
      environment: env,
    );
    logger?.info('[$id] Command completed');
  }

  return const NativeStepResult();
}