blob: f29d3b15425214a99392971bdf8d11167cc91833 [file] [log] [blame]
# Copyright 2018 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.
load("@fuchsia_sdk//build_defs:package_info.bzl", "PackageInfo")
def _verify_package_impl(context):
# Unpack the package archive.
archive = context.attr.package[PackageInfo].archive
archive_dir = context.actions.declare_directory(context.attr.name)
context.actions.run(
executable = context.executable._far,
arguments = [
"extract",
"--archive=" + archive.path,
"--output=" + archive_dir.path,
],
inputs = [
archive,
],
outputs = [
archive_dir,
],
mnemonic = "UnpackArchive",
)
# Unpack the meta.far archive.
meta_dir = context.actions.declare_directory(context.attr.name + "_meta")
context.actions.run(
executable = context.executable._far,
arguments = [
"extract",
"--archive=" + archive_dir.path + "/meta.far",
"--output=" + meta_dir.path,
],
inputs = [
archive_dir,
],
outputs = [
meta_dir,
],
mnemonic = "UnpackMeta",
)
# Read meta/contents and verify that it contains the expected files.
success_stamp = context.actions.declare_file(context.attr.name + "_success")
context.actions.run(
executable = context.executable._verifier,
arguments = [
"--meta",
meta_dir.path,
"--stamp",
success_stamp.path,
"--files",
] + context.attr.files,
inputs = [
meta_dir,
],
outputs = [
success_stamp,
],
)
return [
DefaultInfo(files = depset([success_stamp])),
]
verify_package = rule(
implementation = _verify_package_impl,
attrs = {
"package": attr.label(
doc = "The label of the package to verify",
mandatory = True,
allow_files = False,
providers = [PackageInfo],
),
"files": attr.string_list(
doc = "The files expected to exist in the package",
mandatory = False,
allow_empty = True,
),
"_far": attr.label(
default = Label("@fuchsia_sdk//tools:far"),
allow_single_file = True,
executable = True,
cfg = "host",
),
"_verifier": attr.label(
default = Label("//build_defs:package_verifier"),
allow_files = True,
executable = True,
cfg = "host",
),
},
)