blob: ed5f9a3658ddc662ec9d303673ff8ab1660c72f5 [file] [log] [blame]
# Copyright 2022 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//src/sys/pkg/bin/package-tool/package-tool.gni")
_devhost_keys_dir = "//src/sys/pkg/repositories/devhost/keys"
_devhost_metadata_dir = "//src/sys/pkg/repositories/devhost/metadata"
# The initial trusted root metadata, which is used to establish the TUF chain
# of trust.
_devhost_initial_trusted_root_metadata = "9.root.json"
# Copy the devhost keys into a directory.
#
# Parameters
#
# output_keys_dir (required)
# Copy the devhost keys into this directory.
template("devhost_keys") {
assert(defined(invoker.output_keys_dir) && invoker.output_keys_dir != "",
"output_keys_dir must be defined")
_output_keys_dir = invoker.output_keys_dir
# These files are copied from amber_devhost_keys_dir into $amber_keys_dir/keys.
copy(target_name) {
sources = [
"${_devhost_keys_dir}/snapshot.json",
"${_devhost_keys_dir}/targets.json",
"${_devhost_keys_dir}/timestamp.json",
]
outputs = [ "${_output_keys_dir}/{{source_file_part}}" ]
forward_variables_from(invoker,
[
"testonly",
"visibility",
])
}
}
# Copy the devhost root metadata into a directory.
#
# Parameters
#
# output_metadata_dir (required)
# Copy the devhost root metadata into this directory.
template("devhost_root_metadata") {
assert(
defined(invoker.output_metadata_dir) && invoker.output_metadata_dir != "",
"output_metadata_dir must be defined")
_output_metadata_dir = invoker.output_metadata_dir
# TODO(https://fxbug.dev/42113993) In order to be TUF-1.0 conformant, we need to have
# versioned-prefixed root metadata files. Fow now this just hard-codes
# copying the current metadata to the correct place, but long term this
# should be computed so we don't forget to copy the file when we rotate the
# root metadata.
copy("${target_name}__unversioned_root_metadata") {
sources =
[ "${_devhost_metadata_dir}/${_devhost_initial_trusted_root_metadata}" ]
outputs = [ "${_output_metadata_dir}/root.json" ]
forward_variables_from(invoker,
[
"testonly",
"visibility",
])
}
# TODO(https://fxbug.dev/42113993) See the comment on `unversioned_root_metadata`.
copy(target_name) {
sources = [
"${_devhost_metadata_dir}/1.root.json",
"${_devhost_metadata_dir}/2.root.json",
"${_devhost_metadata_dir}/3.root.json",
"${_devhost_metadata_dir}/4.root.json",
"${_devhost_metadata_dir}/5.root.json",
"${_devhost_metadata_dir}/6.root.json",
"${_devhost_metadata_dir}/7.root.json",
"${_devhost_metadata_dir}/8.root.json",
"${_devhost_metadata_dir}/9.root.json",
]
outputs = [ "${_output_metadata_dir}/{{source_file_part}}" ]
deps = [ ":${target_name}__unversioned_root_metadata" ]
forward_variables_from(invoker,
[
"testonly",
"visibility",
])
}
}
# Publish package manifests to a devhost-based repository.
#
# This will create a devhost that's initialized with the devhost keys and root metadata, then
# publish all package manifests to it.
#
# Parameters
#
# output_repository_dir (required)
# A publish packages to this directory path.
#
# package_list_manifests (required)
# A list of package list manifest paths.
#
# output_blob_manifest_path (optional)
# If set, write the blob manifest of all staged blobs to the given path.
template("devhost_repository_publish") {
assert(defined(invoker.output_repository_dir) &&
invoker.output_repository_dir != "",
"output_repository_dir must be defined")
devhost_keys("${target_name}_prepare_repository_keys") {
testonly = true
output_keys_dir = "${invoker.output_repository_dir}/keys"
}
devhost_root_metadata("${target_name}_prepare_repository_root_metadata") {
testonly = true
output_metadata_dir = "${invoker.output_repository_dir}/repository"
}
package_tool_repository_publish(target_name) {
forward_variables_from(invoker,
[
"data_deps",
"deps",
"inputs",
"metadata",
"output_repository_dir",
"package_list_manifests",
"output_blob_manifest_path",
"testonly",
"visibility",
])
repo_deps = [
":${target_name}_prepare_repository_keys",
":${target_name}_prepare_repository_root_metadata",
"//src/sys/pkg/bin/package-tool:host",
]
if (!defined(inputs)) {
inputs = []
}
inputs += get_target_outputs(":${target_name}_prepare_repository_keys")
inputs +=
get_target_outputs(":${target_name}_prepare_repository_root_metadata")
initial_trusted_root_metadata = "${invoker.output_repository_dir}/repository/${_devhost_initial_trusted_root_metadata}"
}
}