mirror of
https://github.com/flutter/packages.git
synced 2025-08-24 03:18:54 +08:00
[ci] Upload screenshots, logs, and Xcode test results for drive and integration_test runs (#7430)
1. Native Xcode tests will output a helpful "xcresult" package on failure containing logs, screenshots, and screen recordings. Zip and upload these results when tests fail. 2. Pass `flutter test --debug-logs-dir` flag to upload logs like https://github.com/flutter/flutter/pull/142643. 3. Pass `flutter drive --screenshot` flag to upload screenshots on timeout like https://github.com/flutter/flutter/pull/96973. Example of [failing Xcode analyzer build](https://ci.chromium.org/ui/p/flutter/builders/try/Mac_arm64%20ios_platform_tests_shard_5%20master/17374/overview) has the [zipped xcresult](https://storage.googleapis.com/flutter_logs/flutter/ff98c32e-18ca-4ad4-a910-9db1d7f7e4b0/xcode%20analyze/ff98c32e-18ca-4ad4-a910-9db1d7f7e4b0/xcodebuild-2024-10-25T09:56:46.440913.zip) attached as a log.  The unzipped xcresult looks like this in Xcode:  A [failing "native test" step build](https://ci.chromium.org/ui/p/flutter/builders/try/Mac_arm64%20macos_platform_tests%20master%20-%20packages/17315/overview):  Fixes https://github.com/flutter/flutter/issues/144795
This commit is contained in:
@ -228,8 +228,12 @@ class DriveExamplesCommand extends PackageLoopingCommand {
|
||||
}
|
||||
for (final File driver in drivers) {
|
||||
final List<File> failingTargets = await _driveTests(
|
||||
example, driver, testTargets,
|
||||
deviceFlags: deviceFlags);
|
||||
example,
|
||||
driver,
|
||||
testTargets,
|
||||
deviceFlags: deviceFlags,
|
||||
exampleName: exampleName,
|
||||
);
|
||||
for (final File failingTarget in failingTargets) {
|
||||
errors.add(
|
||||
getRelativePosixPath(failingTarget, from: package.directory));
|
||||
@ -376,10 +380,16 @@ class DriveExamplesCommand extends PackageLoopingCommand {
|
||||
File driver,
|
||||
List<File> targets, {
|
||||
required List<String> deviceFlags,
|
||||
required String exampleName,
|
||||
}) async {
|
||||
final List<File> failures = <File>[];
|
||||
|
||||
final String enableExperiment = getStringArg(kEnableExperiment);
|
||||
final String screenshotBasename =
|
||||
'${exampleName.replaceAll(platform.pathSeparator, '_')}-drive';
|
||||
final Directory? screenshotDirectory =
|
||||
ciLogsDirectory(platform, driver.fileSystem)
|
||||
?.childDirectory(screenshotBasename);
|
||||
|
||||
for (final File target in targets) {
|
||||
final int exitCode = await processRunner.runAndStream(
|
||||
@ -389,6 +399,8 @@ class DriveExamplesCommand extends PackageLoopingCommand {
|
||||
...deviceFlags,
|
||||
if (enableExperiment.isNotEmpty)
|
||||
'--enable-experiment=$enableExperiment',
|
||||
if (screenshotDirectory != null)
|
||||
'--screenshot=${screenshotDirectory.path}',
|
||||
'--driver',
|
||||
getRelativePosixPath(driver, from: example.directory),
|
||||
'--target',
|
||||
@ -416,6 +428,8 @@ class DriveExamplesCommand extends PackageLoopingCommand {
|
||||
required List<File> testFiles,
|
||||
}) async {
|
||||
final String enableExperiment = getStringArg(kEnableExperiment);
|
||||
final Directory? logsDirectory =
|
||||
ciLogsDirectory(platform, testFiles.first.fileSystem);
|
||||
|
||||
// Workaround for https://github.com/flutter/flutter/issues/135673
|
||||
// Once that is fixed on stable, this logic can be removed and the command
|
||||
@ -438,6 +452,7 @@ class DriveExamplesCommand extends PackageLoopingCommand {
|
||||
...deviceFlags,
|
||||
if (enableExperiment.isNotEmpty)
|
||||
'--enable-experiment=$enableExperiment',
|
||||
if (logsDirectory != null) '--debug-logs-dir=${logsDirectory.path}',
|
||||
target,
|
||||
],
|
||||
workingDir: example.directory);
|
||||
|
Reference in New Issue
Block a user