)]}'
{
  "commit": "465f8939c4fae38dff384cb0d0a032508862b593",
  "tree": "ae993683ff9864458165abf92dbaaf92215c63c3",
  "parents": [
    "7a661ea0f33401005128a5e2cd6564826047268e"
  ],
  "author": {
    "name": "Dan McArdle",
    "email": "dmcardle@google.com",
    "time": "Thu Nov 17 14:15:59 2022 -0500"
  },
  "committer": {
    "name": "Drew Macrae",
    "email": "drewmacrae@gmail.com",
    "time": "Tue Nov 29 15:56:52 2022 -0500"
  },
  "message": "[ci] Add checks for empty test_suites (and more!)\n\nThis commit adds scripts that check for empty test_suite targets and\ntargets that contain \"banned\" characters. It also re-homes the check for\ntest_suite targets that are not tagged \"manual\".\n\nI\u0027m adding these scripts after making a few mistakes while cleaning up a\nBUILD file in PR #16401.\n\nMy first mistake was forgetting to unpack a tuple. I wound up inserting\nthe tuple\u0027s string representation, rather than one of the tuple\u0027s\nelements, into a target name via `string.format()`. Surprisingly, this\nis not an analysis-time failure! Bazel has no problem inserting\nparentheses and commas into the target name.\n\nIf weird characters are in a target name, for some definition of\n\"weird\", it was probably an accident. The new script returns an error\nwhen it finds targets with weird characters.\n\nThe second mistake I made was defining a test_suite with a non-empty\n`tests` parameter, where none of the labels actually existed. The result\nis a test_suite that appears non-empty, but actually contains zero\ntests.\n\nI believe an empty test_suite indicates an error. The new script returns\nan error if it finds any test_suite targets that contain zero tests.\n\nSigned-off-by: Dan McArdle \u003cdmcardle@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4e81d3ebd68027b26978325ead1c18c05b35be42",
      "old_mode": 33188,
      "old_path": "azure-pipelines.yml",
      "new_id": "7d8ecce9963be57a6a7df3cbf9ffc9c276fb4d94",
      "new_mode": 33188,
      "new_path": "azure-pipelines.yml"
    },
    {
      "type": "modify",
      "old_id": "c53145b52b082b10eab061a4dde2938925323060",
      "old_mode": 33261,
      "old_path": "ci/scripts/check-bazel-tags.sh",
      "new_id": "35d8cb8c94b4dacc7e3e9ef15de84a8a222d2135",
      "new_mode": 33261,
      "new_path": "ci/scripts/check-bazel-tags.sh"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3412f01ec03f25d792a5e546fe1cfc105bd3a390",
      "new_mode": 33261,
      "new_path": "ci/scripts/check_bazel_target_names.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "49cf984875f7f3e084ec83a5468059106dec2b51",
      "new_mode": 33261,
      "new_path": "ci/scripts/check_bazel_test_suites.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4086ee5c98d57b1b33f3e6d816c69ee0b0ddf82d",
      "new_mode": 33188,
      "new_path": "ci/scripts/lib/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e6fbbf2d545714b7017aaebafde5c021d6db58d5",
      "new_mode": 33188,
      "new_path": "ci/scripts/lib/bazel_query.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "af98637293b1f2d66f564721c88550acaee949d1",
      "new_mode": 33188,
      "new_path": "ci/scripts/lib/bazel_query_test.py"
    }
  ]
}
