Auto-bootstrap BSIPA when re-enabling plugins
Run bootstrap automatically on enable paths when health is bad, skip bsipa in disable-all, and add tests for the shared bootstrap gate. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -8,7 +8,7 @@ from pathlib import Path
|
||||
from typing import Any, Callable
|
||||
from urllib.request import Request, urlopen
|
||||
|
||||
from .bsipa import BSIPA_PLUGIN_ID, check_bsipa_health
|
||||
from .bsipa import BSIPA_PLUGIN_ID, bootstrap_health_error, check_bsipa_health, planning_requires_bootstrap
|
||||
from .config import is_windows
|
||||
from .fsutil import sha256_file
|
||||
from .installer import apply_plan
|
||||
@@ -296,3 +296,46 @@ def run_bootstrap(
|
||||
if completed["returncode"] != 0:
|
||||
raise RuntimeError(f"IPA.exe -n failed with exit code {completed['returncode']}; state written to {state['statePath']}")
|
||||
return state
|
||||
|
||||
|
||||
def ensure_healthy_bootstrap(
|
||||
*,
|
||||
instance: str,
|
||||
instance_path: Path,
|
||||
beat_saber_version: str,
|
||||
registry: Registry,
|
||||
lockfile: Lockfile,
|
||||
state_root: Path,
|
||||
repo_root: Path,
|
||||
selected_ids: set[str],
|
||||
proton: Path | None = None,
|
||||
native: bool | None = None,
|
||||
progress: Callable[[str], None] | None = None,
|
||||
ipa_timeout_seconds: int = 120,
|
||||
) -> None:
|
||||
if not planning_requires_bootstrap(lockfile.plugins, selected_ids):
|
||||
return
|
||||
|
||||
health = check_bsipa_health(instance_path, state_root, instance)
|
||||
if health["ok"]:
|
||||
return
|
||||
|
||||
tell = progress or (lambda _message: None)
|
||||
tell("BSIPA bootstrap is unhealthy; running bootstrap")
|
||||
run_bootstrap(
|
||||
instance=instance,
|
||||
instance_path=instance_path,
|
||||
beat_saber_version=beat_saber_version,
|
||||
registry=registry,
|
||||
lockfile=lockfile,
|
||||
state_root=state_root,
|
||||
repo_root=repo_root,
|
||||
proton=proton,
|
||||
native=native,
|
||||
progress=progress,
|
||||
ipa_timeout_seconds=ipa_timeout_seconds,
|
||||
)
|
||||
|
||||
health = check_bsipa_health(instance_path, state_root, instance)
|
||||
if not health["ok"]:
|
||||
raise ValueError(bootstrap_health_error(health))
|
||||
|
||||
Reference in New Issue
Block a user