From 72725ae0ad065a210af81162e8ba73184839d428 Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Tue, 20 Oct 2026 10:26:14 -0700 Subject: [PATCH] Handle `DEPS.tagged-release` in `sync_deps.py` When a release candidate commit in `emscripten-releases` modifies `DEPS.tagged-release`, the waterfall builds that revision using `DEPS.tagged-release` (which may be branched from an older revision) rather than `DEPS`. Teach `tools/maint/sync_deps.py` to fetch `DEPS.tagged-release` when the target `emscripten-releases` revision modifies that file, matching what the corresponding prebuilt `emsdk` archive was built from. This is needed because we actually did sync to tagged release in #28031. --- tools/maint/sync_deps.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/tools/maint/sync_deps.py b/tools/maint/sync_deps.py index 9cf82f3a6dbb7..29b1ed3b3767b 100755 --- a/tools/maint/sync_deps.py +++ b/tools/maint/sync_deps.py @@ -15,6 +15,7 @@ import argparse import base64 +import json import os import re import subprocess @@ -42,13 +43,34 @@ def get_emsdk_version(emsdk_version_file=None): return utils.read_file(emsdk_version_file).strip() +def is_tagged_release(emsdk_hash): + url = ( + 'https://chromium.googlesource.com/emscripten-releases/+/' + f'{emsdk_hash}?format=JSON' + ) + if VERBOSE: + print(f'Fetching commit info from {url}...') + with urllib.request.urlopen(url) as response: + data = response.read().decode('utf-8') + if data.startswith(")]}'"): + data = data[4:] + info = json.loads(data) + return any( + d.get('new_path') == 'DEPS.tagged-release' + for d in info.get('tree_diff', []) + ) + + def fetch_deps(emsdk_hash): + deps_file = 'DEPS' + if is_tagged_release(emsdk_hash): + deps_file = 'DEPS.tagged-release' url = ( 'https://chromium.googlesource.com/emscripten-releases/+/' - f'{emsdk_hash}/DEPS?format=TEXT' + f'{emsdk_hash}/{deps_file}?format=TEXT' ) if VERBOSE: - print(f'Fetching DEPS file from {url}...') + print(f'Fetching {deps_file} file from {url}...') with urllib.request.urlopen(url) as response: return base64.b64decode(response.read()).decode('utf-8')