)]}'
{
  "commit": "d18e3ebbe8958eabf44478d14a04ce54ef641304",
  "tree": "0b69e84530dc1a19d6fb620be3b2a8e58a27fc1d",
  "parents": [
    "11178224f089742fdeb11b808ea6b6b9ca622571"
  ],
  "author": {
    "name": "gfrankliu",
    "email": "17630355+gfrankliu@users.noreply.github.com",
    "time": "Mon Oct 05 01:56:44 2026 +0000"
  },
  "committer": {
    "name": "github-actions[bot]",
    "email": "41898282+github-actions[bot]@users.noreply.github.com",
    "time": "Thu Oct 08 21:02:58 2026 +0000"
  },
  "message": "fix(zipapp): store _solib shared libraries as files, not absolute symlinks (#4211)\n\nSince #4165, the zipper keeps a symlink for an input whose original\nsource is a\nsymlink, looking through the absolute symlink the Bazel sandbox exposes\nthe\ninput as. For the `_solib` entries Bazel creates for shared libraries,\nthe\noriginal source is itself an absolute symlink into the build machine\u0027s\noutput\nbase, so the zipapp stored entries like\n\n    runfiles/_main/_solib_x86_64/libST-..._Slibgrpc.so\n-\u003e\n/home/\u003cuser\u003e/.cache/bazel/\u003chash\u003e/execroot/_main/bazel-out/.../libgrpc.so\n\nwhich dangle on any other machine. Any zipapp whose Python code loads a\nshared\nlibrary from `_solib` (a C extension that links a `cc_library`\ndynamically, or\n`libpython` for an extension that links it) fails to load it outside the\nmachine that built it. Before #4165 these files were copied.\n\nTo fix, only keep the looked-through target when it is relative, e.g.\n`libpython3.10.so -\u003e libpython3.10.so.1.0` inside the runtime, which is\nwhat\nthe size optimization in #4165 is for. Otherwise the file is stored.\n\n* Adds a zipper test with the `_solib` shape: a sandbox symlink to an\nabsolute\nsymlink to the library. It fails without the fix (\"should NOT be a\nsymlink\n  but is\").\n\n(cherry picked from commit 381762af4e3e7d1c83e827aec9bb14b4c477f492)\n\nWork towards #4232\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a00810768f3510f97e0181346f95ab79c72488bc",
      "old_mode": 33188,
      "old_path": "CHANGELOG.md",
      "new_id": "9d3e829fb020f86e1e7e1f8cde84feb072cb90a8",
      "new_mode": 33188,
      "new_path": "CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "e0ff1557d5ee3dedd9512ce20dfbb9e1b56b1310",
      "old_mode": 33188,
      "old_path": "tests/tools/zipapp/zipper_test.py",
      "new_id": "4c66c7fc5f305435572d79118873ea985db32470",
      "new_mode": 33188,
      "new_path": "tests/tools/zipapp/zipper_test.py"
    },
    {
      "type": "modify",
      "old_id": "c0e547284af080351a3f9840b36fd7793369dace",
      "old_mode": 33188,
      "old_path": "tools/zipapp/zipper.py",
      "new_id": "aa96160f112e0b132b95a53fcfe50aee10247eb4",
      "new_mode": 33188,
      "new_path": "tools/zipapp/zipper.py"
    }
  ]
}
