debian-forge/tools/debian-forge-config
robojerk eb18f1a514
Some checks are pending
Checks / Spelling (push) Waiting to run
Checks / Python Linters (push) Waiting to run
Checks / Shell Linters (push) Waiting to run
Checks / 📦 Packit config lint (push) Waiting to run
Checks / 🔍 Check for valid snapshot urls (push) Waiting to run
Checks / 🔍 Check JSON files for formatting consistency (push) Waiting to run
Generate / Documentation (push) Waiting to run
Generate / Test Data (push) Waiting to run
Tests / Unittest (push) Waiting to run
Tests / Assembler test (legacy) (push) Waiting to run
Tests / Smoke run: unittest as normal user on default runner (push) Waiting to run
Add dynamic apt-cacher-ng configuration system for collaborators
2025-08-26 15:52:43 -07:00

147 lines
4.2 KiB
Python
Executable file

#!/usr/bin/env python3
"""
Debian Forge Configuration Manager CLI
Helps collaborators manage their local configuration settings
"""
import os
import sys
import argparse
from pathlib import Path
# Add the project root to the path so we can import our modules
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))
try:
from osbuild.config_manager import config
except ImportError:
print("Error: Could not import configuration manager")
sys.exit(1)
def setup_local_config():
"""Set up local configuration file for the user"""
config_dir = Path("config")
local_config = config_dir / "debian-forge.local.conf"
example_config = config_dir / "debian-forge.local.conf.example"
if local_config.exists():
print(f"Local configuration already exists at {local_config}")
return
if not example_config.exists():
print(f"Example configuration not found at {example_config}")
return
# Copy example to local config
import shutil
shutil.copy(example_config, local_config)
print(f"Created local configuration at {local_config}")
print("Please edit this file to customize your settings")
def show_config():
"""Show current configuration"""
config.print_config()
def set_apt_proxy(proxy_url):
"""Set apt-cacher-ng proxy URL"""
config_dir = Path("config")
local_config = config_dir / "debian-forge.local.conf"
# Create local config if it doesn't exist
if not local_config.exists():
setup_local_config()
# Read current config
import configparser
cfg = configparser.ConfigParser()
cfg.read(local_config)
# Ensure apt-cacher-ng section exists
if "apt-cacher-ng" not in cfg:
cfg.add_section("apt-cacher-ng")
# Set the proxy URL
if proxy_url.lower() in ["none", "disable", ""]:
cfg["apt-cacher-ng"]["url"] = ""
print("apt-cacher-ng proxy disabled")
else:
cfg["apt-cacher-ng"]["url"] = proxy_url
print(f"apt-cacher-ng proxy set to: {proxy_url}")
# Write back to file
with open(local_config, 'w') as f:
cfg.write(f)
def set_build_setting(section, key, value):
"""Set a build setting"""
config_dir = Path("config")
local_config = config_dir / "debian-forge.local.conf"
# Create local config if it doesn't exist
if not local_config.exists():
setup_local_config()
# Read current config
import configparser
cfg = configparser.ConfigParser()
cfg.read(local_config)
# Ensure section exists
if section not in cfg:
cfg.add_section(section)
# Set the value
cfg[section][key] = value
print(f"Set {section}.{key} = {value}")
# Write back to file
with open(local_config, 'w') as f:
cfg.write(f)
def main():
parser = argparse.ArgumentParser(description="Debian Forge Configuration Manager")
subparsers = parser.add_subparsers(dest="command", help="Available commands")
# Setup command
setup_parser = subparsers.add_parser("setup", help="Set up local configuration")
# Show command
show_parser = subparsers.add_parser("show", help="Show current configuration")
# Set apt-proxy command
apt_proxy_parser = subparsers.add_parser("apt-proxy", help="Set apt-cacher-ng proxy")
apt_proxy_parser.add_argument("url", nargs="?", default="",
help="Proxy URL (or 'none' to disable)")
# Set build setting command
set_parser = subparsers.add_parser("set", help="Set a configuration value")
set_parser.add_argument("section", help="Configuration section (e.g., build, stages)")
set_parser.add_argument("key", help="Configuration key")
set_parser.add_argument("value", help="Configuration value")
args = parser.parse_args()
if not args.command:
parser.print_help()
return
if args.command == "setup":
setup_local_config()
elif args.command == "show":
show_config()
elif args.command == "apt-proxy":
set_apt_proxy(args.url)
elif args.command == "set":
set_build_setting(args.section, args.key, args.value)
else:
parser.print_help()
if __name__ == "__main__":
main()