)]}'
{
  "commit": "bd5d945e0af780524812b2918cc1fe04096b3acc",
  "tree": "2a55538342f503198a1c93594e5ff1aeded66324",
  "parents": [
    "05c17dc752cc69ac50134a19d62efcadb9a2fb42"
  ],
  "author": {
    "name": "Yun Peng",
    "email": "pcloudy@google.com",
    "time": "Tue Sep 15 10:27:23 2026 +0200"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Sep 15 10:27:23 2026 +0200"
  },
  "message": "Fix EolPlatforms unit tests crashing on PRs that modify config files (#2855)\n\n`create_initial_steps()` prepends a label-less `{\"block\": ...}` step to\npresubmit builds whose PR modifies a config file (anything matching\n`is_config_file()`, i.e. `*.yml` or a path containing `.bazelci`).\n\nThe `EolPlatforms` tests indexed `s[\"label\"]` on *every* step returned\nby `print_project_pipeline()`, so they blew up with `KeyError: \u0027label\u0027`\non any such PR, regardless of the content of the change. Example: #2853,\nwhere the only change is dropping two platforms from\n`smoke_test/smoke_test.yml`, yet the unit test job fails on Linux, macOS\nand Windows.\n\nPostsubmit is unaffected because `create_initial_steps()` returns `[]`\non the default branch, which is why this only ever shows up as a\npresubmit-only failure.\n\nFix: look the label up defensively, and skip non-dict steps (e.g. plain\n`\"wait\"`).\n\nVerified locally against the #2853 head commit:\n\n```\ncd buildkite\nBUILDKITE_BRANCH\u003dmeteorcloudy-patch-3 BUILDKITE_PIPELINE_DEFAULT_BRANCH\u003dmaster \\\n  BUILDKITE_COMMIT\u003d191d4b08733636654d77ff0dd59b5273d3c5f9e2 python3 bazelci_test.py EolPlatforms\n```\n\nfails with `KeyError: \u0027label\u0027` before this change and passes after it.\nFull suite: 38 tests, OK.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1838b0ea2af468aa02bed2e8c2d233c9929623bc",
      "old_mode": 33261,
      "old_path": "buildkite/bazelci_test.py",
      "new_id": "e984494b6ca6b1d31863a9c3fdce81dff7b0e1c1",
      "new_mode": 33261,
      "new_path": "buildkite/bazelci_test.py"
    }
  ]
}
