# 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 = "//build/cipd/cipd_from_file.py" inputs = [ "//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 ] } }