[
  {
    "cmd": [
      "vpython3",
      "-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": [
      "vpython3",
      "-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",
    "~followup_annotations": [
      "@@@STEP_LOG_LINE@VERSION@42@@@",
      "@@@STEP_LOG_END@VERSION@@@"
    ]
  },
  {
    "cmd": [
      "vpython3",
      "-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",
    "~followup_annotations": [
      "@@@STEP_LOG_LINE@SKP_VERSION@42@@@",
      "@@@STEP_LOG_END@SKP_VERSION@@@"
    ]
  },
  {
    "cmd": [
      "vpython3",
      "-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",
    "~followup_annotations": [
      "@@@STEP_LOG_LINE@VERSION@42@@@",
      "@@@STEP_LOG_END@VERSION@@@"
    ]
  },
  {
    "cmd": [
      "vpython3",
      "-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",
    "~followup_annotations": [
      "@@@STEP_LOG_LINE@SK_IMAGE_VERSION@42@@@",
      "@@@STEP_LOG_END@SK_IMAGE_VERSION@@@"
    ]
  },
  {
    "cmd": [
      "vpython3",
      "-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",
    "~followup_annotations": [
      "@@@STEP_LOG_LINE@VERSION@42@@@",
      "@@@STEP_LOG_END@VERSION@@@"
    ]
  },
  {
    "cmd": [
      "vpython3",
      "-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",
    "~followup_annotations": [
      "@@@STEP_LOG_LINE@SVG_VERSION@42@@@",
      "@@@STEP_LOG_END@SVG_VERSION@@@"
    ]
  },
  {
    "cmd": [
      "vpython3",
      "-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": [
      "vpython3",
      "-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",
      "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\n\nfrom urllib.request import urlopen\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        urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n      hashes = w.read().decode('utf-8')\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_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@@@@",
      "@@@STEP_LOG_LINE@python.inline@from urllib.request import urlopen@@@",
      "@@@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@        urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@",
      "@@@STEP_LOG_LINE@python.inline@      hashes = w.read().decode('utf-8')@@@",
      "@@@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",
      "import os\nprint(os.environ.get('SWARMING_BOT_ID', ''))\n"
    ],
    "name": "get swarming bot id",
    "~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",
      "import os\nprint(os.environ.get('SWARMING_TASK_ID', ''))\n"
    ],
    "name": "get swarming task id",
    "~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": [
      "powershell",
      "-ExecutionPolicy",
      "Unrestricted",
      "-File",
      "RECIPE_MODULE[skia::flavor]\\resources\\win_run_and_check_log.ps1",
      "[START_DIR]\\build\\dm",
      "--example",
      "--flags",
      "--properties",
      "bot",
      "skia-bot-123",
      "key1",
      "value1",
      "task",
      "123456",
      "--resourcePath",
      "[START_DIR]\\skia\\resources",
      "--skps",
      "[START_DIR]\\skp",
      "--images",
      "[START_DIR]\\skimage\\dm",
      "--colorImages",
      "[START_DIR]\\skimage\\colorspace",
      "--svgs",
      "[START_DIR]\\svg\\svg",
      "--uninterestingHashesFile",
      "[START_DIR]\\tmp\\uninteresting_hashes.txt",
      "--writePath",
      "[START_DIR]\\[SWARM_OUT_DIR]"
    ],
    "env": {
      "CHROME_HEADLESS": "1",
      "PATH": "<PATH>;RECIPE_REPO[depot_tools]"
    },
    "name": "dm"
  },
  {
    "name": "$result"
  }
]