mirror of
https://github.com/browseros-ai/BrowserOS.git
synced 2026-05-19 03:26:28 +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
98 lines
3.4 KiB
Python
Generated
98 lines
3.4 KiB
Python
Generated
#!/usr/bin/env python3
|
|
"""Git operations module for BrowserOS build system"""
|
|
|
|
import subprocess
|
|
import tarfile
|
|
import urllib.request
|
|
from ...common.module import CommandModule, ValidationError
|
|
from ...common.context import Context
|
|
from ...common.utils import run_command, log_info, log_error, log_success, IS_WINDOWS, safe_rmtree
|
|
|
|
|
|
class GitSetupModule(CommandModule):
|
|
produces = []
|
|
requires = []
|
|
description = "Checkout Chromium version and sync dependencies"
|
|
|
|
def validate(self, ctx: Context) -> None:
|
|
if not ctx.chromium_src.exists():
|
|
raise ValidationError(f"Chromium source not found: {ctx.chromium_src}")
|
|
|
|
if not ctx.chromium_version:
|
|
raise ValidationError("Chromium version not set")
|
|
|
|
def execute(self, ctx: Context) -> None:
|
|
log_info(f"\n🔀 Setting up Chromium {ctx.chromium_version}...")
|
|
|
|
log_info("📥 Fetching all tags from remote...")
|
|
run_command(["git", "fetch", "--tags", "--force"], cwd=ctx.chromium_src)
|
|
|
|
self._verify_tag_exists(ctx)
|
|
|
|
log_info(f"🔀 Checking out tag: {ctx.chromium_version}")
|
|
run_command(["git", "checkout", f"tags/{ctx.chromium_version}"], cwd=ctx.chromium_src)
|
|
|
|
log_info("📥 Syncing dependencies (this may take a while)...")
|
|
if IS_WINDOWS():
|
|
run_command(["gclient.bat", "sync", "-D", "--no-history", "--shallow"], cwd=ctx.chromium_src)
|
|
else:
|
|
run_command(["gclient", "sync", "-D", "--no-history", "--shallow"], cwd=ctx.chromium_src)
|
|
|
|
log_success("Git setup complete")
|
|
|
|
def _verify_tag_exists(self, ctx: Context) -> None:
|
|
result = subprocess.run(
|
|
["git", "tag", "-l", ctx.chromium_version],
|
|
text=True,
|
|
capture_output=True,
|
|
cwd=ctx.chromium_src,
|
|
)
|
|
if not result.stdout or ctx.chromium_version not in result.stdout:
|
|
log_error(f"Tag {ctx.chromium_version} not found!")
|
|
log_info("Available tags (last 10):")
|
|
list_result = subprocess.run(
|
|
["git", "tag", "-l", "--sort=-version:refname"],
|
|
text=True,
|
|
capture_output=True,
|
|
cwd=ctx.chromium_src,
|
|
)
|
|
if list_result.stdout:
|
|
for tag in list_result.stdout.strip().split("\n")[:10]:
|
|
log_info(f" {tag}")
|
|
raise ValidationError(f"Git tag {ctx.chromium_version} not found")
|
|
|
|
|
|
class SparkleSetupModule(CommandModule):
|
|
produces = []
|
|
requires = []
|
|
description = "Download and setup Sparkle framework (macOS only)"
|
|
|
|
def validate(self, ctx: Context) -> None:
|
|
from ...common.utils import IS_MACOS
|
|
if not IS_MACOS():
|
|
raise ValidationError("Sparkle setup requires macOS")
|
|
|
|
def execute(self, ctx: Context) -> None:
|
|
log_info("\n✨ Setting up Sparkle framework...")
|
|
|
|
sparkle_dir = ctx.get_sparkle_dir()
|
|
|
|
if sparkle_dir.exists():
|
|
safe_rmtree(sparkle_dir)
|
|
|
|
sparkle_dir.mkdir(parents=True)
|
|
|
|
sparkle_url = ctx.get_sparkle_url()
|
|
sparkle_archive = sparkle_dir / "sparkle.tar.xz"
|
|
|
|
log_info(f"Downloading Sparkle from {sparkle_url}...")
|
|
urllib.request.urlretrieve(sparkle_url, sparkle_archive)
|
|
|
|
log_info("Extracting Sparkle...")
|
|
with tarfile.open(sparkle_archive, "r:xz") as tar:
|
|
tar.extractall(sparkle_dir)
|
|
|
|
sparkle_archive.unlink()
|
|
|
|
log_success("Sparkle setup complete")
|