# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This file contains version pins of a few infrastructure tools.
# If a tool is broken, revert a recent CL touching this file.
# Note that Chromium has its own depot_tools pin, so if in a rush, revert the
# depot_tools roll as well: https://chromium-review.googlesource.com/q/project:chromium/src+file:DEPS+depot_tools
# or just wait for the autoroller to auto-roll your revert to Chromium.

# Pin resolved versions in the repo, to reduce trust in the CIPD backend.
#
# Most of these tools are generated via builders at
# https://ci.chromium.org/p/infra/g/infra/console
#
# For these, the git revision is the one of
# https://chromium.googlesource.com/infra/infra.git.
#
# For goma client, generated via builders at
# https://ci.chromium.org/p/infra-internal/g/goma-client/console
# the git revision is the one of
# https://chromium.googlesource.com/infra/goma/client.git
#
# To regenerate them (after modifying this file):
#   cipd ensure-file-resolve -ensure-file cipd_manifest.txt
$ResolvedVersions cipd_manifest.versions

# Fully supported platforms.
$VerifiedPlatform linux-amd64 mac-amd64 mac-arm64 windows-amd64

# Platform with best-effort support: we have some binaries cross-compiled for
# them, but we do not test they work. They also may not have all necessary
# vpython packages.
$VerifiedPlatform linux-386 linux-ppc64 linux-ppc64le linux-s390x
$VerifiedPlatform linux-arm64 linux-armv6l
$VerifiedPlatform linux-mips64 linux-mips64le linux-mipsle

# vpython.
infra/tools/luci/vpython/${platform} git_revision:a058ec28ee4f76d255fdc3e1676a8eb2e39479b6

# LUCI editor
infra/tools/luci/led/${platform} git_revision:2b6c41a617ae191ad5341683570f0a199b798ec5

# LUCI config generator
infra/tools/luci/lucicfg/${platform} git_revision:9cd82fa49d8bac4bebea286936aecdc2d9347581

# Mac toolchain installer
infra/tools/mac_toolchain/${os=mac}-${arch} git_revision:723fc1a6c8cdf2631a57851f5610e598db0c1de1

# LUCI rpc command line tool
infra/tools/prpc/${platform} git_revision:5a038afb97f6b77e0fcefe1185317da216fced1f

# LUCI authentication command line tool
infra/tools/luci-auth/${platform} git_revision:297491c0babda68d84d8240c9d4504be671bc804

# LUCI Buildbucket CLI
infra/tools/bb/${platform} git_revision:0e7a6d8b67bee60fc983e6a4bd14a828654a1ce3

# LUCI ResultDB CLI
infra/tools/rdb/${platform} git_revision:2be056d01d3f8bab07915a1c2eca04f1937ad833

# CHROMEOS Buildjobs CLI
chromiumos/infra/crosjobs/${platform=linux-amd64} git_revision:ed616d595eb7241d39d34907050d2949121d6ae8

# goma client
infra/goma/client/${os=linux,windows}-${arch=amd64} git_revision:5a9919a38b56bd73e5f5f8e45a78fe87ef841368
infra/goma/client/${os=mac}-${arch} git_revision:5a9919a38b56bd73e5f5f8e45a78fe87ef841368

# dirmd, a tool to work with DIR_METADATA files
infra/tools/dirmd/${platform} git_revision:01089e44c7beb1c1f47c79b17b87972ab01be311

# Pinpoint CLI
infra/chromeperf/pinpoint/${platform} git_revision:a424d157d4b2c0d0115d10a374148d5ea4149117
