Files
BrowserOS/packages/browseros/build/common/pipeline.py
Nikhil 1523335d19 cli improvements, new release cli (#215)
* feat: new upload to r2, better semantic app name, sparkle signing as part of build

* feat: consistent artifact naming

* minor: add additional logging in build.py

* minor

* feat: better notify, so it's not too verbose

* refactor: rename R2UploadModule to just UploadModule

* fix: sparkle signature uplaod.py

* minor: debugging

* fix: sparkle update and metadata for release artificats

* feat: v1 release module

* feat: new release cli with modules/

* minor: env update
2025-12-03 17:39:25 -08:00

81 lines
2.9 KiB
Python
Generated

#!/usr/bin/env python3
"""Pipeline validation for BrowserOS build system"""
from typing import Dict, List, Type
from .module import CommandModule
from .utils import log_error, log_info
def validate_pipeline(pipeline: List[str], available_modules: Dict[str, Type[CommandModule]]) -> None:
"""Validate that all modules in pipeline exist in available_modules
Raises SystemExit if validation fails
"""
invalid_modules = []
for module_name in pipeline:
if module_name not in available_modules:
invalid_modules.append(module_name)
if invalid_modules:
log_error("Invalid module names in pipeline:")
for module_name in invalid_modules:
log_error(f" - {module_name}")
log_error("\nAvailable modules:")
for module_name in sorted(available_modules.keys()):
module_class = available_modules[module_name]
log_info(f" - {module_name}: {module_class.description}")
raise SystemExit(1)
def show_available_modules(available_modules: Dict[str, Type[CommandModule]]) -> None:
"""Display all available modules with descriptions, grouped by category"""
# Group modules by prefix
groups = {
"Setup & Environment": ["clean", "git_setup", "sparkle_setup", "configure"],
"Patches & Resources": ["patches", "chromium_replace", "string_replaces", "resources"],
"Build": ["compile"],
"Code Signing": ["sign_macos", "sign_windows", "sign_linux"],
"Packaging": ["package_macos", "package_windows", "package_linux"],
"Upload": ["upload"],
}
log_info("\n" + "=" * 70)
log_info("Available Build Modules")
log_info("=" * 70)
for group_name, module_names in groups.items():
# Only show group if it has modules
group_modules = [m for m in module_names if m in available_modules]
if not group_modules:
continue
log_info(f"\n{group_name}:")
log_info("-" * 70)
for module_name in group_modules:
module_class = available_modules[module_name]
log_info(f" {module_name:20} {module_class.description}")
# Show any modules not in groups (for extensibility)
all_grouped = set(m for group in groups.values() for m in group)
ungrouped = sorted(set(available_modules.keys()) - all_grouped)
if ungrouped:
log_info("\nOther:")
log_info("-" * 70)
for module_name in ungrouped:
module_class = available_modules[module_name]
log_info(f" {module_name:20} {module_class.description}")
log_info("\n" + "=" * 70)
log_info("Example Usage:")
log_info("=" * 70)
log_info(" browseros build --modules clean,git_setup,configure,compile")
log_info(" browseros build --modules compile,sign_macos,package_macos")
log_info(" browseros build --config release.yaml")
log_info("=" * 70 + "\n")