tests.nixpkgs-check-by-name: Minor improvements from review
This commit is contained in:
parent
53b43ce0e3
commit
413dd9c03e
4 changed files with 24 additions and 19 deletions
|
@ -41,7 +41,7 @@ enum AttributeVariant {
|
||||||
pub fn check_values(
|
pub fn check_values(
|
||||||
nixpkgs_path: &Path,
|
nixpkgs_path: &Path,
|
||||||
package_names: Vec<String>,
|
package_names: Vec<String>,
|
||||||
eval_accessible_paths: &Vec<&Path>,
|
eval_accessible_paths: &[&Path],
|
||||||
) -> validation::Result<version::Nixpkgs> {
|
) -> validation::Result<version::Nixpkgs> {
|
||||||
// Write the list of packages we need to check into a temporary JSON file.
|
// Write the list of packages we need to check into a temporary JSON file.
|
||||||
// This can then get read by the Nix evaluation.
|
// This can then get read by the Nix evaluation.
|
||||||
|
@ -110,11 +110,11 @@ pub fn check_values(
|
||||||
))?;
|
))?;
|
||||||
|
|
||||||
Ok(
|
Ok(
|
||||||
validation::sequence(package_names.iter().map(|package_name| {
|
validation::sequence(package_names.into_iter().map(|package_name| {
|
||||||
let relative_package_file = structure::relative_file_for_package(package_name);
|
let relative_package_file = structure::relative_file_for_package(&package_name);
|
||||||
let absolute_package_file = nixpkgs_path.join(&relative_package_file);
|
let absolute_package_file = nixpkgs_path.join(&relative_package_file);
|
||||||
|
|
||||||
if let Some(attribute_info) = actual_files.get(package_name) {
|
if let Some(attribute_info) = actual_files.get(&package_name) {
|
||||||
let check_result = if !attribute_info.is_derivation {
|
let check_result = if !attribute_info.is_derivation {
|
||||||
NixpkgsProblem::NonDerivation {
|
NixpkgsProblem::NonDerivation {
|
||||||
relative_package_file: relative_package_file.clone(),
|
relative_package_file: relative_package_file.clone(),
|
||||||
|
|
|
@ -31,12 +31,7 @@ pub struct Args {
|
||||||
|
|
||||||
fn main() -> ExitCode {
|
fn main() -> ExitCode {
|
||||||
let args = Args::parse();
|
let args = Args::parse();
|
||||||
match process(
|
match process(args.base.as_deref(), &args.nixpkgs, &[], &mut io::stderr()) {
|
||||||
args.base.as_deref(),
|
|
||||||
&args.nixpkgs,
|
|
||||||
&vec![],
|
|
||||||
&mut io::stderr(),
|
|
||||||
) {
|
|
||||||
Ok(true) => {
|
Ok(true) => {
|
||||||
eprintln!("{}", "Validated successfully".green());
|
eprintln!("{}", "Validated successfully".green());
|
||||||
ExitCode::SUCCESS
|
ExitCode::SUCCESS
|
||||||
|
@ -69,10 +64,10 @@ fn main() -> ExitCode {
|
||||||
pub fn process<W: io::Write>(
|
pub fn process<W: io::Write>(
|
||||||
base_nixpkgs: Option<&Path>,
|
base_nixpkgs: Option<&Path>,
|
||||||
main_nixpkgs: &Path,
|
main_nixpkgs: &Path,
|
||||||
eval_accessible_paths: &Vec<&Path>,
|
eval_accessible_paths: &[&Path],
|
||||||
error_writer: &mut W,
|
error_writer: &mut W,
|
||||||
) -> anyhow::Result<bool> {
|
) -> anyhow::Result<bool> {
|
||||||
let main_result = check_nixpkgs(main_nixpkgs, eval_accessible_paths)?;
|
let main_result = check_nixpkgs(main_nixpkgs, eval_accessible_paths, error_writer)?;
|
||||||
let check_result = main_result.result_map(|nixpkgs_version| {
|
let check_result = main_result.result_map(|nixpkgs_version| {
|
||||||
if let Some(base) = base_nixpkgs {
|
if let Some(base) = base_nixpkgs {
|
||||||
check_nixpkgs(base, eval_accessible_paths, error_writer)?.result_map(
|
check_nixpkgs(base, eval_accessible_paths, error_writer)?.result_map(
|
||||||
|
@ -99,11 +94,17 @@ pub fn process<W: io::Write>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks whether the pkgs/by-name structure in Nixpkgs is valid,
|
/// Checks whether the pkgs/by-name structure in Nixpkgs is valid.
|
||||||
/// and returns to which degree it's valid for checks with increased strictness.
|
///
|
||||||
pub fn check_nixpkgs(
|
/// This does not include checks that depend on the base version of Nixpkgs to compare against,
|
||||||
|
/// which is used for checks that were only introduced later and increased strictness.
|
||||||
|
///
|
||||||
|
/// Instead a `version::Nixpkgs` is returned, whose `compare` method allows comparing the
|
||||||
|
/// result of this function for the base Nixpkgs against the one for the main Nixpkgs.
|
||||||
|
pub fn check_nixpkgs<W: io::Write>(
|
||||||
nixpkgs_path: &Path,
|
nixpkgs_path: &Path,
|
||||||
eval_accessible_paths: &Vec<&Path>,
|
eval_accessible_paths: &[&Path],
|
||||||
|
error_writer: &mut W,
|
||||||
) -> validation::Result<version::Nixpkgs> {
|
) -> validation::Result<version::Nixpkgs> {
|
||||||
Ok({
|
Ok({
|
||||||
let nixpkgs_path = nixpkgs_path.canonicalize().context(format!(
|
let nixpkgs_path = nixpkgs_path.canonicalize().context(format!(
|
||||||
|
@ -112,10 +113,11 @@ pub fn check_nixpkgs(
|
||||||
))?;
|
))?;
|
||||||
|
|
||||||
if !nixpkgs_path.join(utils::BASE_SUBPATH).exists() {
|
if !nixpkgs_path.join(utils::BASE_SUBPATH).exists() {
|
||||||
eprintln!(
|
writeln!(
|
||||||
|
error_writer,
|
||||||
"Given Nixpkgs path does not contain a {} subdirectory, no check necessary.",
|
"Given Nixpkgs path does not contain a {} subdirectory, no check necessary.",
|
||||||
utils::BASE_SUBPATH
|
utils::BASE_SUBPATH
|
||||||
);
|
)?;
|
||||||
Success(version::Nixpkgs::default())
|
Success(version::Nixpkgs::default())
|
||||||
} else {
|
} else {
|
||||||
check_structure(&nixpkgs_path)?.result_map(|package_names|
|
check_structure(&nixpkgs_path)?.result_map(|package_names|
|
||||||
|
@ -224,7 +226,7 @@ mod tests {
|
||||||
// We don't want coloring to mess up the tests
|
// We don't want coloring to mess up the tests
|
||||||
let writer = temp_env::with_var("NO_COLOR", Some("1"), || -> anyhow::Result<_> {
|
let writer = temp_env::with_var("NO_COLOR", Some("1"), || -> anyhow::Result<_> {
|
||||||
let mut writer = vec![];
|
let mut writer = vec![];
|
||||||
process(base_nixpkgs, &path, &vec![&extra_nix_path], &mut writer)
|
process(base_nixpkgs, &path, &[&extra_nix_path], &mut writer)
|
||||||
.context(format!("Failed test case {name}"))?;
|
.context(format!("Failed test case {name}"))?;
|
||||||
Ok(writer)
|
Ok(writer)
|
||||||
})?;
|
})?;
|
||||||
|
|
|
@ -16,6 +16,8 @@ impl Nixpkgs {
|
||||||
/// Compares two Nixpkgs versions against each other, returning validation errors only if the
|
/// Compares two Nixpkgs versions against each other, returning validation errors only if the
|
||||||
/// `from` version satisfied the stricter checks, while the `to` version doesn't satisfy them
|
/// `from` version satisfied the stricter checks, while the `to` version doesn't satisfy them
|
||||||
/// anymore.
|
/// anymore.
|
||||||
|
/// This enables a gradual transition from weaker to stricter checks, by only allowing PRs to
|
||||||
|
/// increase strictness.
|
||||||
pub fn compare(optional_from: Option<Self>, to: Self) -> Validation<()> {
|
pub fn compare(optional_from: Option<Self>, to: Self) -> Validation<()> {
|
||||||
validation::sequence_(
|
validation::sequence_(
|
||||||
// We only loop over the current attributes,
|
// We only loop over the current attributes,
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Given Nixpkgs path does not contain a pkgs/by-name subdirectory, no check necessary.
|
Loading…
Reference in a new issue