builder_peppermint_void/builder/core/config_loader.py
2025-04-25 12:38:42 +00:00

105 lines
3.8 KiB
Python

# -*- coding: utf-8 -*-
"""
SPDX-FileCopyrightText: 2023-2025 PeppermintOS Team
(peppermintosteam@proton.me)
SPDX-License-Identifier: GPL-3.0-or-later
This module provides functions to load YAML configuration files used in the PeppermintOS
build process. It includes functions to load a single YAML file and to load all
common configuration files.
"""
import yaml
import logging
import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, BASE_DIR)
try:
from builder.core.bootstrap.paths import paths
from builder.configs import logger_config
except ImportError as e:
print(f"Error importing necessary modules: {e}. Ensure your environment is set up correctly.")
sys.exit(1)
logger = logger_config.setup_logger('config_loader')
def load_yaml_config(yaml_file_path, log_filename):
"""Loads a YAML configuration file."""
try:
with open(yaml_file_path, 'r') as yaml_file:
config = yaml.safe_load(yaml_file)
logger.debug(f"YAML configuration loaded from: {yaml_file_path}")
return config
except FileNotFoundError:
logger.error(f"YAML configuration file not found: {yaml_file_path}")
return None
except yaml.YAMLError as e:
logger.error(f"Error reading YAML file: {yaml_file_path} - {e}")
return None
def load_all_configurations(architecture, config_file_path=None):
"""Loads all YAML configuration files."""
logger.info("=> Loading YAML configuration files...")
configs = {}
# Arquitetures
architectures_config_path = paths["ARCHITECTURES_CONFIG_YAML"]
configs['architectures'] = load_yaml_config(architectures_config_path, "architectures_config.yaml")
if configs['architectures'] is None:
logger.error(f"=> Failed to load architectures config: {architectures_config_path}")
return None
# Desktops
desktops_config_path = paths["DESKTOPS_CONFIG_YAML"]
desktops_config_raw = load_yaml_config(desktops_config_path, "desktops_config.yaml")
if desktops_config_raw is None:
logger.error(f"=> Failed to load desktops config: {desktops_config_path}")
return None
desktops = desktops_config_raw.get("desktops")
if not desktops:
logger.error("=> No desktops found in desktops_config.yaml!")
return None
configs['desktops'] = {'desktops': desktops}
# Check if the specified desktop is in the keychain
for desktop_id in configs['desktops']:
if desktop_id not in configs['desktops']:
logger.error(f"=> Desktop '{desktop_id}' not found!")
return None
# Kernels
kernels_config_path = paths["KERNELS_CONFIG_YAML"]
configs['kernels'] = load_yaml_config(kernels_config_path, "kernels_config.yaml")
if configs['kernels'] is None:
logger.error(f"=> Failed to load kernels config: {kernels_config_path}")
return None
# Common packages
common_packages_config_path = paths["COMMON_PACKAGES_YAML"]
configs['common_packages'] = load_yaml_config(common_packages_config_path, "common_packages.yaml")
if configs['common_packages'] is None:
logger.error(f"=> Failed to load common packages config: {common_packages_config_path}")
return None
# ISO config
if config_file_path:
iso_config_path = config_file_path
log_filename = os.path.basename(config_file_path)
else:
config_file_name = f"iso_build_config_{architecture}.yaml"
iso_config_path = os.path.join(paths["ISO_BUILD_CONFIG_YAML"], config_file_name)
log_filename = config_file_name
configs['iso_config'] = load_yaml_config(iso_config_path, log_filename)
if configs['iso_config'] is None:
logger.error(f"=> Failed to load ISO build config: {iso_config_path}")
return None
logger.info("=> YAML configuration files loaded successfully.")
return configs