)]}'
{
  "commit": "b663b250c7d6b5f49532d0d474459ab828739ce2",
  "tree": "1ac7d688aeae21c63e5fe5ab83e66baeb6dff8ea",
  "parents": [
    "74c5558ea692f9794a6a1b27253060ce760aef00"
  ],
  "author": {
    "name": "Keyong Han",
    "email": "keyonghan@google.com",
    "time": "Mon Apr 12 18:02:32 2021 +0000"
  },
  "committer": {
    "name": "CQ Bot Account",
    "email": "flutter-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Mon Apr 12 18:02:32 2021 +0000"
  },
  "message": "Add step retry utils\n\nThis CL adds a utils module, and adds step_with_retry function. It is expected to auto retry infra failed steps. The `download dependencies` step in flutter_drone recipe is now using the retry function instead of the regular api.step.\n\nBug: https://github.com/flutter/flutter/issues/79895\nChange-Id: I0a9c9b4ccaa24215427405c52a77e074c668a7ef\nReviewed-on: https://flutter-review.googlesource.com/c/recipes/+/12200\nReviewed-by: Godofredo Contreras \u003cgodofredoc@google.com\u003e\nReviewed-by: Oliver Newman \u003colivernewman@google.com\u003e\nCommit-Queue: Keyong Han \u003ckeyonghan@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "09f4b85e51def0aa6bdaa6fba1a5cc1aebcfe228",
      "new_mode": 33188,
      "new_path": "recipe_modules/retry/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "74289540a303cd9b4bffc65e8377a1679b6308d8",
      "new_mode": 33188,
      "new_path": "recipe_modules/retry/api.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4f82e7079dfef58f687d1222fdadf9d1c6724939",
      "new_mode": 33188,
      "new_path": "recipe_modules/retry/examples/full.expected/failing.json"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f0fbe566f82feecf7ec7ed66d4b8965659654971",
      "new_mode": 33188,
      "new_path": "recipe_modules/retry/examples/full.expected/pass_with_retries.json"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d04d7fa2cdf4ac16637942530edcf34f2b83ea6f",
      "new_mode": 33188,
      "new_path": "recipe_modules/retry/examples/full.py"
    },
    {
      "type": "modify",
      "old_id": "1c79e438bf46cea304ffef21c506207efc4f7cc3",
      "old_mode": 33188,
      "old_path": "recipes/flutter/flutter_drone.py",
      "new_id": "60375cbe1fb5795f0b3047f6e51d505921667e3e",
      "new_mode": 33188,
      "new_path": "recipes/flutter/flutter_drone.py"
    }
  ]
}
