aboutsummaryrefslogtreecommitdiffhomepage
path: root/infra
diff options
context:
space:
mode:
authorGravatar Ravi Mistry <rmistry@google.com>2017-02-17 11:28:36 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-02-17 17:41:39 +0000
commitd8ebf69f0ac4ce91fab30af407ecccfa53df3798 (patch)
tree34619fc826888516e9dd72ba18b88ae7d37e4755 /infra
parent1bf3fc74b06fcc8121322a7ae68a72eacae79a24 (diff)
Add Flutter compile bot
BUG=skia:6227 Change-Id: I997663e49c407e3ec64c8e67a2ca27700d5081b4 Reviewed-on: https://skia-review.googlesource.com/8448 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Eric Boren <borenet@google.com>
Diffstat (limited to 'infra')
-rw-r--r--infra/bots/jobs.json1
-rw-r--r--infra/bots/recipe_modules/compile/example.expected/Build-Ubuntu-GCC-x86_64-Release-Flutter_Android.json176
-rw-r--r--infra/bots/recipe_modules/compile/example.expected/flutter_trybot.json180
-rw-r--r--infra/bots/recipe_modules/compile/example.py27
-rw-r--r--infra/bots/recipe_modules/core/api.py21
-rw-r--r--infra/bots/recipe_modules/flavor/api.py6
-rw-r--r--infra/bots/recipe_modules/flavor/flutter_flavor.py53
-rw-r--r--infra/bots/recipe_modules/vars/api.py8
-rw-r--r--infra/bots/tasks.json38
9 files changed, 510 insertions, 0 deletions
diff --git a/infra/bots/jobs.json b/infra/bots/jobs.json
index 4a6c81cc62..f8b2521d20 100644
--- a/infra/bots/jobs.json
+++ b/infra/bots/jobs.json
@@ -42,6 +42,7 @@
"Build-Ubuntu-GCC-x86_64-Debug-SK_USE_DISCARDABLE_SCALEDIMAGECACHE",
"Build-Ubuntu-GCC-x86_64-Release",
"Build-Ubuntu-GCC-x86_64-Release-ANGLE",
+ "Build-Ubuntu-GCC-x86_64-Release-Flutter_Android",
"Build-Ubuntu-GCC-x86_64-Release-Mesa",
"Build-Ubuntu-GCC-x86_64-Release-NoGPU",
"Build-Ubuntu-GCC-x86_64-Release-PDFium",
diff --git a/infra/bots/recipe_modules/compile/example.expected/Build-Ubuntu-GCC-x86_64-Release-Flutter_Android.json b/infra/bots/recipe_modules/compile/example.expected/Build-Ubuntu-GCC-x86_64-Release-Flutter_Android.json
new file mode 100644
index 0000000000..3b3ada8c41
--- /dev/null
+++ b/infra/bots/recipe_modules/compile/example.expected/Build-Ubuntu-GCC-x86_64-Release-Flutter_Android.json
@@ -0,0 +1,176 @@
+[
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n",
+ "[CUSTOM_/_B_WORK]/flutter",
+ "511"
+ ],
+ "name": "makedirs checkout_path",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys, os@@@",
+ "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@",
+ "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@",
+ "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py",
+ "--spec",
+ "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': True, 'name': 'src/flutter', 'url': 'https://github.com/flutter/engine.git'}]\ntarget_os = ['android']",
+ "--patch_root",
+ "src/third_party/skia",
+ "--revision_mapping_file",
+ "{\"src/flutter\": \"got_flutter_revision\", \"src/third_party/skia\": \"got_revision\"}",
+ "--git-cache-dir",
+ "[CUSTOM_/_B_CACHE]",
+ "--output_json",
+ "/path/to/tmp/json",
+ "--revision",
+ "src/flutter@origin/master",
+ "--revision",
+ "src/third_party/skia@abc123",
+ "--output_manifest"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]/flutter",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[CUSTOM_/_B_WORK]/flutter/src/third_party/skia/out/Build-Ubuntu-GCC-x86_64-Release-Flutter_Android"
+ },
+ "name": "bot_update",
+ "~followup_annotations": [
+ "@@@STEP_TEXT@Some step text@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": \"origin/master\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/third_party/skia\": \"abc123\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/src/flutter.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9221bca00ddbd888260084def81f09543281b952\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/third_party/skia\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/src/third_party/skia.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"d9c4a4d173a97ef2832b65636b4200bb93ea8ee1\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"src/third_party/skia\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_flutter_revision\": \"9221bca00ddbd888260084def81f09543281b952\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_flutter_revision_cp\": \"refs/heads/master@{#84512}\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"d9c4a4d173a97ef2832b65636b4200bb93ea8ee1\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#143121}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"root\": \"src/flutter\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"d9c4a4d173a97ef2832b65636b4200bb93ea8ee1\"@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#143121}\"@@@",
+ "@@@SET_BUILD_PROPERTY@got_flutter_revision_cp@\"refs/heads/master@{#84512}\"@@@",
+ "@@@SET_BUILD_PROPERTY@got_flutter_revision@\"9221bca00ddbd888260084def81f09543281b952\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "gclient",
+ "runhooks"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]/flutter/src",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[CUSTOM_/_B_WORK]/flutter/src/third_party/skia/out/Build-Ubuntu-GCC-x86_64-Release-Flutter_Android"
+ },
+ "name": "runhook"
+ },
+ {
+ "cmd": [
+ "flutter/tools/gn",
+ "--runtime-mode=release",
+ "--android"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]/flutter/src",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[CUSTOM_/_B_WORK]/flutter/src/third_party/skia/out/Build-Ubuntu-GCC-x86_64-Release-Flutter_Android"
+ },
+ "name": "gn_gen"
+ },
+ {
+ "cmd": [
+ "ninja",
+ "-C",
+ "out/android_release",
+ "-j100"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]/flutter/src",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[CUSTOM_/_B_WORK]/flutter/src/third_party/skia/out/Build-Ubuntu-GCC-x86_64-Release-Flutter_Android"
+ },
+ "name": "build_flutter"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'get_images_from_skps', 'get_images_from_skps.exe', 'nanobench', 'nanobench.exe', 'skpbench', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe', 'vulkan-1.dll']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n",
+ "[CUSTOM_/_B_WORK]/flutter/src/third_party/skia/out/Build-Ubuntu-GCC-x86_64-Release-Flutter_Android/Release",
+ "[CUSTOM_[SWARM_OUT_DIR]]/out/Release"
+ ],
+ "name": "copy build products",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@import errno@@@",
+ "@@@STEP_LOG_LINE@python.inline@import glob@@@",
+ "@@@STEP_LOG_LINE@python.inline@import os@@@",
+ "@@@STEP_LOG_LINE@python.inline@import shutil@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys@@@",
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@",
+ "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'get_images_from_skps', 'get_images_from_skps.exe', 'nanobench', 'nanobench.exe', 'skpbench', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe', 'vulkan-1.dll']@@@",
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@try:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@",
+ "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ raise@@@",
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "name": "$result",
+ "recipe_result": null,
+ "status_code": 0
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/compile/example.expected/flutter_trybot.json b/infra/bots/recipe_modules/compile/example.expected/flutter_trybot.json
new file mode 100644
index 0000000000..f753c569e3
--- /dev/null
+++ b/infra/bots/recipe_modules/compile/example.expected/flutter_trybot.json
@@ -0,0 +1,180 @@
+[
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n",
+ "[CUSTOM_/_B_WORK]/flutter",
+ "511"
+ ],
+ "name": "makedirs checkout_path",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys, os@@@",
+ "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@",
+ "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@",
+ "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py",
+ "--spec",
+ "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': True, 'name': 'src/flutter', 'url': 'https://github.com/flutter/engine.git'}]\ntarget_os = ['android']",
+ "--patch_root",
+ "src/third_party/skia",
+ "--revision_mapping_file",
+ "{\"src/flutter\": \"got_flutter_revision\", \"src/third_party/skia\": \"got_revision\"}",
+ "--git-cache-dir",
+ "[CUSTOM_/_B_CACHE]",
+ "--gerrit_repo",
+ "https://skia.googlesource.com/skia.git",
+ "--gerrit_ref",
+ "refs/changes/89/456789/12",
+ "--output_json",
+ "/path/to/tmp/json",
+ "--revision",
+ "src/flutter@origin/master",
+ "--revision",
+ "src/third_party/skia@abc123",
+ "--output_manifest"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]/flutter",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[CUSTOM_/_B_WORK]/flutter/src/third_party/skia/out/Build-Ubuntu-GCC-x86_64-Release-Flutter_Android"
+ },
+ "name": "bot_update",
+ "~followup_annotations": [
+ "@@@STEP_TEXT@Some step text@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": \"origin/master\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/third_party/skia\": \"abc123\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/src/flutter.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9221bca00ddbd888260084def81f09543281b952\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/third_party/skia\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/src/third_party/skia.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"d9c4a4d173a97ef2832b65636b4200bb93ea8ee1\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"src/third_party/skia\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_flutter_revision\": \"9221bca00ddbd888260084def81f09543281b952\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_flutter_revision_cp\": \"refs/heads/master@{#84512}\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"d9c4a4d173a97ef2832b65636b4200bb93ea8ee1\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#143121}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"root\": \"src/flutter\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"d9c4a4d173a97ef2832b65636b4200bb93ea8ee1\"@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#143121}\"@@@",
+ "@@@SET_BUILD_PROPERTY@got_flutter_revision_cp@\"refs/heads/master@{#84512}\"@@@",
+ "@@@SET_BUILD_PROPERTY@got_flutter_revision@\"9221bca00ddbd888260084def81f09543281b952\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "gclient",
+ "runhooks"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]/flutter/src",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[CUSTOM_/_B_WORK]/flutter/src/third_party/skia/out/Build-Ubuntu-GCC-x86_64-Release-Flutter_Android"
+ },
+ "name": "runhook"
+ },
+ {
+ "cmd": [
+ "flutter/tools/gn",
+ "--runtime-mode=release",
+ "--android"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]/flutter/src",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[CUSTOM_/_B_WORK]/flutter/src/third_party/skia/out/Build-Ubuntu-GCC-x86_64-Release-Flutter_Android"
+ },
+ "name": "gn_gen"
+ },
+ {
+ "cmd": [
+ "ninja",
+ "-C",
+ "out/android_release",
+ "-j100"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]/flutter/src",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[CUSTOM_/_B_WORK]/flutter/src/third_party/skia/out/Build-Ubuntu-GCC-x86_64-Release-Flutter_Android"
+ },
+ "name": "build_flutter"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'get_images_from_skps', 'get_images_from_skps.exe', 'nanobench', 'nanobench.exe', 'skpbench', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe', 'vulkan-1.dll']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n",
+ "[CUSTOM_/_B_WORK]/flutter/src/third_party/skia/out/Build-Ubuntu-GCC-x86_64-Release-Flutter_Android/Release",
+ "[CUSTOM_[SWARM_OUT_DIR]]/out/Release"
+ ],
+ "name": "copy build products",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@import errno@@@",
+ "@@@STEP_LOG_LINE@python.inline@import glob@@@",
+ "@@@STEP_LOG_LINE@python.inline@import os@@@",
+ "@@@STEP_LOG_LINE@python.inline@import shutil@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys@@@",
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@",
+ "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'get_images_from_skps', 'get_images_from_skps.exe', 'nanobench', 'nanobench.exe', 'skpbench', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe', 'vulkan-1.dll']@@@",
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@try:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@",
+ "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ raise@@@",
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "name": "$result",
+ "recipe_result": null,
+ "status_code": 0
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/compile/example.py b/infra/bots/recipe_modules/compile/example.py
index 8cd5d49d85..988184e508 100644
--- a/infra/bots/recipe_modules/compile/example.py
+++ b/infra/bots/recipe_modules/compile/example.py
@@ -36,6 +36,7 @@ TEST_BUILDERS = {
'Build-Ubuntu-GCC-x86_64-Debug-SK_USE_DISCARDABLE_SCALEDIMAGECACHE',
'Build-Ubuntu-GCC-x86_64-Release-ANGLE',
'Build-Ubuntu-GCC-x86_64-Release-Fast',
+ 'Build-Ubuntu-GCC-x86_64-Release-Flutter_Android',
'Build-Ubuntu-GCC-x86_64-Release-Mesa',
'Build-Ubuntu-GCC-x86_64-Release-PDFium',
'Build-Ubuntu-GCC-x86_64-Release-PDFium_SkiaPaths',
@@ -213,3 +214,29 @@ def GenTests(api):
api.path['start_dir'].join('tmp', 'uninteresting_hashes.txt')
)
)
+
+ buildername = 'Build-Ubuntu-GCC-x86_64-Release-Flutter_Android'
+ yield (
+ api.test('flutter_trybot') +
+ api.properties(
+ repository='https://skia.googlesource.com/skia.git',
+ buildername=buildername,
+ mastername=mastername,
+ slavename=slavename,
+ buildnumber=5,
+ path_config='kitchen',
+ swarm_out_dir='[SWARM_OUT_DIR]',
+ revision='abc123',
+ nobuildbot='True',
+ patch_issue=500,
+ patch_set=1,
+ patch_storage='gerrit') +
+ api.properties.tryserver(
+ buildername=buildername,
+ gerrit_project='skia',
+ gerrit_url='https://skia-review.googlesource.com/',
+ ) +
+ api.path.exists(
+ api.path['start_dir'].join('tmp', 'uninteresting_hashes.txt')
+ )
+ )
diff --git a/infra/bots/recipe_modules/core/api.py b/infra/bots/recipe_modules/core/api.py
index bab0fef0e5..eb6dc9404f 100644
--- a/infra/bots/recipe_modules/core/api.py
+++ b/infra/bots/recipe_modules/core/api.py
@@ -80,9 +80,15 @@ class SkiaApi(recipe_api.RecipeApi):
main_repo = self.m.properties['repository']
if self.m.vars.need_pdfium_checkout:
main_repo = 'https://pdfium.googlesource.com/pdfium.git'
+ if self.m.vars.need_flutter_checkout:
+ main_repo = 'https://github.com/flutter/engine.git'
main_name = self.m.path.basename(main_repo)
if main_name.endswith('.git'):
main_name = main_name[:-len('.git')]
+ # Special case for flutter because it seems to need a very specific
+ # directory structure to successfully build.
+ if self.m.vars.need_flutter_checkout and main_name == 'engine':
+ main_name = 'src/flutter'
main = gclient_cfg.solutions.add()
main.name = main_name
main.managed = False
@@ -105,6 +111,21 @@ class SkiaApi(recipe_api.RecipeApi):
m[skia_dep_path] = 'got_revision'
patch_root = skia_dep_path
+ if self.m.vars.need_flutter_checkout:
+ # Skia is a DEP of Flutter; the 'revision' property is a Skia revision,
+ # and any patch should be applied to Skia, not Flutter.
+ main.revision = 'origin/master'
+ main.managed = True
+ m[main_name] = 'got_flutter_revision'
+ if 'Android' in self.m.vars.builder_cfg.get('extra_config', ''):
+ gclient_cfg.target_os.add('android')
+
+ skia_dep_path = 'src/third_party/skia'
+ gclient_cfg.patch_projects['skia'] = (skia_dep_path, 'HEAD')
+ gclient_cfg.revisions[skia_dep_path] = self.m.properties['revision']
+ m[skia_dep_path] = 'got_revision'
+ patch_root = skia_dep_path
+
self.update_repo(self.m.vars.checkout_root, main)
# TODO(rmistry): Remove the below block after there is a solution for
diff --git a/infra/bots/recipe_modules/flavor/api.py b/infra/bots/recipe_modules/flavor/api.py
index 263166a3aa..c90136fac1 100644
--- a/infra/bots/recipe_modules/flavor/api.py
+++ b/infra/bots/recipe_modules/flavor/api.py
@@ -9,6 +9,7 @@
from recipe_engine import recipe_api
from . import default_flavor
+from . import flutter_flavor
from . import gn_android_flavor
from . import gn_flavor
from . import ios_flavor
@@ -29,6 +30,9 @@ VERSION_NONE = -1
def is_android(builder_cfg):
return 'Android' in builder_cfg.get('extra_config', '')
+def is_flutter(builder_cfg):
+ return 'Flutter' in builder_cfg.get('extra_config', '')
+
def is_ios(builder_cfg):
return 'iOS' == builder_cfg.get('os', '')
@@ -42,6 +46,8 @@ def is_valgrind(builder_cfg):
class SkiaFlavorApi(recipe_api.RecipeApi):
def get_flavor(self, builder_cfg):
"""Return a flavor utils object specific to the given builder."""
+ if is_flutter(builder_cfg):
+ return flutter_flavor.FlutterFlavorUtils(self.m)
if is_android(builder_cfg):
return gn_android_flavor.GNAndroidFlavorUtils(self.m)
elif is_ios(builder_cfg):
diff --git a/infra/bots/recipe_modules/flavor/flutter_flavor.py b/infra/bots/recipe_modules/flavor/flutter_flavor.py
new file mode 100644
index 0000000000..d87fcdba06
--- /dev/null
+++ b/infra/bots/recipe_modules/flavor/flutter_flavor.py
@@ -0,0 +1,53 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import re
+
+import default_flavor
+
+
+"""Flutter flavor utils, used for building Flutter with Skia."""
+
+
+class FlutterFlavorUtils(default_flavor.DefaultFlavorUtils):
+
+ def compile(self, target, **kwargs):
+ """Build Flutter with Skia."""
+
+ flutter_dir = self.m.vars.checkout_root.join('src')
+ configuration = self.m.vars.builder_cfg.get('configuration').lower()
+ extra_config = self.m.vars.builder_cfg.get('extra_config', '')
+ out_dir = configuration
+
+ # Runhook to generate the gn binary in buildtools.
+ self.m.run(
+ self.m.step,
+ 'runhook',
+ cmd=['gclient', 'runhooks'],
+ cwd=flutter_dir,
+ **kwargs)
+
+ # Setup GN args.
+ gn_args = [
+ '--runtime-mode=%s' % configuration,
+ ]
+ if 'Android' in extra_config:
+ gn_args.append('--android')
+ out_dir = 'android_' + out_dir
+
+ # Run GN.
+ self.m.run(
+ self.m.step,
+ 'gn_gen',
+ cmd=['flutter/tools/gn'] + gn_args,
+ cwd=flutter_dir,
+ **kwargs)
+
+ # Build Flutter.
+ self.m.run(
+ self.m.step,
+ 'build_flutter',
+ cmd=['ninja', '-C', 'out/' + out_dir, '-j100'],
+ cwd=flutter_dir,
+ **kwargs)
diff --git a/infra/bots/recipe_modules/vars/api.py b/infra/bots/recipe_modules/vars/api.py
index faba0ad5c0..2e2923b986 100644
--- a/infra/bots/recipe_modules/vars/api.py
+++ b/infra/bots/recipe_modules/vars/api.py
@@ -73,9 +73,17 @@ class SkiaVarsApi(recipe_api.RecipeApi):
# checkout of Skia obtained through DEPS in pdfium/third_party/skia.
self.need_pdfium_checkout = 'PDFium' in self.builder_name
+ # Some bots also require a checkout of Flutter; in this case we use the
+ # checkout of Skia obtained through DEPS in src/third_party/skia.
+ self.need_flutter_checkout = 'Flutter' in self.builder_name
+
self.skia_dir = self.checkout_root.join('skia')
if self.need_pdfium_checkout:
self.skia_dir = self.checkout_root.join('pdfium', 'third_party', 'skia')
+ elif self.need_flutter_checkout:
+ self.checkout_root = self.checkout_root.join('flutter')
+ self.skia_dir = self.checkout_root.join('src', 'third_party', 'skia')
+
if not self.persistent_checkout:
self.m.path['checkout'] = self.skia_dir
diff --git a/infra/bots/tasks.json b/infra/bots/tasks.json
index 48f7cc5a3b..6873e873d0 100644
--- a/infra/bots/tasks.json
+++ b/infra/bots/tasks.json
@@ -258,6 +258,12 @@
"Build-Ubuntu-GCC-x86_64-Release-ANGLE"
]
},
+ "Build-Ubuntu-GCC-x86_64-Release-Flutter_Android": {
+ "priority": 0.8,
+ "tasks": [
+ "Build-Ubuntu-GCC-x86_64-Release-Flutter_Android"
+ ]
+ },
"Build-Ubuntu-GCC-x86_64-Release-Mesa": {
"priority": 0.8,
"tasks": [
@@ -2876,6 +2882,38 @@
"isolate": "compile_skia.isolate",
"priority": 0.8
},
+ "Build-Ubuntu-GCC-x86_64-Release-Flutter_Android": {
+ "cipd_packages": [
+ {
+ "name": "skia/bots/android_ndk_linux",
+ "path": "android_ndk_linux",
+ "version": "version:5"
+ }
+ ],
+ "dimensions": [
+ "gpu:none",
+ "os:Ubuntu-14.04",
+ "pool:Skia"
+ ],
+ "extra_args": [
+ "--workdir",
+ "../../..",
+ "swarm_compile",
+ "repository=<(REPO)",
+ "buildername=Build-Ubuntu-GCC-x86_64-Release-Flutter_Android",
+ "mastername=fake-master",
+ "buildnumber=2",
+ "slavename=fake-buildslave",
+ "nobuildbot=True",
+ "swarm_out_dir=${ISOLATED_OUTDIR}",
+ "revision=<(REVISION)",
+ "patch_storage=<(PATCH_STORAGE)",
+ "patch_issue=<(ISSUE)",
+ "patch_set=<(PATCHSET)"
+ ],
+ "isolate": "compile_skia.isolate",
+ "priority": 0.8
+ },
"Build-Ubuntu-GCC-x86_64-Release-Mesa": {
"dimensions": [
"gpu:none",