Skip to content

Commit 3630525

Browse files
authored
Shard gradle tests (flutter#34857)
1 parent 63438b9 commit 3630525

File tree

2 files changed

+89
-16
lines changed

2 files changed

+89
-16
lines changed

.cirrus.yml

+43
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,48 @@ task:
130130
container:
131131
cpu: 4
132132
memory: 12G
133+
- name: integration_tests_gradle1-linux
134+
env:
135+
SHARD: integration_tests
136+
SUBSHARD: gradle1
137+
test_script:
138+
# Unsetting CIRRUS_CHANGE_MESSAGE and CIRRUS_COMMIT_MESSAGE as they
139+
# might include non-ASCII characters which makes Gradle crash.
140+
# See: https://github.com/flutter/flutter/issues/24935
141+
# This is a temporary workaround until we figure how to properly configure
142+
# a UTF8 locale on Cirrus (or until the Gradle bug is fixed).
143+
# TODO(amirh): Set the locale to UTF8.
144+
- echo "$CIRRUS_CHANGE_MESSAGE" > /tmp/cirrus_change_message.txt
145+
- echo "$CIRRUS_COMMIT_MESSAGE" > /tmp/cirrus_commit_message.txt
146+
- export CIRRUS_CHANGE_MESSAGE=""
147+
- export CIRRUS_COMMIT_MESSAGE=""
148+
- dart --enable-asserts ./dev/bots/test.dart
149+
- export CIRRUS_CHANGE_MESSAGE=`cat /tmp/cirrus_change_message.txt`
150+
- export CIRRUS_COMMIT_MESSAGE=`cat /tmp/cirrus_commit_message.txt`
151+
container:
152+
cpu: 4
153+
memory: 12G
154+
- name: integration_tests_gradle2-linux
155+
env:
156+
SHARD: integration_tests
157+
SUBSHARD: gradle2
158+
test_script:
159+
# Unsetting CIRRUS_CHANGE_MESSAGE and CIRRUS_COMMIT_MESSAGE as they
160+
# might include non-ASCII characters which makes Gradle crash.
161+
# See: https://github.com/flutter/flutter/issues/24935
162+
# This is a temporary workaround until we figure how to properly configure
163+
# a UTF8 locale on Cirrus (or until the Gradle bug is fixed).
164+
# TODO(amirh): Set the locale to UTF8.
165+
- echo "$CIRRUS_CHANGE_MESSAGE" > /tmp/cirrus_change_message.txt
166+
- echo "$CIRRUS_COMMIT_MESSAGE" > /tmp/cirrus_commit_message.txt
167+
- export CIRRUS_CHANGE_MESSAGE=""
168+
- export CIRRUS_COMMIT_MESSAGE=""
169+
- dart --enable-asserts ./dev/bots/test.dart
170+
- export CIRRUS_CHANGE_MESSAGE=`cat /tmp/cirrus_change_message.txt`
171+
- export CIRRUS_COMMIT_MESSAGE=`cat /tmp/cirrus_commit_message.txt`
172+
container:
173+
cpu: 4
174+
memory: 12G
133175
- name: release_smoke_tests
134176
env:
135177
CLOUDSDK_CORE_DISABLE_PROMPTS: 1
@@ -328,6 +370,7 @@ docker_builder:
328370
- tool_tests-linux
329371
- build_tests-linux
330372
- integration_tests-linux
373+
- integration_tests_gradle-linux
331374
build_script: "$CIRRUS_WORKING_DIR/dev/ci/docker_linux/docker_build.sh"
332375
login_script: "$CIRRUS_WORKING_DIR/dev/ci/docker_linux/docker_login.sh"
333376
push_script: "$CIRRUS_WORKING_DIR/dev/ci/docker_linux/docker_push.sh"

dev/bots/test.dart

+46-16
Original file line numberDiff line numberDiff line change
@@ -797,19 +797,28 @@ Future<void> _verifyVersion(String filename) async {
797797
}
798798

799799
Future<void> _runIntegrationTests() async {
800-
print('Platform env vars:');
801-
802-
await _runDevicelabTest('dartdocs');
800+
final String subShard = Platform.environment['SUBSHARD'];
803801

804-
if (Platform.isLinux) {
805-
await _runDevicelabTest('flutter_create_offline_test_linux');
806-
} else if (Platform.isWindows) {
807-
await _runDevicelabTest('flutter_create_offline_test_windows');
808-
} else if (Platform.isMacOS) {
809-
await _runDevicelabTest('flutter_create_offline_test_mac');
810-
await _runDevicelabTest('module_test_ios');
802+
switch (subShard) {
803+
case 'gradle1':
804+
case 'gradle2':
805+
// This runs some gradle integration tests if the subshard is Android.
806+
await _androidGradleTests(subShard);
807+
break;
808+
default:
809+
await _runDevicelabTest('dartdocs');
810+
811+
if (Platform.isLinux) {
812+
await _runDevicelabTest('flutter_create_offline_test_linux');
813+
} else if (Platform.isWindows) {
814+
await _runDevicelabTest('flutter_create_offline_test_windows');
815+
} else if (Platform.isMacOS) {
816+
await _runDevicelabTest('flutter_create_offline_test_mac');
817+
await _runDevicelabTest('module_test_ios');
818+
}
819+
// This does less work if the subshard isn't Android.
820+
await _androidPluginTest();
811821
}
812-
await _integrationTestsAndroidSdk();
813822
}
814823

815824
Future<void> _runDevicelabTest(String testName, {Map<String, String> env}) async {
@@ -821,12 +830,19 @@ Future<void> _runDevicelabTest(String testName, {Map<String, String> env}) async
821830
);
822831
}
823832

824-
Future<void> _integrationTestsAndroidSdk() async {
833+
String get androidSdkRoot {
825834
final String androidSdkRoot = (Platform.environment['ANDROID_HOME']?.isEmpty ?? true)
826835
? Platform.environment['ANDROID_SDK_ROOT']
827836
: Platform.environment['ANDROID_HOME'];
828837
if (androidSdkRoot == null || androidSdkRoot.isEmpty) {
829-
print('No Android SDK detected, skipping Android Integration Tests');
838+
return null;
839+
}
840+
return androidSdkRoot;
841+
}
842+
843+
Future<void> _androidPluginTest() async {
844+
if (androidSdkRoot == null) {
845+
print('No Android SDK detected, skipping Android Plugin test.');
830846
return;
831847
}
832848

@@ -835,13 +851,27 @@ Future<void> _integrationTestsAndroidSdk() async {
835851
'ANDROID_SDK_ROOT': androidSdkRoot,
836852
};
837853

854+
await _runDevicelabTest('plugin_test', env: env);
855+
}
856+
857+
Future<void> _androidGradleTests(String subShard) async {
838858
// TODO(dnfield): gradlew is crashing on the cirrus image and it's not clear why.
839-
if (!Platform.isWindows) {
859+
if (androidSdkRoot == null || Platform.isWindows) {
860+
print('No Android SDK detected or on Windows, skipping Android gradle test.');
861+
return;
862+
}
863+
864+
final Map<String, String> env = <String, String> {
865+
'ANDROID_HOME': androidSdkRoot,
866+
'ANDROID_SDK_ROOT': androidSdkRoot,
867+
};
868+
869+
if (subShard == 'gradle1') {
840870
await _runDevicelabTest('gradle_plugin_light_apk_test', env: env);
841871
await _runDevicelabTest('gradle_plugin_fat_apk_test', env: env);
872+
}
873+
if (subShard == 'gradle2') {
842874
await _runDevicelabTest('gradle_plugin_bundle_test', env: env);
843875
await _runDevicelabTest('module_test', env: env);
844876
}
845-
// note: this also covers plugin_test_win as long as Windows has an Android SDK available.
846-
await _runDevicelabTest('plugin_test', env: env);
847877
}

0 commit comments

Comments
 (0)