Migrate rust hook to deps and create sync_deps.py
After someone runs upload_revision.py, triggers the packager bots, and manually copies the packages to prod, they will now run sync_deps.py to update the DEPS file. After doing that they can trigger a CQ run to test the new packages. Bug: b/338612245 Change-Id: Ie95efbf2049e651192d52ca7531c20125b3dd537 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5536220 Reviewed-by: Hans Wennborg <hans@chromium.org> Commit-Queue: Josip Sokcevic <sokcevic@chromium.org> Cr-Commit-Position: refs/heads/main@{#1304616}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
09746a42ea
commit
2af7751ec4
42
DEPS
42
DEPS
@ -540,6 +540,7 @@ allowed_hosts = [
|
||||
|
||||
# TODO(337061377): Move into a separate allowed gcs bucket list.
|
||||
'chromium-ads-detection',
|
||||
'chromium-browser-clang',
|
||||
'chromium-clang-format',
|
||||
'chromium-nodejs',
|
||||
'chromium-tfhub-models',
|
||||
@ -713,6 +714,41 @@ deps = {
|
||||
},
|
||||
],
|
||||
},
|
||||
# Update prebuilt Rust toolchain.
|
||||
'src/third_party/rust-toolchain': {
|
||||
'dep_type': 'gcs',
|
||||
'bucket': 'chromium-browser-clang',
|
||||
'objects': [
|
||||
{
|
||||
'object_name': 'Linux_x64/rust-toolchain-32dd3795bce8b347fda786529cf5e42a813e0b7d-2-llvmorg-19-init-10646-g084e2b53.tar.xz',
|
||||
'sha256sum': 'e7e236fe6e61b7a41ba6b1e4bc64e91119359cdddce268597c6328b9fea8d76d',
|
||||
'size_bytes': 151082700,
|
||||
'generation': 1715715529295267,
|
||||
'condition': 'host_os == "linux" and non_git_source',
|
||||
},
|
||||
{
|
||||
'object_name': 'Mac/rust-toolchain-32dd3795bce8b347fda786529cf5e42a813e0b7d-2-llvmorg-19-init-10646-g084e2b53.tar.xz',
|
||||
'sha256sum': '3860d592e7f6a853aa06a00642f4110132c7af7f2b91d7bdd399d00dbd5177f6',
|
||||
'size_bytes': 143827372,
|
||||
'generation': 1715715530889094,
|
||||
'condition': 'host_os == "mac" and host_cpu == "x64"',
|
||||
},
|
||||
{
|
||||
'object_name': 'Mac_arm64/rust-toolchain-32dd3795bce8b347fda786529cf5e42a813e0b7d-2-llvmorg-19-init-10646-g084e2b53.tar.xz',
|
||||
'sha256sum': '333dfb93cb0d944acb1ed9f0c44aba9dfdb4e7cd2c660758014338bea37ce8da',
|
||||
'size_bytes': 135183068,
|
||||
'generation': 1715715532458630,
|
||||
'condition': 'host_os == "mac" and host_cpu == "arm64"',
|
||||
},
|
||||
{
|
||||
'object_name': 'Win/rust-toolchain-32dd3795bce8b347fda786529cf5e42a813e0b7d-2-llvmorg-19-init-10646-g084e2b53.tar.xz',
|
||||
'sha256sum': 'f610825518d0f3b6f1e9d2772065165b5bcac3302448a53ac89b3684bae7dbd2',
|
||||
'size_bytes': 206423884,
|
||||
'generation': 1715715534082072,
|
||||
'condition': 'host_os == "win"',
|
||||
},
|
||||
],
|
||||
},
|
||||
'src/third_party/clang-format/script':
|
||||
Var('chromium_git') +
|
||||
'/external/github.com/llvm/llvm-project/clang/tools/clang-format.git@' +
|
||||
@ -4904,12 +4940,6 @@ hooks = [
|
||||
'condition': 'not llvm_force_head_revision',
|
||||
'action': ['vpython3', 'src/tools/clang/scripts/update.py'],
|
||||
},
|
||||
{
|
||||
# Update prebuilt Rust toolchain.
|
||||
'name': 'rust-toolchain',
|
||||
'pattern': '.',
|
||||
'action': ['vpython3', 'src/tools/rust/update_rust.py'],
|
||||
},
|
||||
{
|
||||
# Build the clang toolchain from tip-of-tree.
|
||||
# Note: On Win, this should run after win_toolchain, as it may use it.
|
||||
|
@ -26,6 +26,7 @@ An archive of all packages built so far is at https://is.gd/chromeclang
|
||||
successfully finished, run
|
||||
[go/chrome-promote-clang](https://goto.google.com/chrome-promote-clang)
|
||||
on the new Clang package name.
|
||||
1. Run `tools/clang/scripts/sync_deps.py` to update the deps entries in DEPS.
|
||||
1. Run an exhaustive set of try jobs to test the new compiler. The CL
|
||||
description created previously by upload_revision.py includes
|
||||
`Cq-Include-Trybots:` lines for all needed bots, so it's sufficient to just
|
||||
@ -83,4 +84,4 @@ tools/clang/scripts/update.py --package your-package-name
|
||||
```
|
||||
|
||||
[an example of adding a new package](https://chromium-review.googlesource.com/c/chromium/src/+/5463029)
|
||||
[example bug]: https://crbug.com/335730441
|
||||
[example bug]: https://crbug.com/335730441
|
||||
|
78
tools/clang/scripts/sync_deps.py
Executable file
78
tools/clang/scripts/sync_deps.py
Executable file
@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright 2024 The Chromium Authors
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
"""This script syncs the Clang and Rust revisions defined in update.py
|
||||
and update_rust.py with the deps entries in DEPS."""
|
||||
|
||||
import argparse
|
||||
import hashlib
|
||||
import re
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
from update import DownloadUrl, CDS_URL, CLANG_REVISION
|
||||
|
||||
sys.path.append(
|
||||
os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..',
|
||||
'rust'))
|
||||
from update_rust import RUST_REVISION, RUST_SUB_REVISION
|
||||
|
||||
|
||||
def GetDepsObjectInfo(object_name: str) -> str:
|
||||
url = f'{CDS_URL}/{object_name}'
|
||||
describe_url = f'gs://chromium-browser-clang/{object_name}'
|
||||
output = subprocess.check_output(['gsutil.py', 'stat',
|
||||
describe_url]).decode("utf-8")
|
||||
# Output looks like:
|
||||
# ``
|
||||
# gs://bucket/path:
|
||||
# Creation time: Wed, 15 May 2024 13:36:30 GMT
|
||||
# Update time: Wed, 15 May 2024 13:36:30 GMT
|
||||
# Storage class: STANDARD
|
||||
# Cache-Control: public, max-age=31536000,no-transform
|
||||
# Content-Encoding: gzip
|
||||
# Content-Length: 5766650
|
||||
# Content-Type: application/octet-stream
|
||||
# Hash (crc32c): E8z0Sg==
|
||||
# Hash (md5): E/XAhJhhpd5+08cdO17CFA==
|
||||
# ETag: COvj8aXjj4YDEAE=
|
||||
# Generation: 1715780189975019
|
||||
# Metageneration: 1
|
||||
generation = re.search('Generation:\s+([0-9]+)', output).group(1)
|
||||
size_bytes = re.search('Content-Length:\s+([0-9]+)', output).group(1)
|
||||
with tempfile.NamedTemporaryFile() as f:
|
||||
DownloadUrl(url, f)
|
||||
f.seek(0)
|
||||
sha256sum = hashlib.file_digest(f, 'sha256').hexdigest()
|
||||
|
||||
return f'{object_name},{sha256sum},{size_bytes},{generation}'
|
||||
|
||||
|
||||
def GetRustObjectNames() -> list:
|
||||
object_names = []
|
||||
for host_os in ['Linux_x64', 'Mac', 'Mac_arm64', 'Win']:
|
||||
rust_version = (f'{RUST_REVISION}-{RUST_SUB_REVISION}')
|
||||
clang_revision = CLANG_REVISION
|
||||
object_name = f'{host_os}/rust-toolchain-{rust_version}-{clang_revision}'
|
||||
object_names.append(f'{object_name}.tar.xz')
|
||||
return object_names
|
||||
|
||||
|
||||
def main():
|
||||
rust_object_infos = [
|
||||
GetDepsObjectInfo(o) for o in sorted(GetRustObjectNames())
|
||||
]
|
||||
|
||||
rust_object_infos_string = '?'.join(rust_object_infos)
|
||||
rust_deps_entry_path = 'src/third_party/rust-toolchain'
|
||||
rust_setdep_string = f'{rust_deps_entry_path}@{rust_object_infos_string}'
|
||||
|
||||
rust_setdep_args = ['gclient', 'setdep', f'--revision={rust_setdep_string}']
|
||||
subprocess.run(rust_setdep_args)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
Reference in New Issue
Block a user