mirror of
https://github.com/browseros-ai/BrowserOS.git
synced 2026-05-20 12:30:04 +00:00
* refactor 1: new typer based cli and browseros cli module * refactor 2: fixes to context.py * refactor 3: common/ and notify * new sign and package module * update .gitignore * refactor 5: dev.py and modules for each * refactor 6: clean-up old files * refactor 7: organise modules fruther * refactor 8: renaming nxtscape to browseros * refactor 9: dev.py remove cli load * fix: pyproject.toml * fix: typer pretty exception disable * refactor 10: cli/build.py set to primary * refactor 10: cli/build.py set to primary, move OS detection * refactor: context split, env and module dataclass * reactor: clean and git moved ot new module type * refactor: compile and configure * reactor: sign and package module update * refactor: new build.py cli * 'refactor: remove reducant OS checks * refactor: rename BuildContext to Context * refactor: rename BuildModule to CommandModule * refactor: dev.py to use the new modules * build.py: improve help output * remove old patching way * clean-up: remove old build.py stuff * refactor: move to proper yaml parsing * clean-up: remove legacy args gating * fix: patches issues * fix: clean-up build.py and ars resolver * minor: gitignore * fix: patches.py issue * support universal build * fix: ENV variable and YAMLs * fix: move compile to folder to avoid compflics * fixes: more env fixes * fix: build_type override in CLI fix * fix: universal clean all archs before starting * fix: universal build type constants * fix: linter, extract options * fix: linter * fix: remove chromium_src as a not a conflicting flag * fix: support chromium_src from cli in config mode * fix: notify with better messages * feat: new apply patch with --reset-to feature * feat: refactor apply and extract into separate sub modules * 142 patches working (#211) * updates to build.py apply/patch * removed all old patches * 142 build update * fix: get updated patches from main to 142 * fix: correct patches dir * fix: import path * add pyright * fix: setup pyright * fix: new updated patches from 137 rebased on 142 * feat: new extract_patch command * fix: add mising side_panel build patch * fix: extension uninstall for browseros * fix: prefs fix * fix: ota extension updater patch fix * fix: llm hub and chat * feat: unvisersal module also package individual archs * fix: add browseros-server binaries * fix: attach color for notify * fix: attachment for slack * fix: update chromium version to 142.0.7444.175 * feat: add new icons needed * fix: disable settings in menu * fix: uv add build-backend * minor: chromium version bump * clean-up: removed old files of extnesion and sidepanel * fix: product logo generate and assets.car and appicon.icns * feat: few chromium UI fixes * fix: update features.yaml * fix: features.yaml path in context * refactor: rename to get_patches_dir() * feat: show browserOS version in about page * fix: copy browseros_version on the build time and rename other to offset * bump offset * fix: update features.yaml * feat: load env from .env files too * fix: enable split view * clean-up: removed old prefs * fix: minor import issue * fix: linux flag update
69 lines
1.8 KiB
Python
Generated
69 lines
1.8 KiB
Python
Generated
#!/usr/bin/env python3
|
|
"""YAML configuration parser with environment variable substitution"""
|
|
|
|
import os
|
|
import yaml
|
|
from pathlib import Path
|
|
from typing import Any, Dict
|
|
from .utils import log_info, log_error, log_warning
|
|
|
|
|
|
def env_var_constructor(loader, node):
|
|
"""Custom YAML constructor for !env tag
|
|
|
|
Usage in YAML:
|
|
chromium_src: !env CHROMIUM_SRC
|
|
path: !env HOME
|
|
|
|
Returns empty string if environment variable is not set.
|
|
"""
|
|
value = loader.construct_scalar(node)
|
|
env_value = os.environ.get(value)
|
|
|
|
if env_value is None:
|
|
log_warning(f"Environment variable not set: {value} (using empty string)")
|
|
return ''
|
|
|
|
return env_value
|
|
|
|
|
|
# Register the !env constructor with SafeLoader
|
|
yaml.add_constructor('!env', env_var_constructor, Loader=yaml.SafeLoader)
|
|
|
|
|
|
def load_config(config_path: Path) -> Dict[str, Any]:
|
|
"""Load and parse YAML config file with environment variable substitution
|
|
|
|
Supports !env tag for environment variables:
|
|
chromium_src: !env CHROMIUM_SRC
|
|
build_dir: !env BUILD_DIR
|
|
"""
|
|
|
|
if not config_path.exists():
|
|
raise FileNotFoundError(f"Config file not found: {config_path}")
|
|
|
|
log_info(f"Loading config from: {config_path}")
|
|
|
|
with open(config_path, 'r') as f:
|
|
config = yaml.safe_load(f)
|
|
|
|
return config
|
|
|
|
|
|
def validate_required_envs(required_envs: list) -> None:
|
|
"""Validate that all required environment variables are set
|
|
|
|
Raises SystemExit if any are missing
|
|
"""
|
|
missing = []
|
|
for env_var in required_envs:
|
|
if not os.environ.get(env_var):
|
|
missing.append(env_var)
|
|
|
|
if missing:
|
|
log_error("Missing required environment variables:")
|
|
for var in missing:
|
|
log_error(f" - {var}")
|
|
log_error("\nSet these variables and try again")
|
|
raise SystemExit(1)
|