)]}'
{
  "commit": "02749ca8edc37e56a1ad33deaea2eed9cc719ade",
  "tree": "934cc5ee4f075b0c475bc0ffe6d15d132ed02259",
  "parents": [
    "d6e7cc353b126000a39b497b6acf9b23b712d7f6"
  ],
  "author": {
    "name": "Georges Farah",
    "email": "georges.farah@datadoghq.com",
    "time": "Thu Jul 30 20:54:22 2026 +0200"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Jul 30 18:54:22 2026 +0000"
  },
  "message": "fix(crate_universe): pass OUTPUT_BASE as --output_base startup flag to bazel info (#4183)\n\n## Problem\n\nThe `OUTPUT_BASE` env var was added to let CI environments supply the\noutput_base without relying on `bazel info`. However, the override is\napplied **after** parsing the `bazel info` output:\n\n```rust\nlet output \u003d process::Command::new(bazel).arg(\"info\")...output()?;\nif !output.status.success() {\n    bail!(output.status)    // \u003c-- bails here when output_base is not writable\n}\n// ... parse output ...\nif let Ok(path) \u003d env::var(\"OUTPUT_BASE\") {  // \u003c-- never reached\n    bazel_info.insert(...);\n}\n```\n\nWhen `bazel info` fails (e.g. the default `~/.cache/bazel/...` is not\nwritable in a sandboxed CI), the function bails before `OUTPUT_BASE` is\never checked — making the env var useless for its intended purpose.\n\n## Fix\n\nPass `OUTPUT_BASE` as a `--output_base` Bazel **startup flag** (before\nthe subcommand):\n\n```\nbazel --output_base\u003d/path/to/base info release output_base\n```\n\nStartup flags take effect before Bazel accesses any path, so it never\ntouches the default (possibly non-writable) output_base. The `bazel\ninfo` subprocess runs normally and the post-parsing override is no\nlonger needed.\n\n## Changes\n\n- `crate_universe/src/cli/vendor.rs`: restructure `BazelInfo::try_new`\nto optionally inject `--output_base` as a startup flag; remove the\npost-parsing `OUTPUT_BASE` override.\n- Removed `test_parse_bazel_info_output_base_env_override` since\n`parse_bazel_info` no longer handles the `OUTPUT_BASE` override — the\nexisting `test_bazel_info` already covers the parsing logic.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3ab12b3a53526dcb21f761e0fb4409a80f339836",
      "old_mode": 33188,
      "old_path": "crate_universe/src/cli/vendor.rs",
      "new_id": "539550db5e42dc35c5f145c8a2a658cc9a3ebf5d",
      "new_mode": 33188,
      "new_path": "crate_universe/src/cli/vendor.rs"
    }
  ]
}
