| # 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 ] |
| } |
| } |