Create device_doctor recipe to build package to CIPD. Success runs linux: https://chromium-swarm.appspot.com/task?id=506813a13e8b9710 mac: https://chromium-swarm.appspot.com/task?id=5068189617253a10 windows: https://chromium-swarm.appspot.com/task?id=506c11fe5a84fc10 Bug: https://github.com/flutter/flutter/issues/66193 Change-Id: Icfb9721e4d2a721649c5879a444876f776fc0123 Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/9181 Commit-Queue: Keyong Han <keyonghan@google.com> Reviewed-by: Casey Hillers <chillers@google.com>
diff --git a/recipes/cocoon/device_doctor.expected/linux.json b/recipes/cocoon/device_doctor.expected/linux.json new file mode 100644 index 0000000..6db4f88 --- /dev/null +++ b/recipes/cocoon/device_doctor.expected/linux.json
@@ -0,0 +1,178 @@ +[ + { + "cmd": [], + "name": "Checkout flutter/cocoon" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[START_DIR]/cocoon", + "--url", + "https://abc.com/repo" + ], + "name": "Checkout flutter/cocoon.git setup", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "fetch", + "origin", + "refs/pull/123/head", + "--recurse-submodules", + "--progress", + "--tags" + ], + "cwd": "[START_DIR]/cocoon", + "env": { + "PATH": "RECIPE_REPO[depot_tools]:<PATH>" + }, + "infra_step": true, + "name": "Checkout flutter/cocoon.git fetch", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[START_DIR]/cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.git checkout", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[START_DIR]/cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.read revision", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@", + "@@@SET_BUILD_PROPERTY@got_revision@\"deadbeef\"@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[START_DIR]/cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.git clean", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[START_DIR]/cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.submodule sync", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[START_DIR]/cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.submodule update", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [], + "name": "validate luci builder json schemas" + }, + { + "cmd": [ + "bash", + "[START_DIR]/cocoon/device_doctor/tool/build.sh" + ], + "cwd": "[START_DIR]/cocoon/device_doctor", + "name": "build package" + }, + { + "cmd": [ + "cipd", + "pkg-build", + "-in", + "[START_DIR]/cocoon/device_doctor/build", + "-name", + "flutter/device_doctor/${platform}", + "-out", + "device_doctor.zip", + "-hash-algo", + "sha256", + "-json-output", + "/path/to/tmp/json" + ], + "name": "build ${platform}", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"40-chars-fake-of-the-package-instance_id\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter/device_doctor/resolved-platform\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "cipd", + "pkg-register", + "device_doctor.zip", + "-ref", + "staging", + "-tag", + "sha_timestamp:deadbeef_1337000001", + "-json-output", + "/path/to/tmp/json" + ], + "name": "register flutter/device_doctor/${platform}", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"40-chars-fake-of-the-package-instance_id\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter/device_doctor/resolved-platform\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@flutter/device_doctor/resolved-platform@https://chrome-infra-packages.appspot.com/p/flutter/device_doctor/resolved-platform/+/40-chars-fake-of-the-package-instance_id@@@" + ] + }, + { + "name": "$result" + } +] \ No newline at end of file
diff --git a/recipes/cocoon/device_doctor.expected/mac.json b/recipes/cocoon/device_doctor.expected/mac.json new file mode 100644 index 0000000..6db4f88 --- /dev/null +++ b/recipes/cocoon/device_doctor.expected/mac.json
@@ -0,0 +1,178 @@ +[ + { + "cmd": [], + "name": "Checkout flutter/cocoon" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[START_DIR]/cocoon", + "--url", + "https://abc.com/repo" + ], + "name": "Checkout flutter/cocoon.git setup", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "fetch", + "origin", + "refs/pull/123/head", + "--recurse-submodules", + "--progress", + "--tags" + ], + "cwd": "[START_DIR]/cocoon", + "env": { + "PATH": "RECIPE_REPO[depot_tools]:<PATH>" + }, + "infra_step": true, + "name": "Checkout flutter/cocoon.git fetch", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[START_DIR]/cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.git checkout", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[START_DIR]/cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.read revision", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@", + "@@@SET_BUILD_PROPERTY@got_revision@\"deadbeef\"@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[START_DIR]/cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.git clean", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[START_DIR]/cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.submodule sync", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[START_DIR]/cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.submodule update", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [], + "name": "validate luci builder json schemas" + }, + { + "cmd": [ + "bash", + "[START_DIR]/cocoon/device_doctor/tool/build.sh" + ], + "cwd": "[START_DIR]/cocoon/device_doctor", + "name": "build package" + }, + { + "cmd": [ + "cipd", + "pkg-build", + "-in", + "[START_DIR]/cocoon/device_doctor/build", + "-name", + "flutter/device_doctor/${platform}", + "-out", + "device_doctor.zip", + "-hash-algo", + "sha256", + "-json-output", + "/path/to/tmp/json" + ], + "name": "build ${platform}", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"40-chars-fake-of-the-package-instance_id\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter/device_doctor/resolved-platform\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "cipd", + "pkg-register", + "device_doctor.zip", + "-ref", + "staging", + "-tag", + "sha_timestamp:deadbeef_1337000001", + "-json-output", + "/path/to/tmp/json" + ], + "name": "register flutter/device_doctor/${platform}", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"40-chars-fake-of-the-package-instance_id\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter/device_doctor/resolved-platform\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@flutter/device_doctor/resolved-platform@https://chrome-infra-packages.appspot.com/p/flutter/device_doctor/resolved-platform/+/40-chars-fake-of-the-package-instance_id@@@" + ] + }, + { + "name": "$result" + } +] \ No newline at end of file
diff --git a/recipes/cocoon/device_doctor.expected/win.json b/recipes/cocoon/device_doctor.expected/win.json new file mode 100644 index 0000000..0406561 --- /dev/null +++ b/recipes/cocoon/device_doctor.expected/win.json
@@ -0,0 +1,177 @@ +[ + { + "cmd": [], + "name": "Checkout flutter/cocoon" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]\\resources\\git_setup.py", + "--path", + "[START_DIR]\\cocoon", + "--url", + "https://abc.com/repo" + ], + "name": "Checkout flutter/cocoon.git setup", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "fetch", + "origin", + "refs/pull/123/head", + "--recurse-submodules", + "--progress", + "--tags" + ], + "cwd": "[START_DIR]\\cocoon", + "env": { + "PATH": "RECIPE_REPO[depot_tools];<PATH>" + }, + "infra_step": true, + "name": "Checkout flutter/cocoon.git fetch", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[START_DIR]\\cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.git checkout", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[START_DIR]\\cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.read revision", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@", + "@@@SET_BUILD_PROPERTY@got_revision@\"deadbeef\"@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[START_DIR]\\cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.git clean", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[START_DIR]\\cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.submodule sync", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[START_DIR]\\cocoon", + "infra_step": true, + "name": "Checkout flutter/cocoon.submodule update", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [], + "name": "validate luci builder json schemas" + }, + { + "cmd": [ + "[START_DIR]\\cocoon\\device_doctor\\tool\\build.bat" + ], + "cwd": "[START_DIR]\\cocoon\\device_doctor", + "name": "build package" + }, + { + "cmd": [ + "cipd.bat", + "pkg-build", + "-in", + "[START_DIR]\\cocoon\\device_doctor\\build", + "-name", + "flutter/device_doctor/${platform}", + "-out", + "device_doctor.zip", + "-hash-algo", + "sha256", + "-json-output", + "/path/to/tmp/json" + ], + "name": "build ${platform}", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"40-chars-fake-of-the-package-instance_id\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter/device_doctor/resolved-platform\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "cipd.bat", + "pkg-register", + "device_doctor.zip", + "-ref", + "staging", + "-tag", + "sha_timestamp:deadbeef_1337000001", + "-json-output", + "/path/to/tmp/json" + ], + "name": "register flutter/device_doctor/${platform}", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"40-chars-fake-of-the-package-instance_id\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter/device_doctor/resolved-platform\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@flutter/device_doctor/resolved-platform@https://chrome-infra-packages.appspot.com/p/flutter/device_doctor/resolved-platform/+/40-chars-fake-of-the-package-instance_id@@@" + ] + }, + { + "name": "$result" + } +] \ No newline at end of file
diff --git a/recipes/cocoon/device_doctor.py b/recipes/cocoon/device_doctor.py new file mode 100644 index 0000000..0685d1e --- /dev/null +++ b/recipes/cocoon/device_doctor.py
@@ -0,0 +1,59 @@ +# Copyright 2020 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. + +from recipe_engine.recipe_api import Property + +DEPS = [ + 'recipe_engine/cipd', + 'recipe_engine/context', + 'recipe_engine/json', + 'recipe_engine/path', + 'recipe_engine/platform', + 'recipe_engine/properties', + 'recipe_engine/step', + 'recipe_engine/time', + 'flutter/json_util', + 'repo_util', +] + +# This recipe builds the device_doctor CIPD package. +def RunSteps(api): + cocoon_dir = api.path['start_dir'].join('cocoon') + cocoon_git_rev = api.repo_util.checkout( + 'cocoon', + cocoon_dir, + api.properties.get('git_url'), + api.properties.get('git_ref'), + ) + # Validates cocoon builders json format. + api.json_util.validate_json(cocoon_dir) + + # Builds and uploads a new version of the device_doctor CIPD package. + device_doctor_path = cocoon_dir.join('device_doctor') + with api.context(cwd=device_doctor_path): + if api.platform.is_linux or api.platform.is_mac: + build_file = device_doctor_path.join('tool', 'build.sh') + api.step('build package', cmd=['bash', build_file]) + else: + build_file = device_doctor_path.join('tool', 'build.bat') + api.step('build package', cmd=[build_file]) + + cipd_package_name = 'flutter/device_doctor/${platform}' + cipd_zip_path = 'device_doctor.zip' + + api.cipd.build( + device_doctor_path.join('build'), cipd_zip_path, cipd_package_name) + time = str(int(api.time.time())) + api.cipd.register(cipd_package_name, cipd_zip_path, refs=['staging'], + tags={'sha_timestamp': cocoon_git_rev+'_'+time}) + + +def GenTests(api): + for platform in ('mac', 'linux', 'win'): + yield api.test( + platform, + api.properties( + git_ref='refs/pull/123/head', git_url='https://abc.com/repo'), + api.platform(platform, 64) + )