)]}'
{
  "commit": "381762af4e3e7d1c83e827aec9bb14b4c477f492",
  "tree": "0dd321e005787fdf9a50d4513a17c1bddc24a76f",
  "parents": [
    "6c0888aa7bb65cea7c02e87f06e78f9306b4c978"
  ],
  "author": {
    "name": "gfrankliu",
    "email": "17630355+gfrankliu@users.noreply.github.com",
    "time": "Mon Oct 05 01:56:44 2026 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Oct 05 01:56:44 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\").",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2cc2b2fe0e52032eb4ca2f6dcb132f42a2e1da4e",
      "new_mode": 33188,
      "new_path": "news/zipapp-absolute-source-symlinks.fixed.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"
    }
  ]
}
