)]}'
{
  "commit": "1dd1cd88d401a1436e9ea2d3c5d281ad1d772af3",
  "tree": "7d740a38e15bb4f53bf7bc01504fe900ff8b40c3",
  "parents": [
    "fc00d4f2f6e89c7066e141eb507969daf22c3b5a"
  ],
  "author": {
    "name": "吴晟 Wu Sheng",
    "email": "wu.sheng@foxmail.com",
    "time": "Fri Aug 14 15:41:39 2026 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Aug 14 15:41:39 2026 +0800"
  },
  "message": "Publish release images by dispatch, built from the tag (#823)\n\nPublishing the 9.7.0 GitHub Release produced no workflow run at all - not a failed\none, nothing - and the images were never pushed.\n\nGitHub runs a release event\u0027s workflow as it exists at the tag, not as it exists on\nthe default branch. The v9.7.0 tag was cut on 12 Aug and the release trigger landed\non main the next day, so GitHub read the tag\u0027s copy of publish-docker.yaml, found\nno release trigger, and correctly did nothing.\n\nThat is not a one-off. The tag is cut at `prepare` and the Release is published at\n`vote-passed`, at least 72 hours later, so anything changed in this workflow inside\nthat window silently does not apply to the release in flight. The window reopens\nevery release; 9.7.0 was just the first time something landed in it.\n\nDrop the release trigger and dispatch instead. `github-release` creates the Release\nand then runs `gh workflow run publish-docker.yaml -f version\u003dx.y.z`, so publishing\nstays automatic rather than becoming something to remember, and there is one path\nrather than two that could both fire. A dispatch always runs the workflow from the\ndefault branch, which makes what publishes a function of main rather than of when\nthe tag happened to be cut. If the dispatch fails the Release is already out, so\nthe script warns with the retry commands instead of aborting.\n\nEverything the run acts on still comes from the tag rather than from a branch or a\ntimestamp. The tree is checked out at refs/tags/vx.y.z, so Dockerfile and Makefile\n- which decide what the image actually is - come from the released source instead\nof from whatever main looks like now; without that a dispatch would have built with\nmain\u0027s copies. The agent package remains the sha512- and signature-verified tarball\nfrom dist/release, and the image tags come from the version. A leading v on the\ninput is tolerated, and leaving it blank builds a development image exactly as a\npush to main does.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ba10b7135647d80efdb5219be0f77b0b0d9662f1",
      "old_mode": 33188,
      "old_path": ".github/workflows/publish-docker.yaml",
      "new_id": "17da4c62bc9450e5e8c749b4e5be052fcaac6cab",
      "new_mode": 33188,
      "new_path": ".github/workflows/publish-docker.yaml"
    },
    {
      "type": "modify",
      "old_id": "71b8c500b483aac6c3e9fccd9114d776db9138d0",
      "old_mode": 33188,
      "old_path": "docs/en/contribution/release-java-agent.md",
      "new_id": "541f01379fa501e1ad676bc51b1b16c63fb468b1",
      "new_mode": 33188,
      "new_path": "docs/en/contribution/release-java-agent.md"
    },
    {
      "type": "modify",
      "old_id": "210bd56a12ba347d628d2be8151f9fa930be5553",
      "old_mode": 33261,
      "old_path": "tools/releasing/release.sh",
      "new_id": "72e06e7aa8fe4de27d8cec2ebfd875d1f03f1119",
      "new_mode": 33261,
      "new_path": "tools/releasing/release.sh"
    }
  ]
}
