| [ |
| { |
| "cmd": [], |
| "name": "ensure lkg" |
| }, |
| { |
| "cmd": [ |
| "vpython3", |
| "-u", |
| "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", |
| "--json-output", |
| "/path/to/tmp/json", |
| "copy", |
| "RECIPE_MODULE[fuchsia::lkg]/resources/tool_manifest.json", |
| "/path/to/tmp/json" |
| ], |
| "infra_step": true, |
| "name": "ensure lkg.read manifest", |
| "~followup_annotations": [ |
| "@@@STEP_NEST_LEVEL@1@@@", |
| "@@@STEP_LOG_LINE@tool_manifest.json@{@@@", |
| "@@@STEP_LOG_LINE@tool_manifest.json@ \"path\": \"path/to/lkg\",@@@", |
| "@@@STEP_LOG_LINE@tool_manifest.json@ \"version\": \"version:pinned-version\"@@@", |
| "@@@STEP_LOG_LINE@tool_manifest.json@}@@@", |
| "@@@STEP_LOG_END@tool_manifest.json@@@" |
| ] |
| }, |
| { |
| "cmd": [], |
| "name": "ensure lkg.install path/to/lkg", |
| "~followup_annotations": [ |
| "@@@STEP_NEST_LEVEL@1@@@" |
| ] |
| }, |
| { |
| "cmd": [ |
| "vpython3", |
| "-u", |
| "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", |
| "--json-output", |
| "/path/to/tmp/json", |
| "ensure-directory", |
| "--mode", |
| "0777", |
| "[START_DIR]/cipd_tool/path/to/lkg/version%3Apinned-version" |
| ], |
| "infra_step": true, |
| "name": "ensure lkg.install path/to/lkg.ensure package directory", |
| "~followup_annotations": [ |
| "@@@STEP_NEST_LEVEL@2@@@" |
| ] |
| }, |
| { |
| "cmd": [ |
| "cipd", |
| "ensure", |
| "-root", |
| "[START_DIR]/cipd_tool/path/to/lkg/version%3Apinned-version", |
| "-ensure-file", |
| "path/to/lkg version:pinned-version", |
| "-max-threads", |
| "0", |
| "-json-output", |
| "/path/to/tmp/json" |
| ], |
| "infra_step": true, |
| "name": "ensure lkg.install path/to/lkg.ensure_installed", |
| "~followup_annotations": [ |
| "@@@STEP_NEST_LEVEL@2@@@", |
| "@@@STEP_LOG_LINE@json.output@{@@@", |
| "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@", |
| "@@@STEP_LOG_LINE@json.output@ \"\": [@@@", |
| "@@@STEP_LOG_LINE@json.output@ {@@@", |
| "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-version:pinned-v\", @@@", |
| "@@@STEP_LOG_LINE@json.output@ \"package\": \"path/to/lkg\"@@@", |
| "@@@STEP_LOG_LINE@json.output@ }@@@", |
| "@@@STEP_LOG_LINE@json.output@ ]@@@", |
| "@@@STEP_LOG_LINE@json.output@ }@@@", |
| "@@@STEP_LOG_LINE@json.output@}@@@", |
| "@@@STEP_LOG_END@json.output@@@" |
| ] |
| }, |
| { |
| "cmd": [ |
| "[START_DIR]/cipd_tool/path/to/lkg/version%3Apinned-version/lkg", |
| "build", |
| "-builder", |
| "//" |
| ], |
| "name": "get lkg build", |
| "~followup_annotations": [ |
| "@@@STEP_FAILURE@@@" |
| ] |
| }, |
| { |
| "cmd": [], |
| "name": "ensure bigquery" |
| }, |
| { |
| "cmd": [ |
| "vpython3", |
| "-u", |
| "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", |
| "--json-output", |
| "/path/to/tmp/json", |
| "copy", |
| "RECIPE_MODULE[fuchsia::bigquery]/resources/tool_manifest.json", |
| "/path/to/tmp/json" |
| ], |
| "infra_step": true, |
| "name": "ensure bigquery.read manifest", |
| "~followup_annotations": [ |
| "@@@STEP_NEST_LEVEL@1@@@", |
| "@@@STEP_LOG_LINE@tool_manifest.json@{@@@", |
| "@@@STEP_LOG_LINE@tool_manifest.json@ \"path\": \"path/to/bigquery\",@@@", |
| "@@@STEP_LOG_LINE@tool_manifest.json@ \"version\": \"version:pinned-version\"@@@", |
| "@@@STEP_LOG_LINE@tool_manifest.json@}@@@", |
| "@@@STEP_LOG_END@tool_manifest.json@@@" |
| ] |
| }, |
| { |
| "cmd": [], |
| "name": "ensure bigquery.install path/to/bigquery", |
| "~followup_annotations": [ |
| "@@@STEP_NEST_LEVEL@1@@@" |
| ] |
| }, |
| { |
| "cmd": [ |
| "vpython3", |
| "-u", |
| "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", |
| "--json-output", |
| "/path/to/tmp/json", |
| "ensure-directory", |
| "--mode", |
| "0777", |
| "[START_DIR]/cipd_tool/path/to/bigquery/version%3Apinned-version" |
| ], |
| "infra_step": true, |
| "name": "ensure bigquery.install path/to/bigquery.ensure package directory", |
| "~followup_annotations": [ |
| "@@@STEP_NEST_LEVEL@2@@@" |
| ] |
| }, |
| { |
| "cmd": [ |
| "cipd", |
| "ensure", |
| "-root", |
| "[START_DIR]/cipd_tool/path/to/bigquery/version%3Apinned-version", |
| "-ensure-file", |
| "path/to/bigquery version:pinned-version", |
| "-max-threads", |
| "0", |
| "-json-output", |
| "/path/to/tmp/json" |
| ], |
| "infra_step": true, |
| "name": "ensure bigquery.install path/to/bigquery.ensure_installed", |
| "~followup_annotations": [ |
| "@@@STEP_NEST_LEVEL@2@@@", |
| "@@@STEP_LOG_LINE@json.output@{@@@", |
| "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@", |
| "@@@STEP_LOG_LINE@json.output@ \"\": [@@@", |
| "@@@STEP_LOG_LINE@json.output@ {@@@", |
| "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-version:pinned-v\", @@@", |
| "@@@STEP_LOG_LINE@json.output@ \"package\": \"path/to/bigquery\"@@@", |
| "@@@STEP_LOG_LINE@json.output@ }@@@", |
| "@@@STEP_LOG_LINE@json.output@ ]@@@", |
| "@@@STEP_LOG_LINE@json.output@ }@@@", |
| "@@@STEP_LOG_LINE@json.output@}@@@", |
| "@@@STEP_LOG_END@json.output@@@" |
| ] |
| }, |
| { |
| "cmd": [ |
| "[START_DIR]/cipd_tool/path/to/bigquery/version%3Apinned-version/bigquery", |
| "query", |
| "-project", |
| "fuchsia-infra", |
| "-input", |
| "\nWITH\n eq_patchset_attempts AS (\n SELECT\n -- equivalent_cl_group_key is a UUID for a group of patchsets which are\n -- \"equivalent\", e.g. PS1 and PS2 will share an equivalent_cl_group_key if\n -- PS2 is a trivial rebase. It is a consistent value across multiple CQ\n -- attempts.\n -- We use this to uniquely identify a group of \"equivalent\" patchsets\n -- rather than treating every patchset as unique.\n equivalent_cl_group_key,\n cl.change,\n cl.patchset,\n cl.host,\n bb.id,\n start_time,\n status,\n COUNTIF(status = 'SUCCESS')\n OVER (PARTITION BY equivalent_cl_group_key) AS cq_success,\n FROM\n `commit-queue.fuchsia.attempts`,\n UNNEST(gerrit_changes) AS cl,\n UNNEST(builds) AS bb\n WHERE\n cl.project = \"fuchsia\"\n -- Get all attempts that were either SUCCESS or FAILURE. We'll use this\n -- later to filter out flakes.\n AND status IN (\"SUCCESS\", \"FAILURE\")\n ),\n patchset_info AS (\n SELECT\n cl.change,\n MAX(cl.patchset) AS max_patchset,\n MIN(cl.patchset) AS min_patchset,\n FROM `commit-queue.fuchsia.attempts`, UNNEST(gerrit_changes) AS cl\n WHERE cl.project = \"fuchsia\"\n GROUP BY(cl.change)\n ),\n all_details AS (\n SELECT\n equivalent_cl_group_key,\n MAX(change) AS change,\n MAX(patchset) AS patchset,\n MAX(host) AS host,\n -- This will be \"fuchsia\" if there's even one \"fuchsia\" builder.\n MIN(build_info.builder.project)\n AS project,\n EXTRACT(DATETIME FROM MIN(try.start_time)) AS start_time,\n ARRAY_AGG(build_info.builder.builder) AS failed_builders,\n ARRAY_AGG(build_info.id) AS bbids,\n FROM `cr-buildbucket.fuchsia.builds` AS build_info\n JOIN eq_patchset_attempts AS try\n ON try.id = build_info.id\n WHERE build_info.status = \"FAILURE\"\n -- Exclude any experimental tryjobs.\n AND JSON_EXTRACT(build_info.input.properties, \"$['$recipe_engine/cq'].experimental\") IS NULL\n -- Only use tryjobs with no autocorrelator findings. Findings indicate\n -- false rejection.\n AND (\n JSON_EXTRACT(build_info.output.properties, \"$.num_autocorrelator_findings\") IS NULL\n OR JSON_EXTRACT(build_info.output.properties, \"$.num_autocorrelator_findings\") = \"0.0\"\n )\n AND cq_success = 0\n -- Exclude any tryjobs with checkout failures.\n AND JSON_EXTRACT(build_info.output.properties, \"$.checkout_failed\") IS NULL\n -- Exclude any internal tryjobs with build failures. Build failures are a\n -- known issue that we don't need to file for. See fxbug.dev/80124 for\n -- more context.\n AND (\n (\n JSON_EXTRACT(build_info.output.properties, \"$.build_failed\") IS NULL\n AND JSON_EXTRACT(build_info.output.properties, \"$.failed_to_build\") IS NULL\n )\n OR build_info.builder.project = \"fuchsia\"\n )\n -- Exclude any tryjobs which have size check failures. Size check failures\n -- are a known issue that we don't need to continue to triage. See\n -- fxbug.dev/81426 for more context.\n AND build_info.summary_markdown != \"binary size checks failed\"\n GROUP BY equivalent_cl_group_key\n )\n\n-- If all equivalent patchsets failed with different builders i.e. a series of\n-- different flakes caused a failure, this query may output some flakes.\n-- Empirically however, this does not seem to be very frequent.\nSELECT\n ad.change AS change,\n 'https://fxrev.dev/c/' || ad.change || '/' || ad.patchset\n AS patchset,\n CASE\n WHEN ad.patchset > 1\n THEN\n 'https://fxrev.dev/c/' || ad.change || '/'\n || CAST(ad.patchset - 1 AS string) || '..' || ad.patchset\n ELSE NULL\n END\n AS prev_patchset,\n CASE\n WHEN ad.patchset < pi.max_patchset\n THEN\n 'https://fxrev.dev/c/' || ad.change || '/' || ad.patchset || '..'\n || CAST(ad.patchset + 1 AS string)\n ELSE NULL\n END\n AS next_patchset,\n ARRAY(SELECT DISTINCT * FROM UNNEST(failed_builders)) AS failed_builders,\n ARRAY(\n SELECT DISTINCT 'https://ci.chromium.org/b/' || bbid || ' '\n FROM UNNEST(bbids) AS bbid\n ) AS build_links,\nFROM all_details AS ad\nJOIN patchset_info AS pi\n ON ad.change = pi.change\nWHERE\n start_time >= DATETIME '2012-05-13 12:53:21'\n AND start_time <= DATETIME '2012-05-14 12:53:23'\n AND project != \"fuchsia\";\n", |
| "-json-output", |
| "[START_DIR]/sapling.json" |
| ], |
| "name": "run sapling query", |
| "~followup_annotations": [ |
| "@@@STEP_LOG_LINE@query@@@@", |
| "@@@STEP_LOG_LINE@query@WITH@@@", |
| "@@@STEP_LOG_LINE@query@ eq_patchset_attempts AS (@@@", |
| "@@@STEP_LOG_LINE@query@ SELECT@@@", |
| "@@@STEP_LOG_LINE@query@ -- equivalent_cl_group_key is a UUID for a group of patchsets which are@@@", |
| "@@@STEP_LOG_LINE@query@ -- \"equivalent\", e.g. PS1 and PS2 will share an equivalent_cl_group_key if@@@", |
| "@@@STEP_LOG_LINE@query@ -- PS2 is a trivial rebase. It is a consistent value across multiple CQ@@@", |
| "@@@STEP_LOG_LINE@query@ -- attempts.@@@", |
| "@@@STEP_LOG_LINE@query@ -- We use this to uniquely identify a group of \"equivalent\" patchsets@@@", |
| "@@@STEP_LOG_LINE@query@ -- rather than treating every patchset as unique.@@@", |
| "@@@STEP_LOG_LINE@query@ equivalent_cl_group_key,@@@", |
| "@@@STEP_LOG_LINE@query@ cl.change,@@@", |
| "@@@STEP_LOG_LINE@query@ cl.patchset,@@@", |
| "@@@STEP_LOG_LINE@query@ cl.host,@@@", |
| "@@@STEP_LOG_LINE@query@ bb.id,@@@", |
| "@@@STEP_LOG_LINE@query@ start_time,@@@", |
| "@@@STEP_LOG_LINE@query@ status,@@@", |
| "@@@STEP_LOG_LINE@query@ COUNTIF(status = 'SUCCESS')@@@", |
| "@@@STEP_LOG_LINE@query@ OVER (PARTITION BY equivalent_cl_group_key) AS cq_success,@@@", |
| "@@@STEP_LOG_LINE@query@ FROM@@@", |
| "@@@STEP_LOG_LINE@query@ `commit-queue.fuchsia.attempts`,@@@", |
| "@@@STEP_LOG_LINE@query@ UNNEST(gerrit_changes) AS cl,@@@", |
| "@@@STEP_LOG_LINE@query@ UNNEST(builds) AS bb@@@", |
| "@@@STEP_LOG_LINE@query@ WHERE@@@", |
| "@@@STEP_LOG_LINE@query@ cl.project = \"fuchsia\"@@@", |
| "@@@STEP_LOG_LINE@query@ -- Get all attempts that were either SUCCESS or FAILURE. We'll use this@@@", |
| "@@@STEP_LOG_LINE@query@ -- later to filter out flakes.@@@", |
| "@@@STEP_LOG_LINE@query@ AND status IN (\"SUCCESS\", \"FAILURE\")@@@", |
| "@@@STEP_LOG_LINE@query@ ),@@@", |
| "@@@STEP_LOG_LINE@query@ patchset_info AS (@@@", |
| "@@@STEP_LOG_LINE@query@ SELECT@@@", |
| "@@@STEP_LOG_LINE@query@ cl.change,@@@", |
| "@@@STEP_LOG_LINE@query@ MAX(cl.patchset) AS max_patchset,@@@", |
| "@@@STEP_LOG_LINE@query@ MIN(cl.patchset) AS min_patchset,@@@", |
| "@@@STEP_LOG_LINE@query@ FROM `commit-queue.fuchsia.attempts`, UNNEST(gerrit_changes) AS cl@@@", |
| "@@@STEP_LOG_LINE@query@ WHERE cl.project = \"fuchsia\"@@@", |
| "@@@STEP_LOG_LINE@query@ GROUP BY(cl.change)@@@", |
| "@@@STEP_LOG_LINE@query@ ),@@@", |
| "@@@STEP_LOG_LINE@query@ all_details AS (@@@", |
| "@@@STEP_LOG_LINE@query@ SELECT@@@", |
| "@@@STEP_LOG_LINE@query@ equivalent_cl_group_key,@@@", |
| "@@@STEP_LOG_LINE@query@ MAX(change) AS change,@@@", |
| "@@@STEP_LOG_LINE@query@ MAX(patchset) AS patchset,@@@", |
| "@@@STEP_LOG_LINE@query@ MAX(host) AS host,@@@", |
| "@@@STEP_LOG_LINE@query@ -- This will be \"fuchsia\" if there's even one \"fuchsia\" builder.@@@", |
| "@@@STEP_LOG_LINE@query@ MIN(build_info.builder.project)@@@", |
| "@@@STEP_LOG_LINE@query@ AS project,@@@", |
| "@@@STEP_LOG_LINE@query@ EXTRACT(DATETIME FROM MIN(try.start_time)) AS start_time,@@@", |
| "@@@STEP_LOG_LINE@query@ ARRAY_AGG(build_info.builder.builder) AS failed_builders,@@@", |
| "@@@STEP_LOG_LINE@query@ ARRAY_AGG(build_info.id) AS bbids,@@@", |
| "@@@STEP_LOG_LINE@query@ FROM `cr-buildbucket.fuchsia.builds` AS build_info@@@", |
| "@@@STEP_LOG_LINE@query@ JOIN eq_patchset_attempts AS try@@@", |
| "@@@STEP_LOG_LINE@query@ ON try.id = build_info.id@@@", |
| "@@@STEP_LOG_LINE@query@ WHERE build_info.status = \"FAILURE\"@@@", |
| "@@@STEP_LOG_LINE@query@ -- Exclude any experimental tryjobs.@@@", |
| "@@@STEP_LOG_LINE@query@ AND JSON_EXTRACT(build_info.input.properties, \"$['$recipe_engine/cq'].experimental\") IS NULL@@@", |
| "@@@STEP_LOG_LINE@query@ -- Only use tryjobs with no autocorrelator findings. Findings indicate@@@", |
| "@@@STEP_LOG_LINE@query@ -- false rejection.@@@", |
| "@@@STEP_LOG_LINE@query@ AND (@@@", |
| "@@@STEP_LOG_LINE@query@ JSON_EXTRACT(build_info.output.properties, \"$.num_autocorrelator_findings\") IS NULL@@@", |
| "@@@STEP_LOG_LINE@query@ OR JSON_EXTRACT(build_info.output.properties, \"$.num_autocorrelator_findings\") = \"0.0\"@@@", |
| "@@@STEP_LOG_LINE@query@ )@@@", |
| "@@@STEP_LOG_LINE@query@ AND cq_success = 0@@@", |
| "@@@STEP_LOG_LINE@query@ -- Exclude any tryjobs with checkout failures.@@@", |
| "@@@STEP_LOG_LINE@query@ AND JSON_EXTRACT(build_info.output.properties, \"$.checkout_failed\") IS NULL@@@", |
| "@@@STEP_LOG_LINE@query@ -- Exclude any internal tryjobs with build failures. Build failures are a@@@", |
| "@@@STEP_LOG_LINE@query@ -- known issue that we don't need to file for. See fxbug.dev/80124 for@@@", |
| "@@@STEP_LOG_LINE@query@ -- more context.@@@", |
| "@@@STEP_LOG_LINE@query@ AND (@@@", |
| "@@@STEP_LOG_LINE@query@ (@@@", |
| "@@@STEP_LOG_LINE@query@ JSON_EXTRACT(build_info.output.properties, \"$.build_failed\") IS NULL@@@", |
| "@@@STEP_LOG_LINE@query@ AND JSON_EXTRACT(build_info.output.properties, \"$.failed_to_build\") IS NULL@@@", |
| "@@@STEP_LOG_LINE@query@ )@@@", |
| "@@@STEP_LOG_LINE@query@ OR build_info.builder.project = \"fuchsia\"@@@", |
| "@@@STEP_LOG_LINE@query@ )@@@", |
| "@@@STEP_LOG_LINE@query@ -- Exclude any tryjobs which have size check failures. Size check failures@@@", |
| "@@@STEP_LOG_LINE@query@ -- are a known issue that we don't need to continue to triage. See@@@", |
| "@@@STEP_LOG_LINE@query@ -- fxbug.dev/81426 for more context.@@@", |
| "@@@STEP_LOG_LINE@query@ AND build_info.summary_markdown != \"binary size checks failed\"@@@", |
| "@@@STEP_LOG_LINE@query@ GROUP BY equivalent_cl_group_key@@@", |
| "@@@STEP_LOG_LINE@query@ )@@@", |
| "@@@STEP_LOG_LINE@query@@@@", |
| "@@@STEP_LOG_LINE@query@-- If all equivalent patchsets failed with different builders i.e. a series of@@@", |
| "@@@STEP_LOG_LINE@query@-- different flakes caused a failure, this query may output some flakes.@@@", |
| "@@@STEP_LOG_LINE@query@-- Empirically however, this does not seem to be very frequent.@@@", |
| "@@@STEP_LOG_LINE@query@SELECT@@@", |
| "@@@STEP_LOG_LINE@query@ ad.change AS change,@@@", |
| "@@@STEP_LOG_LINE@query@ 'https://fxrev.dev/c/' || ad.change || '/' || ad.patchset@@@", |
| "@@@STEP_LOG_LINE@query@ AS patchset,@@@", |
| "@@@STEP_LOG_LINE@query@ CASE@@@", |
| "@@@STEP_LOG_LINE@query@ WHEN ad.patchset > 1@@@", |
| "@@@STEP_LOG_LINE@query@ THEN@@@", |
| "@@@STEP_LOG_LINE@query@ 'https://fxrev.dev/c/' || ad.change || '/'@@@", |
| "@@@STEP_LOG_LINE@query@ || CAST(ad.patchset - 1 AS string) || '..' || ad.patchset@@@", |
| "@@@STEP_LOG_LINE@query@ ELSE NULL@@@", |
| "@@@STEP_LOG_LINE@query@ END@@@", |
| "@@@STEP_LOG_LINE@query@ AS prev_patchset,@@@", |
| "@@@STEP_LOG_LINE@query@ CASE@@@", |
| "@@@STEP_LOG_LINE@query@ WHEN ad.patchset < pi.max_patchset@@@", |
| "@@@STEP_LOG_LINE@query@ THEN@@@", |
| "@@@STEP_LOG_LINE@query@ 'https://fxrev.dev/c/' || ad.change || '/' || ad.patchset || '..'@@@", |
| "@@@STEP_LOG_LINE@query@ || CAST(ad.patchset + 1 AS string)@@@", |
| "@@@STEP_LOG_LINE@query@ ELSE NULL@@@", |
| "@@@STEP_LOG_LINE@query@ END@@@", |
| "@@@STEP_LOG_LINE@query@ AS next_patchset,@@@", |
| "@@@STEP_LOG_LINE@query@ ARRAY(SELECT DISTINCT * FROM UNNEST(failed_builders)) AS failed_builders,@@@", |
| "@@@STEP_LOG_LINE@query@ ARRAY(@@@", |
| "@@@STEP_LOG_LINE@query@ SELECT DISTINCT 'https://ci.chromium.org/b/' || bbid || ' '@@@", |
| "@@@STEP_LOG_LINE@query@ FROM UNNEST(bbids) AS bbid@@@", |
| "@@@STEP_LOG_LINE@query@ ) AS build_links,@@@", |
| "@@@STEP_LOG_LINE@query@FROM all_details AS ad@@@", |
| "@@@STEP_LOG_LINE@query@JOIN patchset_info AS pi@@@", |
| "@@@STEP_LOG_LINE@query@ ON ad.change = pi.change@@@", |
| "@@@STEP_LOG_LINE@query@WHERE@@@", |
| "@@@STEP_LOG_LINE@query@ start_time >= DATETIME '2012-05-13 12:53:21'@@@", |
| "@@@STEP_LOG_LINE@query@ AND start_time <= DATETIME '2012-05-14 12:53:23'@@@", |
| "@@@STEP_LOG_LINE@query@ AND project != \"fuchsia\";@@@", |
| "@@@STEP_LOG_END@query@@@", |
| "@@@SET_BUILD_PROPERTY@query_end_time@\"2012-05-14 12:53:23\"@@@", |
| "@@@SET_BUILD_PROPERTY@query_start_time@\"2012-05-13 12:53:21\"@@@" |
| ] |
| }, |
| { |
| "cmd": [ |
| "vpython3", |
| "-u", |
| "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", |
| "--json-output", |
| "/path/to/tmp/json", |
| "copy", |
| "[START_DIR]/sapling.json", |
| "/path/to/tmp/" |
| ], |
| "infra_step": true, |
| "name": "read rows", |
| "~followup_annotations": [ |
| "@@@STEP_LOG_LINE@sapling.json@[@@@", |
| "@@@STEP_LOG_LINE@sapling.json@ {@@@", |
| "@@@STEP_LOG_LINE@sapling.json@ \"build_links\": [@@@", |
| "@@@STEP_LOG_LINE@sapling.json@ \"https://ci.chromium.org/b/123\",@@@", |
| "@@@STEP_LOG_LINE@sapling.json@ \"https://ci.chromium.org/b/456\"@@@", |
| "@@@STEP_LOG_LINE@sapling.json@ ],@@@", |
| "@@@STEP_LOG_LINE@sapling.json@ \"change\": 123456,@@@", |
| "@@@STEP_LOG_LINE@sapling.json@ \"failed_builders\": [@@@", |
| "@@@STEP_LOG_LINE@sapling.json@ \"foo.x64\",@@@", |
| "@@@STEP_LOG_LINE@sapling.json@ \"foo.arm64\"@@@", |
| "@@@STEP_LOG_LINE@sapling.json@ ],@@@", |
| "@@@STEP_LOG_LINE@sapling.json@ \"next_patchset\": \"https://fxrev.dev/c/123456/2..3\",@@@", |
| "@@@STEP_LOG_LINE@sapling.json@ \"patchset\": \"https://fxrev.dev/c/123456/2\",@@@", |
| "@@@STEP_LOG_LINE@sapling.json@ \"prev_patchset\": \"https://fxrev.dev/c/123456/1..2\"@@@", |
| "@@@STEP_LOG_LINE@sapling.json@ }@@@", |
| "@@@STEP_LOG_LINE@sapling.json@]@@@", |
| "@@@STEP_LOG_END@sapling.json@@@" |
| ] |
| }, |
| { |
| "cmd": [], |
| "name": "file bugs" |
| }, |
| { |
| "cmd": [], |
| "name": "file bugs.ensure monorail", |
| "~followup_annotations": [ |
| "@@@STEP_NEST_LEVEL@1@@@" |
| ] |
| }, |
| { |
| "cmd": [ |
| "vpython3", |
| "-u", |
| "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", |
| "--json-output", |
| "/path/to/tmp/json", |
| "copy", |
| "RECIPE_MODULE[fuchsia::monorail]/resources/tool_manifest.json", |
| "/path/to/tmp/json" |
| ], |
| "infra_step": true, |
| "name": "file bugs.ensure monorail.read manifest", |
| "~followup_annotations": [ |
| "@@@STEP_NEST_LEVEL@2@@@", |
| "@@@STEP_LOG_LINE@tool_manifest.json@{@@@", |
| "@@@STEP_LOG_LINE@tool_manifest.json@ \"path\": \"path/to/monorail\",@@@", |
| "@@@STEP_LOG_LINE@tool_manifest.json@ \"version\": \"version:pinned-version\"@@@", |
| "@@@STEP_LOG_LINE@tool_manifest.json@}@@@", |
| "@@@STEP_LOG_END@tool_manifest.json@@@" |
| ] |
| }, |
| { |
| "cmd": [], |
| "name": "file bugs.ensure monorail.install path/to/monorail", |
| "~followup_annotations": [ |
| "@@@STEP_NEST_LEVEL@2@@@" |
| ] |
| }, |
| { |
| "cmd": [ |
| "vpython3", |
| "-u", |
| "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", |
| "--json-output", |
| "/path/to/tmp/json", |
| "ensure-directory", |
| "--mode", |
| "0777", |
| "[START_DIR]/cipd_tool/path/to/monorail/version%3Apinned-version" |
| ], |
| "infra_step": true, |
| "name": "file bugs.ensure monorail.install path/to/monorail.ensure package directory", |
| "~followup_annotations": [ |
| "@@@STEP_NEST_LEVEL@3@@@" |
| ] |
| }, |
| { |
| "cmd": [ |
| "cipd", |
| "ensure", |
| "-root", |
| "[START_DIR]/cipd_tool/path/to/monorail/version%3Apinned-version", |
| "-ensure-file", |
| "path/to/monorail version:pinned-version", |
| "-max-threads", |
| "0", |
| "-json-output", |
| "/path/to/tmp/json" |
| ], |
| "infra_step": true, |
| "name": "file bugs.ensure monorail.install path/to/monorail.ensure_installed", |
| "~followup_annotations": [ |
| "@@@STEP_NEST_LEVEL@3@@@", |
| "@@@STEP_LOG_LINE@json.output@{@@@", |
| "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@", |
| "@@@STEP_LOG_LINE@json.output@ \"\": [@@@", |
| "@@@STEP_LOG_LINE@json.output@ {@@@", |
| "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-version:pinned-v\", @@@", |
| "@@@STEP_LOG_LINE@json.output@ \"package\": \"path/to/monorail\"@@@", |
| "@@@STEP_LOG_LINE@json.output@ }@@@", |
| "@@@STEP_LOG_LINE@json.output@ ]@@@", |
| "@@@STEP_LOG_LINE@json.output@ }@@@", |
| "@@@STEP_LOG_LINE@json.output@}@@@", |
| "@@@STEP_LOG_END@json.output@@@" |
| ] |
| }, |
| { |
| "cmd": [ |
| "[START_DIR]/cipd_tool/path/to/monorail/version%3Apinned-version/monorail", |
| "new-issue", |
| "-summary", |
| "[sapling] Internal-only failures found in https://fxrev.dev/c/123456/2", |
| "-description", |
| "\nThis bug was filed by http://go/tq-sapling-bug-pipeline.\n\nWe've identified that https://fxrev.dev/c/123456/2 ran through CQ and failed exclusively on\ninternal tryjobs. This indicates a gap in platform test coverage that is\ncurrently covered only by out-of-platform tests.\n\nFailed builds:\nfoo.x64: https://ci.chromium.org/b/123\nfoo.arm64: https://ci.chromium.org/b/456\n\nPatchset: https://fxrev.dev/c/123456/2\nPrevious patchset: https://fxrev.dev/c/123456/1..2\nNext patchset: https://fxrev.dev/c/123456/2..3\n\nMore context: http://go/tq-sapling\n", |
| "-component", |
| "EngProd>Sapling", |
| "-label", |
| "Restrict-View-Google", |
| "-label", |
| "sapling-untriaged", |
| "-label", |
| "sapling-123456" |
| ], |
| "name": "file bugs.file bug for https://fxrev.dev/c/123456/2", |
| "~followup_annotations": [ |
| "@@@STEP_NEST_LEVEL@1@@@", |
| "@@@STEP_LOG_LINE@json.output@{@@@", |
| "@@@STEP_LOG_LINE@json.output@ \"id\": 605@@@", |
| "@@@STEP_LOG_LINE@json.output@}@@@", |
| "@@@STEP_LOG_END@json.output@@@", |
| "@@@STEP_LINK@monorail link@https://fxbug.dev/605@@@" |
| ] |
| }, |
| { |
| "name": "$result" |
| } |
| ] |