Skip to content

Commit

Permalink
Fix Dart 3 dev CI builds (#3422)
Browse files Browse the repository at this point in the history
* Fix build_web_compilers test fixture sdk constraints to allow dart 3.x.

* add utility to check if unsound null safety is supported, use it to omit some tests

* skip configurable uri test on windows CI

* skip some of the null safety tests as well
  • Loading branch information
jakemac53 committed Dec 12, 2022
1 parent cf0671c commit 3797325
Show file tree
Hide file tree
Showing 10 changed files with 374 additions and 108 deletions.
366 changes: 297 additions & 69 deletions .github/workflows/dart.yml

Large diffs are not rendered by default.

7 changes: 4 additions & 3 deletions _test/mono_pkg.yaml
Expand Up @@ -10,9 +10,10 @@ stages:
- analyze: --fatal-infos .
os: linux
- unit_test:
- group:
- command: dart run build_runner test -- -p chrome --test-randomize-ordering-seed=random
- command: dart run build_runner test -- -p vm test/configurable_uri_test.dart --test-randomize-ordering-seed=random
- command: dart run build_runner test -- -p chrome --test-randomize-ordering-seed=random
# TODO(https://github.com/dart-lang/build/issues/3423): restore this on windows
- command: dart run build_runner test -- -p vm test/configurable_uri_test.dart --test-randomize-ordering-seed=random
os: linux
- e2e_test:
- test: --total-shards 3 --shard-index 0 --test-randomize-ordering-seed=random
os: linux
Expand Down
4 changes: 4 additions & 0 deletions _test_common/lib/sdk.dart
Expand Up @@ -8,11 +8,15 @@ import 'dart:io';
// ignore: implementation_imports
import 'package:build_runner_core/src/util/constants.dart';
import 'package:path/path.dart' as p;
import 'package:pub_semver/pub_semver.dart';
import 'package:test/test.dart';
import 'package:test_descriptor/test_descriptor.dart' as d;

String _dartBinary = p.join(sdkBin, 'dart');

final bool supportsUnsoundNullSafety =
Version.parse(Platform.version.split(' ').first).major == 2;

/// Runs `pub get` on [package] (which is assumed to be in a directory with
/// that name under the [d.sandbox] directory).
Future<ProcessResult> pubGet(String package, {bool offline = true}) async {
Expand Down
1 change: 1 addition & 0 deletions _test_common/pubspec.yaml
Expand Up @@ -14,6 +14,7 @@ dependencies:
logging: ^1.0.0
package_config: ^2.0.0
path: ^1.8.0
pub_semver: ^2.0.0
test: ^1.16.0
test_descriptor: ^2.0.0
watcher: ^1.0.0
Expand Down
10 changes: 8 additions & 2 deletions _test_null_safety/mono_pkg.yaml
Expand Up @@ -12,12 +12,18 @@ stages:
sdk: dev
- e2e_test:
- group:
- command: dart run build_runner test -- -p chrome,vm --test-randomize-ordering-seed=random
- command: dart run build_runner test -- -p chrome --test-randomize-ordering-seed=random
- command: dart run build_runner test --define="build_web_compilers:entrypoint=compiler=dart2js" -- -p chrome --test-randomize-ordering-seed=random
# TODO(https://github.com/dart-lang/build/issues/3423): restore this on windows
- command: dart run build_runner test -- -p vm --test-randomize-ordering-seed=random
os: linux
# This stage is configured to only run for scheduled builds (see mono_repo.yaml)
- e2e_test_cron:
- group:
- command: dart run build_runner test -- -p chrome,vm --test-randomize-ordering-seed=random
- command: dart run build_runner test -- -p chrome --test-randomize-ordering-seed=random
- command: dart run build_runner test --define="build_web_compilers:entrypoint=compiler=dart2js" -- -p chrome --test-randomize-ordering-seed=random
sdk:
- be/raw/latest
# TODO(https://github.com/dart-lang/build/issues/3423): restore this on windows
- command: dart run build_runner test -- -p vm --test-randomize-ordering-seed=random
os: linux
Expand Up @@ -140,57 +140,69 @@ environment:
buildYaml,
d.dir('lib', [d.file('builder.dart', '')]),
]).create();
await runPub('a', 'get');
var pubGetResult = await runPub('a', 'get');
expect(pubGetResult.exitCode, 0,
reason: 'stdout: ${pubGetResult.stdout}\n\n'
'stderr: ${pubGetResult.stderr}');

final options = await findBuildScriptOptions(
packageGraph: await PackageGraph.forPath('${d.sandbox}/a'));
expect(options.canRunWithSoundNullSafety, isTrue);
});

test('when the root package opts out', () async {
await d.dir('a', [
d.file('pubspec.yaml', '''
if (supportsUnsoundNullSafety) {
test('when the root package opts out', () async {
await d.dir('a', [
d.file('pubspec.yaml', '''
name: a
environment:
sdk: '>=2.9.0 <3.0.0'
'''),
d.dir('lib', [d.file('builder.dart', '')]),
]).create();
await runPub('a', 'get');
d.dir('lib', [d.file('builder.dart', '')]),
]).create();
var pubGetResult = await runPub('a', 'get');
expect(pubGetResult.exitCode, 0,
reason: 'stdout: ${pubGetResult.stdout}\n\n'
'stderr: ${pubGetResult.stderr}');

final options = await findBuildScriptOptions(
packageGraph: await PackageGraph.forPath('${d.sandbox}/a'));
expect(options.canRunWithSoundNullSafety, isFalse);
});
final options = await findBuildScriptOptions(
packageGraph: await PackageGraph.forPath('${d.sandbox}/a'));
expect(options.canRunWithSoundNullSafety, isFalse);
});

test('when a builder-defining package opts out', () async {
await d.dir('a', [
d.file('pubspec.yaml', '''
test('when a builder-defining package opts out', () async {
await d.dir('a', [
d.file('pubspec.yaml', '''
name: a
environment:
sdk: '>=2.12.0 <3.0.0'
dependencies:
b:
path: ../b/
'''),
]).create();
await d.dir('b', [
d.file('pubspec.yaml', '''
]).create();
await d.dir('b', [
d.file('pubspec.yaml', '''
name: b
environment:
sdk: '>=2.9.0 <3.0.0'
'''),
buildYaml,
d.dir('lib', [
d.file('builder.dart', ''),
]),
]).create();
await runPub('a', 'get');
buildYaml,
d.dir('lib', [
d.file('builder.dart', ''),
]),
]).create();
await runPub('a', 'get');
var pubGetResult = await runPub('a', 'get');
expect(pubGetResult.exitCode, 0,
reason: 'stdout: ${pubGetResult.stdout}\n\n'
'stderr: ${pubGetResult.stderr}');

final options = await findBuildScriptOptions(
packageGraph: await PackageGraph.forPath('${d.sandbox}/a'));
expect(options.canRunWithSoundNullSafety, isFalse);
});
final options = await findBuildScriptOptions(
packageGraph: await PackageGraph.forPath('${d.sandbox}/a'));
expect(options.canRunWithSoundNullSafety, isFalse);
});
}

test('when a builder-defining library ops out', () async {
await d.dir('a', [
Expand All @@ -203,6 +215,10 @@ environment:
d.dir('lib', [d.file('builder.dart', '// @dart=2.9')]),
]).create();
await runPub('a', 'get');
var pubGetResult = await runPub('a', 'get');
expect(pubGetResult.exitCode, 0,
reason: 'stdout: ${pubGetResult.stdout}\n\n'
'stderr: ${pubGetResult.stderr}');

final options = await findBuildScriptOptions(
packageGraph: await PackageGraph.forPath('${d.sandbox}/a'));
Expand All @@ -227,6 +243,10 @@ builders:
d.dir('tool', [d.file('builder.dart', '//@dart=2.9')]),
]).create();
await runPub('a', 'get');
var pubGetResult = await runPub('a', 'get');
expect(pubGetResult.exitCode, 0,
reason: 'stdout: ${pubGetResult.stdout}\n\n'
'stderr: ${pubGetResult.stderr}');

final options = await findBuildScriptOptions(
packageGraph: await PackageGraph.forPath('${d.sandbox}/a'));
Expand All @@ -251,6 +271,10 @@ builders:
d.dir('tool', [d.file('builder.dart', '')]),
]).create();
await runPub('a', 'get');
var pubGetResult = await runPub('a', 'get');
expect(pubGetResult.exitCode, 0,
reason: 'stdout: ${pubGetResult.stdout}\n\n'
'stderr: ${pubGetResult.stderr}');

final options = await findBuildScriptOptions(
packageGraph: await PackageGraph.forPath('${d.sandbox}/a'));
Expand Down
4 changes: 3 additions & 1 deletion build_vm_compilers/test/vm_kernel_integration_test.dart
Expand Up @@ -9,7 +9,9 @@ import 'package:test/test.dart';
import 'package:test_descriptor/test_descriptor.dart' as d;

void main() {
group('without null safety', () => _runTests(false));
if (supportsUnsoundNullSafety) {
group('without null safety', () => _runTests(false));
}
group('with null safety', () => _runTests(true));
}

Expand Down
2 changes: 1 addition & 1 deletion build_web_compilers/test/fixtures/a/pubspec.yaml
@@ -1,7 +1,7 @@
name: a

environment:
sdk: ">=1.0.0 <3.0.0"
sdk: ">=1.0.0 <4.0.0"

dependencies:
b:
Expand Down
2 changes: 1 addition & 1 deletion build_web_compilers/test/fixtures/b/pubspec.yaml
@@ -1,7 +1,7 @@
name: b

environment:
sdk: ">=1.0.0 <3.0.0"
sdk: ">=1.0.0 <4.0.0"

dependencies:
a:
Expand Down
8 changes: 4 additions & 4 deletions tool/ci.sh

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 3797325

Please sign in to comment.