aboutsummaryrefslogtreecommitdiffhomepage
path: root/infra/bots
diff options
context:
space:
mode:
authorGravatar borenet <borenet@chromium.org>2016-10-20 11:38:30 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-10-20 11:38:30 -0700
commit61013b235f474cf1c02d7b69ff36bd05700f9a38 (patch)
tree981e67acf306115485270e687499f843e21575bc /infra/bots
parent96dc1c9efaab4636e30f90aa377f25863f9bf3ba (diff)
Add retries to the InfraTests bot's "update go pkgs" step
Diffstat (limited to 'infra/bots')
-rw-r--r--infra/bots/recipes/swarm_infra.expected/failed_all_updates.json208
-rw-r--r--infra/bots/recipes/swarm_infra.expected/failed_one_update.json166
-rw-r--r--infra/bots/recipes/swarm_infra.expected/infra_tests.json2
-rw-r--r--infra/bots/recipes/swarm_infra.py50
4 files changed, 422 insertions, 4 deletions
diff --git a/infra/bots/recipes/swarm_infra.expected/failed_all_updates.json b/infra/bots/recipes/swarm_infra.expected/failed_all_updates.json
new file mode 100644
index 0000000000..9dfc5062d3
--- /dev/null
+++ b/infra/bots/recipes/swarm_infra.expected/failed_all_updates.json
@@ -0,0 +1,208 @@
+[
+ {
+ "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]",
+ "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_PACKAGE_REPO[depot_tools]/gclient.py",
+ "config",
+ "--spec",
+ "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[SLAVE_BUILD]/out"
+ },
+ "name": "gclient setup"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py",
+ "sync",
+ "--verbose",
+ "--with_branch_heads",
+ "--nohooks",
+ "-j8",
+ "--reset",
+ "--force",
+ "--upstream",
+ "--no-nag-max",
+ "--delete_unversioned_trees",
+ "--revision",
+ "skia@abc123",
+ "--output-json",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[SLAVE_BUILD]/out"
+ },
+ "name": "gclient sync",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py",
+ "recurse",
+ "git",
+ "config",
+ "user.name",
+ "local_bot"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[SLAVE_BUILD]/out"
+ },
+ "name": "gclient recurse (git config user.name)"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py",
+ "recurse",
+ "git",
+ "config",
+ "user.email",
+ "local_bot@example.com"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[SLAVE_BUILD]/out"
+ },
+ "name": "gclient recurse (git config user.email)"
+ },
+ {
+ "cmd": [
+ "go",
+ "get",
+ "-u",
+ "go.skia.org/infra/..."
+ ],
+ "env": {
+ "GOPATH": "[CUSTOM_/_B_WORK]/gopath"
+ },
+ "name": "update go pkgs",
+ "~followup_annotations": [
+ "step returned non-zero exit code: 1",
+ "@@@STEP_FAILURE@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "go",
+ "get",
+ "-u",
+ "go.skia.org/infra/..."
+ ],
+ "env": {
+ "GOPATH": "[CUSTOM_/_B_WORK]/gopath"
+ },
+ "name": "update go pkgs (attempt 2)",
+ "~followup_annotations": [
+ "step returned non-zero exit code: 1",
+ "@@@STEP_FAILURE@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "go",
+ "get",
+ "-u",
+ "go.skia.org/infra/..."
+ ],
+ "env": {
+ "GOPATH": "[CUSTOM_/_B_WORK]/gopath"
+ },
+ "name": "update go pkgs (attempt 3)",
+ "~followup_annotations": [
+ "step returned non-zero exit code: 1",
+ "@@@STEP_FAILURE@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "go",
+ "get",
+ "-u",
+ "go.skia.org/infra/..."
+ ],
+ "env": {
+ "GOPATH": "[CUSTOM_/_B_WORK]/gopath"
+ },
+ "name": "update go pkgs (attempt 4)",
+ "~followup_annotations": [
+ "step returned non-zero exit code: 1",
+ "@@@STEP_FAILURE@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "go",
+ "get",
+ "-u",
+ "go.skia.org/infra/..."
+ ],
+ "env": {
+ "GOPATH": "[CUSTOM_/_B_WORK]/gopath"
+ },
+ "name": "update go pkgs (attempt 5)",
+ "~followup_annotations": [
+ "step returned non-zero exit code: 1",
+ "@@@STEP_FAILURE@@@"
+ ]
+ },
+ {
+ "name": "$result",
+ "reason": "Step('update go pkgs (attempt 5)') failed with return_code 1",
+ "recipe_result": null,
+ "status_code": 1
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipes/swarm_infra.expected/failed_one_update.json b/infra/bots/recipes/swarm_infra.expected/failed_one_update.json
new file mode 100644
index 0000000000..96c7999563
--- /dev/null
+++ b/infra/bots/recipes/swarm_infra.expected/failed_one_update.json
@@ -0,0 +1,166 @@
+[
+ {
+ "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]",
+ "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_PACKAGE_REPO[depot_tools]/gclient.py",
+ "config",
+ "--spec",
+ "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[SLAVE_BUILD]/out"
+ },
+ "name": "gclient setup"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py",
+ "sync",
+ "--verbose",
+ "--with_branch_heads",
+ "--nohooks",
+ "-j8",
+ "--reset",
+ "--force",
+ "--upstream",
+ "--no-nag-max",
+ "--delete_unversioned_trees",
+ "--revision",
+ "skia@abc123",
+ "--output-json",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[SLAVE_BUILD]/out"
+ },
+ "name": "gclient sync",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py",
+ "recurse",
+ "git",
+ "config",
+ "user.name",
+ "local_bot"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[SLAVE_BUILD]/out"
+ },
+ "name": "gclient recurse (git config user.name)"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py",
+ "recurse",
+ "git",
+ "config",
+ "user.email",
+ "local_bot@example.com"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[SLAVE_BUILD]/out"
+ },
+ "name": "gclient recurse (git config user.email)"
+ },
+ {
+ "cmd": [
+ "go",
+ "get",
+ "-u",
+ "go.skia.org/infra/..."
+ ],
+ "env": {
+ "GOPATH": "[CUSTOM_/_B_WORK]/gopath"
+ },
+ "name": "update go pkgs",
+ "~followup_annotations": [
+ "step returned non-zero exit code: 1",
+ "@@@STEP_FAILURE@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "go",
+ "get",
+ "-u",
+ "go.skia.org/infra/..."
+ ],
+ "env": {
+ "GOPATH": "[CUSTOM_/_B_WORK]/gopath"
+ },
+ "name": "update go pkgs (attempt 2)"
+ },
+ {
+ "cmd": [
+ "python",
+ "[CUSTOM_/_B_WORK]/skia/infra/bots/infra_tests.py"
+ ],
+ "cwd": "[CUSTOM_/_B_WORK]/skia",
+ "env": {
+ "GOPATH": "[CUSTOM_/_B_WORK]/gopath"
+ },
+ "name": "infra_tests"
+ },
+ {
+ "name": "$result",
+ "recipe_result": null,
+ "status_code": 0
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipes/swarm_infra.expected/infra_tests.json b/infra/bots/recipes/swarm_infra.expected/infra_tests.json
index 161e230dec..bd5ef5a272 100644
--- a/infra/bots/recipes/swarm_infra.expected/infra_tests.json
+++ b/infra/bots/recipes/swarm_infra.expected/infra_tests.json
@@ -129,7 +129,7 @@
"env": {
"GOPATH": "[CUSTOM_/_B_WORK]/gopath"
},
- "name": "update_go_pkgs"
+ "name": "update go pkgs"
},
{
"cmd": [
diff --git a/infra/bots/recipes/swarm_infra.py b/infra/bots/recipes/swarm_infra.py
index 3c32faa262..bfc004b138 100644
--- a/infra/bots/recipes/swarm_infra.py
+++ b/infra/bots/recipes/swarm_infra.py
@@ -15,16 +15,32 @@ DEPS = [
]
+UPDATE_GO_ATTEMPTS = 5
+
+
def RunSteps(api):
api.vars.setup()
api.core.checkout_steps()
+ # Attempt to update go dependencies. This fails flakily sometimes, so perform
+ # multiple attempts.
gopath = api.vars.checkout_root.join('gopath')
env = {'GOPATH': gopath}
- api.step('update_go_pkgs',
- cmd=['go', 'get', '-u', 'go.skia.org/infra/...'],
- env=env)
+ name = 'update go pkgs'
+ for attempt in xrange(UPDATE_GO_ATTEMPTS):
+ step_name = name
+ if attempt > 0:
+ step_name += ' (attempt %d)' % (attempt + 1)
+ try:
+ api.step(step_name,
+ cmd=['go', 'get', '-u', 'go.skia.org/infra/...'],
+ env=env)
+ break
+ except api.step.StepFailure:
+ if attempt == UPDATE_GO_ATTEMPTS - 1:
+ raise
+ # Run the infra tests.
infra_tests = api.vars.skia_dir.join(
'infra', 'bots', 'infra_tests.py')
api.step('infra_tests',
@@ -44,3 +60,31 @@ def GenTests(api):
path_config='kitchen',
swarm_out_dir='[SWARM_OUT_DIR]')
)
+
+ yield (
+ api.test('failed_one_update') +
+ api.properties(buildername='Housekeeper-PerCommit-InfraTests',
+ mastername='client.skia.fyi',
+ slavename='dummy-slave',
+ buildnumber=5,
+ revision='abc123',
+ path_config='kitchen',
+ swarm_out_dir='[SWARM_OUT_DIR]') +
+ api.step_data('update go pkgs', retcode=1)
+ )
+
+ yield (
+ api.test('failed_all_updates') +
+ api.properties(buildername='Housekeeper-PerCommit-InfraTests',
+ mastername='client.skia.fyi',
+ slavename='dummy-slave',
+ buildnumber=5,
+ revision='abc123',
+ path_config='kitchen',
+ swarm_out_dir='[SWARM_OUT_DIR]') +
+ api.step_data('update go pkgs', retcode=1) +
+ api.step_data('update go pkgs (attempt 2)', retcode=1) +
+ api.step_data('update go pkgs (attempt 3)', retcode=1) +
+ api.step_data('update go pkgs (attempt 4)', retcode=1) +
+ api.step_data('update go pkgs (attempt 5)', retcode=1)
+ )