Files
tensors/scripts/reinstall.py
T
Adam Ladachowski be7cf0b6e7 💬 Commit message: Update 2026-02-14 05:32:51, 3 files, 113 lines
📁 Files changed: 3
📝 Lines changed: 113

  • reinstall.md
  • pyproject.toml
  • reinstall.py
2026-02-14 05:32:51 +01:00

97 lines
2.8 KiB
Python
Executable File

#!/usr/bin/env python3
"""Reinstall tensors locally and on junkpile."""
from __future__ import annotations
import re
import subprocess
import sys
from pathlib import Path
PROJECT_ROOT = Path(__file__).parent.parent
PYPROJECT = PROJECT_ROOT / "pyproject.toml"
JUNKPILE_HOST = "chi@junkpile"
JUNKPILE_PATH = "~/Projects/tensors"
def get_version() -> str:
"""Get current version from pyproject.toml."""
content = PYPROJECT.read_text()
match = re.search(r'version\s*=\s*"([^"]+)"', content)
if not match:
raise ValueError("Could not find version in pyproject.toml")
return match.group(1)
def bump_version(current: str) -> str:
"""Bump patch version."""
parts = current.split(".")
parts[-1] = str(int(parts[-1]) + 1)
return ".".join(parts)
def set_version(new_version: str) -> None:
"""Update version in pyproject.toml."""
content = PYPROJECT.read_text()
# Only replace the project version (line starts with 'version')
content = re.sub(r'^version\s*=\s*"[^"]+"', f'version = "{new_version}"', content, count=1, flags=re.MULTILINE)
PYPROJECT.write_text(content)
print(f" Updated pyproject.toml to {new_version}")
def run(cmd: list[str], *, check: bool = True, capture: bool = False) -> subprocess.CompletedProcess[str]:
"""Run a command."""
print(f" $ {' '.join(cmd)}")
return subprocess.run(cmd, check=check, capture_output=capture, text=True)
def install_local() -> None:
"""Install locally with uv."""
print("\n[2/4] Installing locally...")
run(["uv", "pip", "install", "-e", "."], check=True)
def sync_to_junkpile() -> None:
"""Sync project to junkpile."""
print("\n[3/4] Syncing to junkpile...")
excludes = [
".git", ".venv", "__pycache__", "*.pyc", ".mypy_cache",
".pytest_cache", ".ruff_cache", ".coverage", "*.egg-info",
"node_modules", ".tmp",
]
cmd = ["rsync", "-avz", "--delete"]
for exc in excludes:
cmd.extend(["--exclude", exc])
cmd.extend([f"{PROJECT_ROOT}/", f"{JUNKPILE_HOST}:{JUNKPILE_PATH}/"])
run(cmd)
def install_junkpile() -> None:
"""Install on junkpile."""
print("\n[4/4] Installing on junkpile...")
run(["ssh", JUNKPILE_HOST, f"cd {JUNKPILE_PATH} && pip install -e '.[server]'"])
def main() -> int:
"""Main entry point."""
current = get_version()
new_version = bump_version(current)
print(f"\n[1/4] Bumping version {current} -> {new_version}...")
set_version(new_version)
try:
install_local()
sync_to_junkpile()
install_junkpile()
except subprocess.CalledProcessError as e:
print(f"\nError: Command failed with exit code {e.returncode}")
return 1
print(f"\n Done! tensors {new_version} installed locally and on junkpile")
return 0
if __name__ == "__main__":
sys.exit(main())