Skip to content

Commit 6541238

Browse files
committed
wip
1 parent 0c3b896 commit 6541238

2 files changed

Lines changed: 52 additions & 33 deletions

File tree

.github/workflows/build-and-upload-engine-artifacts.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ env:
66
DEPOT_TOOLS_WIN_TOOLCHAIN: 0
77
FLUTTER_PREBUILT_DART_SDK: 1
88
R2_BUCKET: flutter-zero-engine
9+
ENGINE_CHECKOUT_PATH: ${{ github.workspace }}/engine
910
jobs:
1011
mac_host_debug_framework:
1112
runs-on: macos-latest
@@ -1020,7 +1021,7 @@ jobs:
10201021
- name: Run generator Verify-export-symbols
10211022
run: |
10221023
cd engine/src
1023-
flutter/testing/symbols/verify_exported.dart \
1024+
../../bin/dart flutter/testing/symbols/verify_exported.dart \
10241025
src/out/ci \
10251026
src/flutter/buildtools
10261027
- name: Run generator Debug-gen_snapshots

engine/src/flutter/tools/pkg/github_workflow_generator/lib/github_workflow_generator.dart

Lines changed: 50 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
// ignore_for_file: avoid_print, specify_nonobvious_local_variable_types, public_member_api_docs
2+
13
import 'dart:convert';
24
import 'dart:io';
3-
import 'package:args/args.dart';
4-
import 'package:path/path.dart' as path;
55

6+
import 'package:args/args.dart';
67
import 'package:engine_build_configs/engine_build_configs.dart';
8+
import 'package:path/path.dart' as path;
79

810
class YamlWriter {
911
YamlWriter() {
@@ -16,10 +18,10 @@ class YamlWriter {
1618
}
1719

1820
class YamlWriterSection {
19-
final YamlWriter writer;
20-
2121
YamlWriterSection._(this.writer, {required bool isArray}) : _isArray = isArray;
2222

23+
final YamlWriter writer;
24+
2325
void writeln(String line) {
2426
final arrayPrefix = _isArray ? '- ' : '';
2527
writer._buffer.writeln('${' ' * _indentationLevel}$arrayPrefix$line');
@@ -32,14 +34,14 @@ class YamlWriterSection {
3234

3335
YamlWriterSection beginMap(String label, [String value = '']) {
3436
write(label, value);
35-
YamlWriterSection section = YamlWriterSection._(writer, isArray: false);
37+
final section = YamlWriterSection._(writer, isArray: false);
3638
section._indentationLevel = _indentationLevel + 1;
3739
return section;
3840
}
3941

4042
YamlWriterSection beginArray(String label, [String value = '']) {
4143
write(label, value);
42-
YamlWriterSection section = YamlWriterSection._(writer, isArray: true);
44+
final section = YamlWriterSection._(writer, isArray: true);
4345
section._indentationLevel = _indentationLevel + 1;
4446
return section;
4547
}
@@ -70,7 +72,7 @@ class BuildConfigWriter {
7072
run.writeln('./flutter/bin/et build --config ${build.name}');
7173
}
7274
for (final generator in build.generators) {
73-
writeBuildTask(steps, generator);
75+
_writeBuildTask(steps, generator);
7476
}
7577
// For global generators we need to upload artifacts so that we can use them
7678
// in dependent jobs.
@@ -115,7 +117,7 @@ class BuildConfigWriter {
115117
w.write('path', 'engine/src/out/${build.name}');
116118
}
117119
for (final generator in _config.generators) {
118-
writeTestTask(steps, generator);
120+
_writeTestTask(steps, generator);
119121
}
120122
for (final archive in _config.archives) {
121123
_writeGlobalPublishStep(steps, archive);
@@ -133,17 +135,17 @@ class BuildConfigWriter {
133135
{
134136
final step = steps.beginMap('name', 'Set up depot_tools');
135137
final run = step.beginMap('run', '|');
136-
run.writeln('git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git \$HOME/depot_tools');
138+
run.writeln(r'git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git $HOME/depot_tools');
137139
run.writeln('# Append depot_tools to the PATH for subsequent steps');
138-
run.writeln('echo "\$HOME/depot_tools" >> \$GITHUB_PATH');
140+
run.writeln(r'echo "$HOME/depot_tools" >> $GITHUB_PATH');
139141
}
140142
{
141143
final step = steps.beginMap('name', 'Generate engine content hash');
142144
step.write('id', 'engine_content_hash');
143145
final run = step.beginMap('run', '|');
144-
run.writeln('engine_content_hash=\$(bin/internal/content_aware_hash.sh)');
145-
run.writeln('echo "::notice:: Engine content hash: \${engine_content_hash}"');
146-
run.writeln('echo "value=\${engine_content_hash}" >> \$GITHUB_OUTPUT');
146+
run.writeln(r'engine_content_hash=$(bin/internal/content_aware_hash.sh)');
147+
run.writeln(r'echo "::notice:: Engine content hash: ${engine_content_hash}"');
148+
run.writeln(r'echo "value=${engine_content_hash}" >> $GITHUB_OUTPUT');
147149
}
148150
{
149151
final step = steps.beginMap('name', 'Copy gclient file');
@@ -166,10 +168,10 @@ class BuildConfigWriter {
166168
final step = steps.beginMap('name', 'Publish $relativePath');
167169
step.write('uses', 'ryand56/r2-upload-action@b801a390acbdeb034c5e684ff5e1361c06639e7c');
168170
final w = step.beginMap('with');
169-
w.write('r2-account-id', '\${{ secrets.R2_ACCOUNT_ID }}');
170-
w.write('r2-access-key-id', '\${{ secrets.R2_ACCESS_KEY_ID }}');
171-
w.write('r2-secret-access-key', '\${{ secrets.R2_SECRET_ACCESS_KEY }}');
172-
w.write('r2-bucket', '\${{ env.R2_BUCKET }}');
171+
w.write('r2-account-id', r'${{ secrets.R2_ACCOUNT_ID }}');
172+
w.write('r2-access-key-id', r'${{ secrets.R2_ACCESS_KEY_ID }}');
173+
w.write('r2-secret-access-key', r'${{ secrets.R2_SECRET_ACCESS_KEY }}');
174+
w.write('r2-bucket', r'${{ env.R2_BUCKET }}');
173175
w.write('source-dir', 'engine/src/$assetPath');
174176
var relativePathDir = path.dirname(relativePath);
175177
if (relativePathDir == '.') {
@@ -188,10 +190,10 @@ class BuildConfigWriter {
188190
final step = steps.beginMap('name', 'Publish ${archive.destination}');
189191
step.write('uses', 'ryand56/r2-upload-action@b801a390acbdeb034c5e684ff5e1361c06639e7c');
190192
final w = step.beginMap('with');
191-
w.write('r2-account-id', '\${{ secrets.R2_ACCOUNT_ID }}');
192-
w.write('r2-access-key-id', '\${{ secrets.R2_ACCESS_KEY_ID }}');
193-
w.write('r2-secret-access-key', '\${{ secrets.R2_SECRET_ACCESS_KEY }}');
194-
w.write('r2-bucket', '\${{ env.R2_BUCKET }}');
193+
w.write('r2-account-id', r'${{ secrets.R2_ACCOUNT_ID }}');
194+
w.write('r2-access-key-id', r'${{ secrets.R2_ACCESS_KEY_ID }}');
195+
w.write('r2-secret-access-key', r'${{ secrets.R2_SECRET_ACCESS_KEY }}');
196+
w.write('r2-bucket', r'${{ env.R2_BUCKET }}');
195197
w.write('source-dir', 'engine/src/${archive.source}');
196198
var relativePathDir = path.dirname(archive.destination);
197199
if (relativePathDir == '.') {
@@ -200,33 +202,47 @@ class BuildConfigWriter {
200202
w.write('destination-dir', '\${{ steps.engine_content_hash.outputs.value }}/$relativePathDir');
201203
}
202204

203-
void writeBuildTask(YamlWriterSection steps, BuildTask generator) {
205+
String _taskLauncherScript(String script, {required String language}) {
206+
if (language == 'dart') {
207+
return '../../bin/dart $script';
208+
} else if (language == 'python3') {
209+
return 'python3 $script';
210+
} else if (language == 'bash' || language == '<undef>') {
211+
return script;
212+
} else {
213+
throw Exception('Unsupported generator language: $language');
214+
}
215+
}
216+
217+
void _writeBuildTask(YamlWriterSection steps, BuildTask generator) {
204218
final step = steps.beginMap('name', 'Run generator ${generator.name}');
205219
final run = step.beginMap('run', '|');
206220
run.writeln('cd engine/src');
207221
for (final script in generator.scripts) {
222+
final launcher = _taskLauncherScript(script, language: generator.language);
208223
if (generator.parameters.isEmpty) {
209-
run.writeln(script);
224+
run.writeln(launcher);
210225
} else {
211-
run.writeln('$script \\');
226+
run.writeln('$launcher \\');
212227
for (final (index, arg) in generator.parameters.indexed) {
213-
final suffix = index == generator.parameters.length - 1 ? '' : ' \\';
228+
final suffix = index == generator.parameters.length - 1 ? '' : r' \';
214229
run.writeln(' $arg$suffix');
215230
}
216231
}
217232
}
218233
}
219234

220-
void writeTestTask(YamlWriterSection steps, TestTask generator) {
235+
void _writeTestTask(YamlWriterSection steps, TestTask generator) {
221236
final step = steps.beginMap('name', 'Run generator ${generator.name}');
222237
final run = step.beginMap('run', '|');
223238
run.writeln('cd engine/src');
239+
final launcher = _taskLauncherScript(generator.script, language: generator.language);
224240
if (generator.parameters.isEmpty) {
225-
run.writeln(generator.script);
241+
run.writeln(launcher);
226242
} else {
227-
run.writeln('${generator.script} \\');
243+
run.writeln('$launcher \\');
228244
for (final (index, arg) in generator.parameters.indexed) {
229-
final suffix = index == generator.parameters.length - 1 ? '' : ' \\';
245+
final suffix = index == generator.parameters.length - 1 ? '' : r' \';
230246
run.writeln(' $arg$suffix');
231247
}
232248
}
@@ -253,7 +269,7 @@ class BuildConfigWriter {
253269
}
254270
name = name.substring(3); // Remove 'ci/' prefix.
255271
final prefix = _prefix();
256-
if (name.startsWith("${prefix}_")) {
272+
if (name.startsWith('${prefix}_')) {
257273
return name;
258274
} else {
259275
return '${_prefix()}_$name';
@@ -297,7 +313,8 @@ void main(List<String> arguments) {
297313
exit(1);
298314
}
299315

300-
if (args['input'].isEmpty) {
316+
final input = args['input'] as List<String>;
317+
if (input.isEmpty) {
301318
print('No input files specified. Use --input to specify at least one builder config JSON file.');
302319
exit(1);
303320
}
@@ -314,12 +331,13 @@ void main(List<String> arguments) {
314331
env.write('DEPOT_TOOLS_WIN_TOOLCHAIN', '0');
315332
env.write('FLUTTER_PREBUILT_DART_SDK', '1');
316333
env.write('R2_BUCKET', 'flutter-zero-engine');
334+
env.write('ENGINE_CHECKOUT_PATH', r'${{ github.workspace }}/engine');
317335

318336
final jobs = root.beginMap('jobs');
319337

320338
for (final inputPath in args['input'] as List<String>) {
321339
final content = File(inputPath).readAsStringSync();
322-
final map = jsonDecode(content);
340+
final map = jsonDecode(content) as Map<String, dynamic>;
323341
final buildConfig = BuilderConfig.fromJson(path: inputPath, map: map);
324342
final writer = BuildConfigWriter(config: buildConfig, jobsSections: jobs);
325343
writer.write();

0 commit comments

Comments
 (0)