{"record":{"id":"8f48e0351dc50a8b","repo":"SeleniumHQ/selenium","slug":"no-v8-revision-found-in-deps-for-chrome-chrome-mi","errorCode":null,"errorMessage":"No v8_revision found in DEPS for Chrome {chrome_milestone['version']}","messagePattern":"No v8_revision found in DEPS for Chrome (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"scripts/update_cdp.py","lineNumber":113,"sourceCode":"    if not target_dir.is_dir() or not any(target_dir.iterdir()):\n        os.makedirs(target_dir, exist_ok=True)\n        if os.path.isdir(source_dir):\n            shutil.copytree(source_dir, target_dir, dirs_exist_ok=True)\n\n        fetch_and_save(\n            f\"https://raw.githubusercontent.com/chromium/chromium/{chrome_milestone['version']}/third_party/blink/public/devtools_protocol/browser_protocol.pdl\",\n            f\"{target_dir}/browser_protocol.pdl\",\n        )\n\n        flatten_browser_pdl(f\"{target_dir}/browser_protocol.pdl\", chrome_milestone[\"version\"])\n\n        deps_content = http.request(\n            \"GET\",\n            f\"https://raw.githubusercontent.com/chromium/chromium/{chrome_milestone['version']}/DEPS\",\n        ).data.decode(\"utf-8\")\n        v8_revision_line = next((line for line in deps_content.split(\"\\n\") if \"v8_revision\" in line), None)\n        if v8_revision_line is None:\n            raise ValueError(f\"No v8_revision found in DEPS for Chrome {chrome_milestone['version']}\")\n        v8_revision = v8_revision_line.split(\": \")[1].strip(\"',\")\n        fetch_and_save(\n            f\"https://raw.githubusercontent.com/v8/v8/{v8_revision}/include/js_protocol.pdl\",\n            f\"{target_dir}/js_protocol.pdl\",\n        )\n\n        # javadocs does not like script tags\n        with open(f\"{target_dir}/browser_protocol.pdl\", \"r+\") as file:\n            script_replace = file.read().replace(\"`<script>`\", \"`script`\")\n            file.seek(0)\n            file.write(script_replace)\n            file.truncate()\n\n\ndef create_new_chrome_files(src_base, chrome_milestone):\n    \"\"\"Create new Chrome devtools files for a language binding.\n\n    Java and .NET need to copy previous version directory into new version","sourceCodeStart":95,"sourceCodeEnd":131,"githubUrl":"https://github.com/SeleniumHQ/selenium/blob/aa36b38e696a0909e973bdf5e2f9031ffe842c4b/scripts/update_cdp.py#L95-L131","documentation":"Raised by add_pdls() in scripts/update_cdp.py when the Chromium DEPS file at the target Chrome version does not contain a line with 'v8_revision'. The function downloads DEPS from raw.githubusercontent.com/chromium/chromium/{version}/DEPS, searches for the first line containing 'v8_revision', and parses the V8 git revision from it to fetch js_protocol.pdl from the v8/v8 repo. If no such line exists, the DEPS format has changed.","triggerScenarios":"Running update_cdp.py for a Chrome version where the DEPS file no longer contains a 'v8_revision' entry: Chromium changed how V8 is pinned (e.g., switched to a different variable name, moved V8 dependency metadata, or restructured DEPS format), or the DEPS file was fetched incorrectly (partial/truncated response).","commonSituations":"Chromium DEPS format evolution — the variable was renamed (e.g., 'v8_revision' to 'v8_branch' or similar); the DEPS parsing logic (split on ': ') no longer matches the format; a new Chromium version changed its dependency management approach; the DEPS file download was truncated and the v8_revision line was cut off.","solutions":["Manually inspect the DEPS file at the target Chrome version (curl the raw URL) to find how V8 is now referenced.","Update the search string and parsing logic in add_pdls() to match the new DEPS format.","If the variable was renamed, update the next() filter and the split logic accordingly.","Verify the DEPS file was fully downloaded (check for truncation)."],"exampleFix":"// before\nv8_revision_line = next((line for line in deps_content.split('\\n') if 'v8_revision' in line), None)\n// after (hypothetical, if Chromium renamed the variable)\nv8_revision_line = next((line for line in deps_content.split('\\n') if 'v8_revision' in line or 'v8_branch' in line), None)","handlingStrategy":"validation","validationCode":"import urllib3\nhttp = urllib3.PoolManager()\ndeps_content = http.request('GET', f'https://raw.githubusercontent.com/chromium/chromium/{version}/DEPS').data.decode('utf-8')\nif 'v8_revision' not in deps_content:\n    print('WARNING: v8_revision not found in DEPS; DEPS format may have changed')","typeGuard":"null","tryCatchPattern":"try:\n    v8_revision_line = next(line for line in deps_content.split('\\n') if 'v8_revision' in line)\nexcept StopIteration:\n    print('v8_revision not found in DEPS — Chromium may have changed its format')","preventionTips":["Inspect the DEPS file at the target Chrome version before running update_cdp.py.","If Chromium renames the variable, update the search string in add_pdls() promptly.","Keep the DEPS parsing logic flexible to accommodate format changes."],"tags":["selenium","build-script","update-cdp","chromium","v8","deps","ci"],"backgroundTag":null,"analyzedSha":"aa36b38e696a0909e973bdf5e2f9031ffe842c4b","analyzedAt":"2026-08-14T02:32:32.244Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}