blob: 069af8422c83efecb0fbea8f4df63d816578a2b5 [file] [log] [blame]
# Copyright 2025 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("//build/components.gni")
import("//src/starnix/tools/gen_docker_container/gen_docker_container.gni")
import("//src/starnix/tools/tar_to_pkg/tar_to_pkg.gni")
# Create a fuchsia package from a Docker archive.
#
# The component URL of the Starnix container created from the Docker archive is:
#
# fuchsia-pkg://fuchsia.com/${package_name}#meta/${package_name}_container.cm
#
# The default command component URL is:
#
# fuchsia-pkg://fuchsia.com/${package_name}#meta/${package_name}_default_command.cm
#
# Parameters:
#
# input_path (required)
# The path to the docker archive.
#
# package_name (required)
# The name of the package to create.
#
# features (optional)
# The features to add to the container.
#
# deps
# testonly
template("starnix_docker_container") {
assert(defined(invoker.input_path),
"input_path must be defined for starnix_docker_container")
assert(defined(invoker.package_name),
"package_name must be defined for starnix_docker_container")
_target_name = target_name
container_manifest_path = "$target_gen_dir/${target_name}_container.cml"
default_command_manifest_path =
"$target_gen_dir/${target_name}_default_command.cml"
tar_to_pkg("${_target_name}_system_image") {
input = invoker.input_path
prefix = "data/system"
format = "docker-archive"
}
group("${_target_name}_container_resources") {
deps = [
":${_target_name}_system_image",
"//src/starnix/containers:default_init",
]
}
gen_docker_container("${_target_name}_container_manifests") {
input_path = invoker.input_path
container_name = invoker.package_name
container_manifest = container_manifest_path
default_command_manifest = default_command_manifest_path
forward_variables_from(invoker, [ "features" ])
}
fuchsia_component("${_target_name}_container") {
manifest = container_manifest_path
component_name = "${invoker.package_name}_container"
deps = [ ":${_target_name}_container_manifests" ]
}
fuchsia_component("${_target_name}_default_command") {
manifest = default_command_manifest_path
component_name = "${invoker.package_name}_default_command"
deps = [ ":${_target_name}_container_manifests" ]
}
fuchsia_package(_target_name) {
package_name = invoker.package_name
forward_variables_from(invoker, [ "testonly" ])
deps = [
":${_target_name}_container",
":${_target_name}_container_resources",
":${_target_name}_default_command",
]
if (defined(invoker.deps)) {
deps += invoker.deps
}
}
}