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