1*6777b538SAndroid Build Coastguard Worker# Copyright 2020 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker# Build targets for constructing CIPD packages. 6*6777b538SAndroid Build Coastguard Worker# 7*6777b538SAndroid Build Coastguard Worker# Prepares a CIPD archive and generates a manifest file. 8*6777b538SAndroid Build Coastguard Worker# 9*6777b538SAndroid Build Coastguard Worker# TODO(crbug.com/1042819): Add support for including directories. 10*6777b538SAndroid Build Coastguard Worker# 11*6777b538SAndroid Build Coastguard Worker# Parameters: 12*6777b538SAndroid Build Coastguard Worker# package_definition_yaml: CIPD package definition filename. "cipd.yaml" 13*6777b538SAndroid Build Coastguard Worker# if unspecified. 14*6777b538SAndroid Build Coastguard Worker# package: The path where the package will be located inside the CIPD 15*6777b538SAndroid Build Coastguard Worker# repository. 16*6777b538SAndroid Build Coastguard Worker# description: Sets the "description" field in CIPD package definition. 17*6777b538SAndroid Build Coastguard Worker# install_mode: String, should be either "symlink" or "copy". Defaults to 18*6777b538SAndroid Build Coastguard Worker# "symlink". 19*6777b538SAndroid Build Coastguard Worker# deps: A list of targets to build prior to copying files. 20*6777b538SAndroid Build Coastguard Worker# sources: A list of files to copy into the staging root. 21*6777b538SAndroid Build Coastguard Worker# source_directories: A list of directories to include in the package. Should 22*6777b538SAndroid Build Coastguard Worker# only be used when listing out all the files (in a given 23*6777b538SAndroid Build Coastguard Worker# directory) in |sources| is unfeasible. 24*6777b538SAndroid Build Coastguard Worker# 25*6777b538SAndroid Build Coastguard Worker# Example: 26*6777b538SAndroid Build Coastguard Worker# cipd_package_definition("chromedriver") { 27*6777b538SAndroid Build Coastguard Worker# package = "path/to/cipd/package" 28*6777b538SAndroid Build Coastguard Worker# description = "Prebuilt test binary." 29*6777b538SAndroid Build Coastguard Worker# install_mode = "copy" 30*6777b538SAndroid Build Coastguard Worker# deps = [ "//path/to:test_binary_target" ] 31*6777b538SAndroid Build Coastguard Worker# sources = [ "//path/to:test_binary_file" ] 32*6777b538SAndroid Build Coastguard Worker# } 33*6777b538SAndroid Build Coastguard Worker# 34*6777b538SAndroid Build Coastguard Workertemplate("cipd_package_definition") { 35*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 36*6777b538SAndroid Build Coastguard Worker [ 37*6777b538SAndroid Build Coastguard Worker "deps", 38*6777b538SAndroid Build Coastguard Worker "data", 39*6777b538SAndroid Build Coastguard Worker "source_directories", 40*6777b538SAndroid Build Coastguard Worker "data_deps", 41*6777b538SAndroid Build Coastguard Worker "sources", 42*6777b538SAndroid Build Coastguard Worker "testonly", 43*6777b538SAndroid Build Coastguard Worker ]) 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker assert(defined(sources) || defined(source_directories), 46*6777b538SAndroid Build Coastguard Worker "At least one sources input must be specified.") 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker _install_mode = "symlink" 49*6777b538SAndroid Build Coastguard Worker if (defined(invoker.install_mode)) { 50*6777b538SAndroid Build Coastguard Worker _install_mode = invoker.install_mode 51*6777b538SAndroid Build Coastguard Worker } 52*6777b538SAndroid Build Coastguard Worker assert(_install_mode == "copy" || _install_mode == "symlink", 53*6777b538SAndroid Build Coastguard Worker "\"install_mode\" arg should be either \"copy\" or \"symlink\".") 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker _cipd_definition_yaml = "cipd.yaml" 56*6777b538SAndroid Build Coastguard Worker if (defined(invoker.package_definition_yaml)) { 57*6777b538SAndroid Build Coastguard Worker _cipd_definition_yaml = invoker.package_definition_yaml 58*6777b538SAndroid Build Coastguard Worker } 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker _package_staging_dir = "${target_gen_dir}/${target_name}" 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Worker _yaml_contents = [ 63*6777b538SAndroid Build Coastguard Worker "package: ${invoker.package}", 64*6777b538SAndroid Build Coastguard Worker "description: ${invoker.description}", 65*6777b538SAndroid Build Coastguard Worker "root: " + rebase_path(_package_staging_dir), 66*6777b538SAndroid Build Coastguard Worker "install_mode: ${_install_mode}", 67*6777b538SAndroid Build Coastguard Worker "data:", 68*6777b538SAndroid Build Coastguard Worker ] 69*6777b538SAndroid Build Coastguard Worker 70*6777b538SAndroid Build Coastguard Worker if (defined(sources)) { 71*6777b538SAndroid Build Coastguard Worker foreach(source, sources) { 72*6777b538SAndroid Build Coastguard Worker _yaml_contents += [ " - file: " + get_path_info(source, "file") ] 73*6777b538SAndroid Build Coastguard Worker } 74*6777b538SAndroid Build Coastguard Worker copy(target_name) { 75*6777b538SAndroid Build Coastguard Worker outputs = [ "${_package_staging_dir}/{{source_file_part}}" ] 76*6777b538SAndroid Build Coastguard Worker } 77*6777b538SAndroid Build Coastguard Worker } 78*6777b538SAndroid Build Coastguard Worker 79*6777b538SAndroid Build Coastguard Worker if (defined(source_directories)) { 80*6777b538SAndroid Build Coastguard Worker foreach(directory, source_directories) { 81*6777b538SAndroid Build Coastguard Worker _yaml_contents += [ " - dir: " + directory ] 82*6777b538SAndroid Build Coastguard Worker } 83*6777b538SAndroid Build Coastguard Worker } 84*6777b538SAndroid Build Coastguard Worker 85*6777b538SAndroid Build Coastguard Worker write_file("${_package_staging_dir}/${_cipd_definition_yaml}", _yaml_contents) 86*6777b538SAndroid Build Coastguard Worker} 87*6777b538SAndroid Build Coastguard Worker 88*6777b538SAndroid Build Coastguard Worker# Create a cipd file based on inputs and FILES.cfg config. Most of the arguments 89*6777b538SAndroid Build Coastguard Worker# are similar with |cipd_package_definition| above. 90*6777b538SAndroid Build Coastguard Worker# 91*6777b538SAndroid Build Coastguard Worker# Additional parameters: 92*6777b538SAndroid Build Coastguard Worker# 93*6777b538SAndroid Build Coastguard Worker# package_definition_yaml: The output yaml file. Default is 94*6777b538SAndroid Build Coastguard Worker# ${target_name}_cipd.yaml. 95*6777b538SAndroid Build Coastguard Worker# files_file: The file defines what files and directories to include. 96*6777b538SAndroid Build Coastguard Worker# Example: //tools/build/chromeos/FILES.cfg. 97*6777b538SAndroid Build Coastguard Worker# buildtype: str, required. It can be "dev" or "official". 98*6777b538SAndroid Build Coastguard Worker# Only when the file has the same buildtype, it will be included. 99*6777b538SAndroid Build Coastguard Worker# arch: str, required. It can be "32bit", "64bit", "arm". 100*6777b538SAndroid Build Coastguard Worker# 101*6777b538SAndroid Build Coastguard Worker# Example: 102*6777b538SAndroid Build Coastguard Worker# cipd_package_definition_by_file("chrome_cipd") { 103*6777b538SAndroid Build Coastguard Worker# package = "path/to/cipd/package" 104*6777b538SAndroid Build Coastguard Worker# description = "Prebuilt test binary." 105*6777b538SAndroid Build Coastguard Worker# install_mode = "copy" 106*6777b538SAndroid Build Coastguard Worker# files_file = "//chrome/tools/build/chromeos/FILES.json" 107*6777b538SAndroid Build Coastguard Worker# buildtype = "dev" 108*6777b538SAndroid Build Coastguard Worker# arch = "64bit" 109*6777b538SAndroid Build Coastguard Worker# deps = [ "//path/to:test_binary_target" ] 110*6777b538SAndroid Build Coastguard Worker# } 111*6777b538SAndroid Build Coastguard Workertemplate("cipd_package_definition_by_file") { 112*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 113*6777b538SAndroid Build Coastguard Worker [ 114*6777b538SAndroid Build Coastguard Worker "deps", 115*6777b538SAndroid Build Coastguard Worker "data", 116*6777b538SAndroid Build Coastguard Worker "data_deps", 117*6777b538SAndroid Build Coastguard Worker "sources", 118*6777b538SAndroid Build Coastguard Worker "testonly", 119*6777b538SAndroid Build Coastguard Worker ]) 120*6777b538SAndroid Build Coastguard Worker _output_yaml_filename = "${target_name}_cipd.yaml" 121*6777b538SAndroid Build Coastguard Worker if (defined(invoker.package_definition_yaml)) { 122*6777b538SAndroid Build Coastguard Worker _output_yaml_filename = invoker.package_definition_yaml 123*6777b538SAndroid Build Coastguard Worker } 124*6777b538SAndroid Build Coastguard Worker action(target_name) { 125*6777b538SAndroid Build Coastguard Worker script = "//build/cipd/cipd_from_file.py" 126*6777b538SAndroid Build Coastguard Worker inputs = [ invoker.files_file ] 127*6777b538SAndroid Build Coastguard Worker args = [ 128*6777b538SAndroid Build Coastguard Worker "--description=" + invoker.description, 129*6777b538SAndroid Build Coastguard Worker "--buildtype=" + invoker.buildtype, 130*6777b538SAndroid Build Coastguard Worker "--arch=" + invoker.arch, 131*6777b538SAndroid Build Coastguard Worker "--files_file=" + rebase_path(invoker.files_file, root_build_dir), 132*6777b538SAndroid Build Coastguard Worker "--package=" + invoker.package, 133*6777b538SAndroid Build Coastguard Worker "--install_mode=" + invoker.install_mode, 134*6777b538SAndroid Build Coastguard Worker "--output_yaml_file=" + 135*6777b538SAndroid Build Coastguard Worker rebase_path("${root_out_dir}/" + _output_yaml_filename, 136*6777b538SAndroid Build Coastguard Worker root_build_dir), 137*6777b538SAndroid Build Coastguard Worker ] 138*6777b538SAndroid Build Coastguard Worker outputs = [ "${root_out_dir}/" + _output_yaml_filename ] 139*6777b538SAndroid Build Coastguard Worker } 140*6777b538SAndroid Build Coastguard Worker} 141