[
  {
    "cmd": [
      "python",
      "-u",
      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
      "--json-output",
      "/path/to/tmp/json",
      "ensure-directory",
      "--mode",
      "0777",
      "[START_DIR]/tmp"
    ],
    "infra_step": true,
    "name": "makedirs tmp_dir"
  },
  {
    "cmd": [
      "python",
      "-u",
      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
      "--json-output",
      "/path/to/tmp/json",
      "copy",
      "[START_DIR]/skia/infra/bots/assets/skp/VERSION",
      "/path/to/tmp/"
    ],
    "infra_step": true,
    "name": "Get skp VERSION"
  },
  {
    "cmd": [
      "python",
      "-u",
      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
      "--json-output",
      "/path/to/tmp/json",
      "copy",
      "42",
      "[START_DIR]/tmp/SKP_VERSION"
    ],
    "infra_step": true,
    "name": "write SKP_VERSION"
  },
  {
    "cmd": [
      "python",
      "-u",
      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
      "--json-output",
      "/path/to/tmp/json",
      "copy",
      "[START_DIR]/skia/infra/bots/assets/skimage/VERSION",
      "/path/to/tmp/"
    ],
    "infra_step": true,
    "name": "Get skimage VERSION"
  },
  {
    "cmd": [
      "python",
      "-u",
      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
      "--json-output",
      "/path/to/tmp/json",
      "copy",
      "42",
      "[START_DIR]/tmp/SK_IMAGE_VERSION"
    ],
    "infra_step": true,
    "name": "write SK_IMAGE_VERSION"
  },
  {
    "cmd": [
      "python",
      "-u",
      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
      "--json-output",
      "/path/to/tmp/json",
      "copy",
      "[START_DIR]/skia/infra/bots/assets/svg/VERSION",
      "/path/to/tmp/"
    ],
    "infra_step": true,
    "name": "Get svg VERSION"
  },
  {
    "cmd": [
      "python",
      "-u",
      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
      "--json-output",
      "/path/to/tmp/json",
      "copy",
      "42",
      "[START_DIR]/tmp/SVG_VERSION"
    ],
    "infra_step": true,
    "name": "write SVG_VERSION"
  },
  {
    "cmd": [
      "python",
      "-u",
      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
      "--json-output",
      "/path/to/tmp/json",
      "rmtree",
      "[START_DIR]/test"
    ],
    "infra_step": true,
    "name": "rmtree test"
  },
  {
    "cmd": [
      "python",
      "-u",
      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
      "--json-output",
      "/path/to/tmp/json",
      "ensure-directory",
      "--mode",
      "0777",
      "[START_DIR]/test"
    ],
    "infra_step": true,
    "name": "makedirs test"
  },
  {
    "cmd": [
      "python",
      "-u",
      "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = sys.argv[1]\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n  try:\n    with contextlib.closing(\n        urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n      hashes = w.read()\n      with open(sys.argv[2], 'w') as f:\n        f.write(hashes)\n        break\n  except Exception as e:\n    print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n    print e\n    if retry == RETRIES:\n      raise\n    waittime = WAIT_BASE * math.pow(2, retry)\n    print 'Retry in %d seconds.' % waittime\n    time.sleep(waittime)\n",
      "https://example.com/hashes.txt",
      "[START_DIR]/tmp/uninteresting_hashes.txt"
    ],
    "env": {
      "CHROME_HEADLESS": "1",
      "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]"
    },
    "infra_step": true,
    "name": "get uninteresting hashes",
    "~followup_annotations": [
      "@@@STEP_LOG_LINE@python.inline@@@@",
      "@@@STEP_LOG_LINE@python.inline@import contextlib@@@",
      "@@@STEP_LOG_LINE@python.inline@import math@@@",
      "@@@STEP_LOG_LINE@python.inline@import socket@@@",
      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
      "@@@STEP_LOG_LINE@python.inline@import time@@@",
      "@@@STEP_LOG_LINE@python.inline@import urllib2@@@",
      "@@@STEP_LOG_LINE@python.inline@@@@",
      "@@@STEP_LOG_LINE@python.inline@HASHES_URL = sys.argv[1]@@@",
      "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@",
      "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@",
      "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@",
      "@@@STEP_LOG_LINE@python.inline@@@@",
      "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@",
      "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@",
      "@@@STEP_LOG_LINE@python.inline@  try:@@@",
      "@@@STEP_LOG_LINE@python.inline@    with contextlib.closing(@@@",
      "@@@STEP_LOG_LINE@python.inline@        urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@",
      "@@@STEP_LOG_LINE@python.inline@      hashes = w.read()@@@",
      "@@@STEP_LOG_LINE@python.inline@      with open(sys.argv[2], 'w') as f:@@@",
      "@@@STEP_LOG_LINE@python.inline@        f.write(hashes)@@@",
      "@@@STEP_LOG_LINE@python.inline@        break@@@",
      "@@@STEP_LOG_LINE@python.inline@  except Exception as e:@@@",
      "@@@STEP_LOG_LINE@python.inline@    print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@",
      "@@@STEP_LOG_LINE@python.inline@    print e@@@",
      "@@@STEP_LOG_LINE@python.inline@    if retry == RETRIES:@@@",
      "@@@STEP_LOG_LINE@python.inline@      raise@@@",
      "@@@STEP_LOG_LINE@python.inline@    waittime = WAIT_BASE * math.pow(2, retry)@@@",
      "@@@STEP_LOG_LINE@python.inline@    print 'Retry in %d seconds.' % waittime@@@",
      "@@@STEP_LOG_LINE@python.inline@    time.sleep(waittime)@@@",
      "@@@STEP_LOG_END@python.inline@@@"
    ]
  },
  {
    "cmd": [
      "python",
      "-u",
      "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n"
    ],
    "name": "get swarming bot id",
    "stdout": "/path/to/tmp/",
    "~followup_annotations": [
      "@@@STEP_LOG_LINE@python.inline@import os@@@",
      "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@",
      "@@@STEP_LOG_END@python.inline@@@"
    ]
  },
  {
    "cmd": [
      "python",
      "-u",
      "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n"
    ],
    "name": "get swarming task id",
    "stdout": "/path/to/tmp/",
    "~followup_annotations": [
      "@@@STEP_LOG_LINE@python.inline@import os@@@",
      "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@",
      "@@@STEP_LOG_END@python.inline@@@"
    ]
  },
  {
    "cmd": [
      "[START_DIR]/build/dm",
      "--resourcePath",
      "[START_DIR]/skia/resources",
      "--skps",
      "[START_DIR]/skp",
      "--images",
      "[START_DIR]/skimage/dm",
      "--colorImages",
      "[START_DIR]/skimage/colorspace",
      "--nameByHash",
      "--properties",
      "gitHash",
      "abc123",
      "builder",
      "Test-Mac-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-MoltenVK_Vulkan",
      "buildbucket_build_id",
      "123454321",
      "swarming_bot_id",
      "skia-bot-123",
      "swarming_task_id",
      "123456",
      "--svgs",
      "[START_DIR]/svg",
      "--key",
      "arch",
      "x86_64",
      "compiler",
      "Clang",
      "configuration",
      "Release",
      "cpu_or_gpu",
      "GPU",
      "cpu_or_gpu_value",
      "RadeonHD8870M",
      "extra_config",
      "MoltenVK_Vulkan",
      "model",
      "MacBookPro11.5",
      "os",
      "Mac",
      "--uninterestingHashesFile",
      "[START_DIR]/tmp/uninteresting_hashes.txt",
      "--writePath",
      "[START_DIR]/[SWARM_OUT_DIR]",
      "--dont_write",
      "pdf",
      "--randomProcessorTest",
      "--nocpu",
      "--config",
      "vk",
      "--src",
      "tests",
      "gm",
      "image",
      "colorImage",
      "svg",
      "--blacklist",
      "_",
      "svg",
      "_",
      "svgparse_",
      "_",
      "image",
      "gen_platf",
      "rgba32abf.bmp",
      "_",
      "image",
      "gen_platf",
      "rgb24prof.bmp",
      "_",
      "image",
      "gen_platf",
      "rgb24lprof.bmp",
      "_",
      "image",
      "gen_platf",
      "8bpp-pixeldata-cropped.bmp",
      "_",
      "image",
      "gen_platf",
      "4bpp-pixeldata-cropped.bmp",
      "_",
      "image",
      "gen_platf",
      "32bpp-pixeldata-cropped.bmp",
      "_",
      "image",
      "gen_platf",
      "24bpp-pixeldata-cropped.bmp",
      "_",
      "image",
      "gen_platf",
      "frame_larger_than_image.gif",
      "_",
      "image",
      "gen_platf",
      "inc0.png",
      "_",
      "image",
      "gen_platf",
      "inc1.png",
      "_",
      "image",
      "gen_platf",
      "inc2.png",
      "_",
      "image",
      "gen_platf",
      "inc3.png",
      "_",
      "image",
      "gen_platf",
      "inc4.png",
      "_",
      "image",
      "gen_platf",
      "inc5.png",
      "_",
      "image",
      "gen_platf",
      "inc6.png",
      "_",
      "image",
      "gen_platf",
      "inc7.png",
      "_",
      "image",
      "gen_platf",
      "inc8.png",
      "_",
      "image",
      "gen_platf",
      "inc9.png",
      "_",
      "image",
      "gen_platf",
      "inc10.png",
      "_",
      "image",
      "gen_platf",
      "inc11.png",
      "_",
      "image",
      "gen_platf",
      "inc12.png",
      "_",
      "image",
      "gen_platf",
      "inc13.png",
      "_",
      "image",
      "gen_platf",
      "inc14.png",
      "_",
      "image",
      "gen_platf",
      "incInterlaced.png",
      "_",
      "image",
      "gen_platf",
      "incInterlaced.gif",
      "_",
      "image",
      "gen_platf",
      "inc1.gif",
      "_",
      "image",
      "gen_platf",
      "inc0.gif",
      "_",
      "image",
      "gen_platf",
      "butterfly.gif",
      "_",
      "image",
      "gen_platf",
      "testimgari.jpg",
      "_",
      "image",
      "gen_platf",
      "rle8-height-negative.bmp",
      "_",
      "image",
      "gen_platf",
      "rle4-height-negative.bmp",
      "_",
      "image",
      "gen_platf",
      "error",
      "_",
      "image",
      "_",
      "interlaced1.png",
      "_",
      "image",
      "_",
      "interlaced2.png",
      "_",
      "image",
      "_",
      "interlaced3.png",
      "_",
      "image",
      "_",
      ".arw",
      "_",
      "image",
      "_",
      ".cr2",
      "_",
      "image",
      "_",
      ".dng",
      "_",
      "image",
      "_",
      ".nef",
      "_",
      "image",
      "_",
      ".nrw",
      "_",
      "image",
      "_",
      ".orf",
      "_",
      "image",
      "_",
      ".raf",
      "_",
      "image",
      "_",
      ".rw2",
      "_",
      "image",
      "_",
      ".pef",
      "_",
      "image",
      "_",
      ".srw",
      "_",
      "image",
      "_",
      ".ARW",
      "_",
      "image",
      "_",
      ".CR2",
      "_",
      "image",
      "_",
      ".DNG",
      "_",
      "image",
      "_",
      ".NEF",
      "_",
      "image",
      "_",
      ".NRW",
      "_",
      "image",
      "_",
      ".ORF",
      "_",
      "image",
      "_",
      ".RAF",
      "_",
      "image",
      "_",
      ".RW2",
      "_",
      "image",
      "_",
      ".PEF",
      "_",
      "image",
      "_",
      ".SRW",
      "_",
      "gm",
      "_",
      "vertices_scaled_shader",
      "_",
      "gm",
      "_",
      "vertices",
      "--match",
      "~^InitialTextureClear$",
      "~^RGB565TextureTest$",
      "~^RGBA4444TextureTest$",
      "~^WritePixelsNonTextureMSAA_Gpu$",
      "--nonativeFonts",
      "--verbose"
    ],
    "env": {
      "CHROME_HEADLESS": "1",
      "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]"
    },
    "name": "dm"
  },
  {
    "jsonResult": null,
    "name": "$result"
  }
]