Skip to content

Commit 5e48015

Browse files
authored
[native_assets_builder] Write hook stdout and stderr to disk (#1886)
1 parent f179ec2 commit 5e48015

File tree

3 files changed

+46
-1
lines changed

3 files changed

+46
-1
lines changed

pkgs/native_assets_builder/lib/src/build_runner/build_runner.dart

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -487,12 +487,13 @@ ${e.message}
487487
'--config=${inputFile.toFilePath()}',
488488
if (resources != null) resources.toFilePath(),
489489
];
490+
final wrappedLogger = await _createFileStreamingLogger(input);
490491
final result = await runProcess(
491492
filesystem: _fileSystem,
492493
workingDirectory: workingDirectory,
493494
executable: dartExecutable,
494495
arguments: arguments,
495-
logger: logger,
496+
logger: wrappedLogger,
496497
includeParentEnvironment: false,
497498
environment: environment,
498499
);
@@ -556,6 +557,32 @@ ${e.message}
556557
}
557558
}
558559

560+
Future<Logger> _createFileStreamingLogger(HookInput input) async {
561+
final stdoutFile =
562+
_fileSystem.file(input.outputDirectory.resolve('../stdout.txt'));
563+
await stdoutFile.writeAsString('');
564+
final stderrFile =
565+
_fileSystem.file(input.outputDirectory.resolve('../stderr.txt'));
566+
await stderrFile.writeAsString('');
567+
final wrappedLogger = Logger.detached('')
568+
..level = Level.ALL
569+
..onRecord.listen((record) async {
570+
logger.log(record.level, record.message);
571+
if (record.level <= Level.INFO) {
572+
await stdoutFile.writeAsString(
573+
'${record.message}\n',
574+
mode: FileMode.append,
575+
);
576+
} else {
577+
await stderrFile.writeAsString(
578+
'${record.message}\n',
579+
mode: FileMode.append,
580+
);
581+
}
582+
});
583+
return wrappedLogger;
584+
}
585+
559586
/// Compiles the hook to kernel and caches the kernel.
560587
///
561588
/// If any of the Dart source files, or the package config changed after

pkgs/native_assets_builder/test/build_runner/build_runner_test.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,20 @@ void main() async {
4545
'${Platform.pathSeparator}build.dart',
4646
]));
4747
expect(result.encodedAssets.length, 1);
48+
49+
// Check that invocation logs are written to disk.
50+
final packgeBuildDirectory = Directory.fromUri(
51+
packageUri.resolve('.dart_tool/native_assets_builder/native_add/'));
52+
final buildDirectory =
53+
packgeBuildDirectory.listSync().single as Directory;
54+
final stdoutFile =
55+
File.fromUri(buildDirectory.uri.resolve('stdout.txt'));
56+
final stderrFile =
57+
File.fromUri(buildDirectory.uri.resolve('stderr.txt'));
58+
expect(stdoutFile.existsSync(), true);
59+
expect(stdoutFile.readAsStringSync(), contains('Some stdout.'));
60+
expect(stderrFile.existsSync(), true);
61+
expect(stderrFile.readAsStringSync(), contains('Some stderr.'));
4862
}
4963

5064
// Trigger a build, should not invoke anything.

pkgs/native_assets_builder/test_data/native_add/hook/build.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'dart:io';
6+
57
import 'package:logging/logging.dart';
68
import 'package:native_assets_cli/native_assets_cli.dart';
79
import 'package:native_toolchain_c/native_toolchain_c.dart';
@@ -25,5 +27,7 @@ void main(List<String> arguments) async {
2527
print('${record.level.name}: ${record.time}: ${record.message}');
2628
}),
2729
);
30+
stdout.writeln('Some stdout.');
31+
stderr.writeln('Some stderr.');
2832
});
2933
}

0 commit comments

Comments
 (0)