Multiple changes
CI / build (push) Failing after 18m0s
CI / snap (push) Has been skipped

- quirks: added quirks, that does nothing for now
- deb: install arch-independant dependencies (too much is better)
- deb: added linux-riscv crossbuild test
This commit is contained in:
2026-02-10 11:07:05 +01:00
parent 8345f51d2f
commit 97725efb34
5 changed files with 120 additions and 15 deletions
+77
View File
@@ -0,0 +1,77 @@
//! Quirks module for handling package-specific workarounds
//!
//! This module provides functionality to read quirks from a YAML file
//! and apply them during pull and deb operations.
use lazy_static::lazy_static;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
/// Quirks configuration for a specific operation (pull or deb)
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct OperationQuirks {
/// Extra dependencies to install before the operation
#[serde(default)]
pub extra_dependencies: Vec<String>,
/// Additional parameters for the operation
#[serde(default)]
pub parameters: HashMap<String, serde_yaml::Value>,
}
/// Quirks for a specific package
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct PackageQuirks {
/// Quirks to apply during pull operation
#[serde(default)]
pub pull: Option<OperationQuirks>,
/// Quirks to apply during deb operation
#[serde(default)]
pub deb: Option<OperationQuirks>,
}
/// Top-level quirks configuration
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct QuirksConfig {
/// Map of package names to their quirks
pub quirks: HashMap<String, PackageQuirks>,
}
const QUIRKS_YAML: &str = include_str!("../quirks.yml");
lazy_static! {
static ref QUIRKS_DATA: QuirksConfig = serde_yaml::from_str(QUIRKS_YAML).unwrap();
}
/// Get quirks for a specific package
///
/// # Arguments
/// * `config` - The quirks configuration
/// * `package` - The package name
///
/// # Returns
/// * `Option<PackageQuirks>` - The quirks for the package, or None if not found
pub fn get_package_quirks<'a>(
config: &'a QuirksConfig,
package: &str,
) -> Option<&'a PackageQuirks> {
config.quirks.get(package)
}
/// Get deb-time extra dependencies for a package
///
/// This function returns the list of extra dependencies that should be installed
/// before building a package, as defined in the quirks configuration.
///
/// # Arguments
/// * `package` - The package name
///
/// # Returns
/// * `Vec<String>` - List of extra dependencies, or empty vector if none
pub fn get_deb_extra_dependencies(package: &str) -> Vec<String> {
if let Some(quirks) = &get_package_quirks(&QUIRKS_DATA, package).unwrap().deb {
return quirks.extra_dependencies.clone();
}
Vec::new()
}