)]}'
{
  "commit": "69410eba34e1fbd10b92921cb3f22016f1e2d153",
  "tree": "d01d0dad37add5cbea25dcdfa81f19c4425aaf48",
  "parents": [
    "c28687d3cbb245bd66697013d94e47c4237e0453"
  ],
  "author": {
    "name": "John \"codefu\" McDole",
    "email": "codefu@google.com",
    "time": "Mon Jun 15 11:33:00 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Jun 15 18:33:00 2026 +0000"
  },
  "message": "feat: linux_analyze in a workflow (#187889)\n\nfixes #187817\n\n- Will run the same as a LUCI recipe, but in GitHub actions\n- Updated composite-flutter-setup to install/cache ktlint.\n- Should detect and wait for engine builds before running\n\nSuccessful run:\nhttps://github.com/flutter/flutter/actions/runs/27382050611/job/80920878955?pr\u003d187889#annotation:15:3\n\n\n## Pre-launch Checklist\n\n- [x] I read the [Contributor Guide] and followed the process outlined\nthere for submitting PRs.\n- [x] I read the [AI contribution guidelines] and understand my\nresponsibilities, or I am not using AI tools.\n- [x] I read the [Tree Hygiene] wiki page, which explains my\nresponsibilities.\n- [x] I read and followed the [Flutter Style Guide], including [Features\nwe expect every widget to implement].\n- [x] I signed the [CLA].\n- [x] I listed at least one issue that this PR fixes in the description\nabove.\n- [x] I updated/added relevant documentation (doc comments with `///`).\n- [ ] I added new tests to check the change I am making, or this PR is\n[test-exempt].\n- [x] I followed the [breaking change policy] and added [Data Driven\nFixes] where supported.\n- [ ] All existing and new tests are passing.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d60e8d1b31c4f5267c93105a6060ce8e7aaeecf2",
      "old_mode": 33188,
      "old_path": ".github/actions/composite-flutter-setup/action.yml",
      "new_id": "61c1a81ac4321f7e6c7062e0da6664e06fa4c9b2",
      "new_mode": 33188,
      "new_path": ".github/actions/composite-flutter-setup/action.yml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c80256b9570b9d29ac187abe4eff62d532b0b4ef",
      "new_mode": 33261,
      "new_path": ".github/scripts/did_engine_change.sh"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a5ea87b8dfdf8908b6a8b409bae478e45693cb0b",
      "new_mode": 33261,
      "new_path": ".github/scripts/git_files_changed.sh"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b2b38013f5fbe48a424fa586a3840b649809b7ea",
      "new_mode": 33188,
      "new_path": ".github/workflows/tree-analyze.yml"
    },
    {
      "type": "modify",
      "old_id": "81b77e46dbbec20da3cd4ed2ab4a3ba79725dbc6",
      "old_mode": 33188,
      "old_path": "dev/bots/analyze.dart",
      "new_id": "dad6843d9ab11b413143dcdc393a00bdb6e8962e",
      "new_mode": 33188,
      "new_path": "dev/bots/analyze.dart"
    }
  ]
}
