Skip to content

Commit 7f5bfa6

Browse files
authored
[hooks_runner] Support building assets for dev deps (#2342)
Bug: * #2312 Breaks the public API of the `package:hooks_runner`, needs a manual roll into Dart and Flutter.
1 parent a31d872 commit 7f5bfa6

25 files changed

+146
-17
lines changed

pkgs/code_assets/analysis_options.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ analyzer:
1212

1313
linter:
1414
rules:
15+
- avoid_positional_boolean_parameters
1516
- dangling_library_doc_comments
1617
- prefer_const_declarations
1718
- prefer_expression_function_bodies

pkgs/data_assets/analysis_options.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ analyzer:
1212

1313
linter:
1414
rules:
15+
- avoid_positional_boolean_parameters
1516
- dangling_library_doc_comments
1617
- prefer_const_declarations
1718
- prefer_expression_function_bodies

pkgs/hooks/analysis_options.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ analyzer:
1212

1313
linter:
1414
rules:
15+
- avoid_positional_boolean_parameters
1516
- dangling_library_doc_comments
1617
- prefer_const_declarations
1718
- prefer_expression_function_bodies

pkgs/hooks_runner/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 0.21.0
2+
3+
* Add `includeDevDependencies` param to `BuildLayout` to enable building the
4+
assets for dev dependencies of the `runPackage`.
5+
16
## 0.20.2
27

38
* Add `dart:developer` `TimelineEvent`s to enable performance tracing for

pkgs/hooks_runner/analysis_options.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ analyzer:
1212

1313
linter:
1414
rules:
15+
- avoid_positional_boolean_parameters
1516
- dangling_library_doc_comments
1617
- prefer_const_declarations
1718
- prefer_expression_function_bodies

pkgs/hooks_runner/lib/src/build_runner/build_planner.dart

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ class NativeAssetsBuildPlanner {
5252
final packageGraphJson = await packageGraphJsonFile.readAsString();
5353
final packageGraph = PackageGraph.fromPackageGraphJsonString(
5454
packageGraphJson,
55+
packageLayout.runPackageName,
56+
includeDevDependencies: packageLayout.includeDevDependencies,
5557
);
5658
final packageGraphFromRunPackage = packageGraph.subGraph(
5759
packageLayout.runPackageName,
@@ -182,12 +184,21 @@ class PackageGraph {
182184

183185
PackageGraph(this.map);
184186

185-
factory PackageGraph.fromPackageGraphJsonString(String json) =>
186-
PackageGraph.fromPackageGraphJson(
187-
jsonDecode(json) as Map<dynamic, dynamic>,
188-
);
187+
factory PackageGraph.fromPackageGraphJsonString(
188+
String json,
189+
String runPackageName, {
190+
required bool includeDevDependencies,
191+
}) => PackageGraph.fromPackageGraphJson(
192+
jsonDecode(json) as Map<dynamic, dynamic>,
193+
runPackageName,
194+
includeDevDependencies: includeDevDependencies,
195+
);
189196

190-
factory PackageGraph.fromPackageGraphJson(Map<dynamic, dynamic> map) {
197+
factory PackageGraph.fromPackageGraphJson(
198+
Map<dynamic, dynamic> map,
199+
String runPackageName, {
200+
required bool includeDevDependencies,
201+
}) {
191202
final result = <String, List<String>>{};
192203
final packages = map['packages'] as List<dynamic>;
193204
for (final package in packages) {
@@ -196,6 +207,14 @@ class PackageGraph {
196207
final dependencies = (package_['dependencies'] as List<dynamic>)
197208
.whereType<String>()
198209
.toList();
210+
if (name == runPackageName && includeDevDependencies) {
211+
final devDependencies =
212+
(package_['devDependencies'] as List<dynamic>?)
213+
?.whereType<String>()
214+
.toList() ??
215+
[];
216+
dependencies.addAll(devDependencies);
217+
}
199218
result[name] = dependencies;
200219
}
201220
return PackageGraph(result);

pkgs/hooks_runner/lib/src/package_layout/package_layout.dart

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,36 +34,52 @@ class PackageLayout {
3434
/// Only assets of transitive dependencies of [runPackageName] are built.
3535
final String runPackageName;
3636

37+
/// Include the dev dependencies of [runPackageName].
38+
final bool includeDevDependencies;
39+
3740
PackageLayout._(
3841
this.packageConfig,
3942
this.packageConfigUri,
40-
this.runPackageName,
41-
);
43+
this.runPackageName, {
44+
required this.includeDevDependencies,
45+
});
4246

4347
factory PackageLayout.fromPackageConfig(
4448
FileSystem fileSystem,
4549
PackageConfig packageConfig,
4650
Uri packageConfigUri,
47-
String runPackageName,
48-
) {
51+
String runPackageName, {
52+
required bool includeDevDependencies,
53+
}) {
4954
assert(fileSystem.file(packageConfigUri).existsSync());
5055
packageConfigUri = packageConfigUri.normalizePath();
51-
return PackageLayout._(packageConfig, packageConfigUri, runPackageName);
56+
return PackageLayout._(
57+
packageConfig,
58+
packageConfigUri,
59+
runPackageName,
60+
includeDevDependencies: includeDevDependencies,
61+
);
5262
}
5363

5464
static Future<PackageLayout> fromWorkingDirectory(
5565
FileSystem fileSystem,
5666
Uri workingDirectory,
57-
String runPackgeName,
58-
) async {
67+
String runPackageName, {
68+
required bool includeDevDependencies,
69+
}) async {
5970
workingDirectory = workingDirectory.normalizePath();
6071
final packageConfigUri = await findPackageConfig(
6172
fileSystem,
6273
workingDirectory,
6374
);
6475
assert(await fileSystem.file(packageConfigUri).exists());
6576
final packageConfig = await loadPackageConfigUri(packageConfigUri!);
66-
return PackageLayout._(packageConfig, packageConfigUri, runPackgeName);
77+
return PackageLayout._(
78+
packageConfig,
79+
packageConfigUri,
80+
runPackageName,
81+
includeDevDependencies: includeDevDependencies,
82+
);
6783
}
6884

6985
static Future<Uri?> findPackageConfig(

pkgs/hooks_runner/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: hooks_runner
22
description: >-
33
This package is the backend that invokes build hooks.
44
5-
version: 0.20.2
5+
version: 0.21.0
66

77
repository: https://github.com/dart-lang/native/tree/main/pkgs/hooks_runner
88

pkgs/hooks_runner/test/build_runner/build_planner_test.dart

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ void main() async {
2525
const LocalFileSystem(),
2626
nativeAddUri,
2727
'native_add',
28+
includeDevDependencies: false,
2829
);
2930
final nativeAssetsBuildPlanner =
3031
await NativeAssetsBuildPlanner.fromPackageConfigUri(
@@ -60,6 +61,7 @@ void main() async {
6061
const LocalFileSystem(),
6162
nativeAddUri,
6263
runPackageName,
64+
includeDevDependencies: false,
6365
);
6466
final nativeAssetsBuildPlanner =
6567
await NativeAssetsBuildPlanner.fromPackageConfigUri(
@@ -76,4 +78,36 @@ void main() async {
7678
});
7779
});
7880
}
81+
82+
for (final includeDevDependencies in [true, false]) {
83+
test('includeDevDependencies $includeDevDependencies', () async {
84+
const runPackageName = 'dev_dependency_with_hook';
85+
await inTempDir((tempUri) async {
86+
await copyTestProjects(targetUri: tempUri);
87+
final nativeAddUri = tempUri.resolve('$runPackageName/');
88+
89+
// First, run `pub get`, we need pub to resolve our dependencies.
90+
await runPubGet(workingDirectory: nativeAddUri, logger: logger);
91+
92+
final packageLayout = await PackageLayout.fromWorkingDirectory(
93+
const LocalFileSystem(),
94+
nativeAddUri,
95+
runPackageName,
96+
includeDevDependencies: includeDevDependencies,
97+
);
98+
final nativeAssetsBuildPlanner =
99+
await NativeAssetsBuildPlanner.fromPackageConfigUri(
100+
packageConfigUri: nativeAddUri.resolve(
101+
'.dart_tool/package_config.json',
102+
),
103+
dartExecutable: Uri.file(Platform.resolvedExecutable),
104+
logger: logger,
105+
packageLayout: packageLayout,
106+
fileSystem: const LocalFileSystem(),
107+
);
108+
final buildPlan = await nativeAssetsBuildPlanner.makeBuildHookPlan();
109+
expect(buildPlan.success.length, includeDevDependencies ? 1 : 0);
110+
});
111+
});
112+
}
79113
}

pkgs/hooks_runner/test/build_runner/build_runner_reusability_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ void main() async {
2727
const LocalFileSystem(),
2828
packageUri,
2929
packageName,
30+
includeDevDependencies: false,
3031
);
3132
final buildRunner = NativeAssetsBuildRunner(
3233
logger: logger,

0 commit comments

Comments
 (0)