blob: 90c8992bc033e5b61fd25d83324f1c14c073523d [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.
use anyhow::{Context, Result};
use fuchsia_pkg::PackageManifest;
use std::path::PathBuf;
/// validate that any components in the package which declare structured config are able to have
/// their configuration resolved from their package
#[derive(argh::FromArgs, Debug, PartialEq)]
#[argh(subcommand, name = "validate-package")]
pub struct ValidatePackage {
/// path to the package manifest to validate
#[argh(positional)]
package: PathBuf,
/// path to the stamp file to write when done validating
#[argh(option)]
stamp: PathBuf,
}
impl ValidatePackage {
pub fn validate(self) -> Result<()> {
let package = PackageManifest::try_load_from(&self.package)
.with_context(|| format!("reading {}", self.package.display()))?;
if let Err(e) = assembly_validate_product::validate_package(&package) {
anyhow::bail!("Failed to validate package `{}`:{}", package.name(), e);
}
std::fs::write(&self.stamp, &[])
.with_context(|| format!("writing stamp file to {}", self.stamp.display()))?;
Ok(())
}
}