140 lines
4.9 KiB
Text
140 lines
4.9 KiB
Text
# Copyright 2020 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.
|
|
|
|
# Build targets for constructing CIPD packages.
|
|
#
|
|
# Prepares a CIPD archive and generates a manifest file.
|
|
#
|
|
# TODO(crbug.com/1042819): Add support for including directories.
|
|
#
|
|
# Parameters:
|
|
# package_definition_yaml: CIPD package definition filename. "cipd.yaml"
|
|
# if unspecified.
|
|
# package: The path where the package will be located inside the CIPD
|
|
# repository.
|
|
# description: Sets the "description" field in CIPD package definition.
|
|
# install_mode: String, should be either "symlink" or "copy". Defaults to
|
|
# "symlink".
|
|
# deps: A list of targets to build prior to copying files.
|
|
# sources: A list of files to copy into the staging root.
|
|
# source_directories: A list of directories to include in the package. Should
|
|
# only be used when listing out all the files (in a given
|
|
# directory) in |sources| is unfeasible.
|
|
#
|
|
# Example:
|
|
# cipd_package_definition("chromedriver") {
|
|
# package = "path/to/cipd/package"
|
|
# description = "Prebuilt test binary."
|
|
# install_mode = "copy"
|
|
# deps = [ "//path/to:test_binary_target" ]
|
|
# sources = [ "//path/to:test_binary_file" ]
|
|
# }
|
|
#
|
|
template("cipd_package_definition") {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"deps",
|
|
"data",
|
|
"source_directories",
|
|
"data_deps",
|
|
"sources",
|
|
"testonly",
|
|
])
|
|
|
|
assert(defined(sources) || defined(source_directories),
|
|
"At least one sources input must be specified.")
|
|
|
|
_install_mode = "symlink"
|
|
if (defined(invoker.install_mode)) {
|
|
_install_mode = invoker.install_mode
|
|
}
|
|
assert(_install_mode == "copy" || _install_mode == "symlink",
|
|
"\"install_mode\" arg should be either \"copy\" or \"symlink\".")
|
|
|
|
_cipd_definition_yaml = "cipd.yaml"
|
|
if (defined(invoker.package_definition_yaml)) {
|
|
_cipd_definition_yaml = invoker.package_definition_yaml
|
|
}
|
|
|
|
_package_staging_dir = "${target_gen_dir}/${target_name}"
|
|
|
|
_yaml_contents = [
|
|
"package: ${invoker.package}",
|
|
"description: ${invoker.description}",
|
|
"root: " + rebase_path(_package_staging_dir),
|
|
"install_mode: ${_install_mode}",
|
|
"data:",
|
|
]
|
|
|
|
if (defined(sources)) {
|
|
foreach(source, sources) {
|
|
_yaml_contents += [ " - file: " + get_path_info(source, "file") ]
|
|
}
|
|
copy(target_name) {
|
|
outputs = [ "${_package_staging_dir}/{{source_file_part}}" ]
|
|
}
|
|
}
|
|
|
|
if (defined(source_directories)) {
|
|
foreach(directory, source_directories) {
|
|
_yaml_contents += [ " - dir: " + directory ]
|
|
}
|
|
}
|
|
|
|
write_file("${_package_staging_dir}/${_cipd_definition_yaml}", _yaml_contents)
|
|
}
|
|
|
|
# Create a cipd file based on inputs and FILES.cfg config. Most of the arguments
|
|
# are similar with |cipd_package_definition| above.
|
|
#
|
|
# Additional parameters:
|
|
#
|
|
# package_definition_yaml: The output yaml file. Default is
|
|
# ${target_name}_cipd.yaml.
|
|
# files_file: The file defines what files and directories to include.
|
|
# Example: //tools/build/chromeos/FILES.cfg.
|
|
# buildtype: str, required. It can be "dev" or "official".
|
|
# Only when the file has the same buildtype, it will be included.
|
|
# arch: str, required. It can be "32bit", "64bit", "arm".
|
|
#
|
|
# Example:
|
|
# cipd_package_definition_by_file("chrome_cipd") {
|
|
# package = "path/to/cipd/package"
|
|
# description = "Prebuilt test binary."
|
|
# install_mode = "copy"
|
|
# files_file = "//chrome/tools/build/chromeos/FILES.json"
|
|
# buildtype = "dev"
|
|
# arch = "64bit"
|
|
# deps = [ "//path/to:test_binary_target" ]
|
|
# }
|
|
template("cipd_package_definition_by_file") {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"deps",
|
|
"data",
|
|
"data_deps",
|
|
"sources",
|
|
"testonly",
|
|
])
|
|
_output_yaml_filename = "${target_name}_cipd.yaml"
|
|
if (defined(invoker.package_definition_yaml)) {
|
|
_output_yaml_filename = invoker.package_definition_yaml
|
|
}
|
|
action(target_name) {
|
|
script = "//chromium/build/cipd/cipd_from_file.py"
|
|
inputs = [ "//chromium/build/cipd/cipd_from_file.py" ]
|
|
args = [
|
|
"--description=" + invoker.description,
|
|
"--buildtype=" + invoker.buildtype,
|
|
"--arch=" + invoker.arch,
|
|
"--files_file=" + rebase_path(invoker.files_file, root_build_dir),
|
|
"--package=" + invoker.package,
|
|
"--install_mode=" + invoker.install_mode,
|
|
"--output_yaml_file=" +
|
|
rebase_path("${root_out_dir}/" + _output_yaml_filename,
|
|
root_build_dir),
|
|
]
|
|
outputs = [ "${root_out_dir}/" + _output_yaml_filename ]
|
|
}
|
|
}
|