Compare commits

..
Author SHA1 Message Date
jknapp 5b7f30c4b2 Merge pull request 'Fix macOS CI and remove duplicate GitHub Actions workflow' (#4) from perf/pipeline-improvements into main
Build & Release / Build sidecar (aarch64-apple-darwin) (push) Failing after 5s
Build & Release / Build sidecar (x86_64-pc-windows-msvc) (push) Failing after 13s
Build & Release / Build sidecar (x86_64-unknown-linux-gnu) (push) Successful in 4m41s
Build & Release / Build app (x86_64-unknown-linux-gnu) (push) Has been skipped
Build & Release / Build app (aarch64-apple-darwin) (push) Has been skipped
Build & Release / Build app (x86_64-pc-windows-msvc) (push) Has been skipped
Build & Release / Create Release (push) Has been skipped
Reviewed-on: #4
2026-03-21 05:44:48 +00:00
2 changed files with 21 additions and 42 deletions
+9 -5
View File
@@ -32,15 +32,19 @@ jobs:
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v4
- name: Set up Python - name: Set up Python
run: uv python install ${{ env.PYTHON_VERSION }} uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
env:
AGENT_TOOLSDIRECTORY: ${{ runner.temp }}/toolcache
- name: Install Python build tools
run: python -m pip install --upgrade pip setuptools wheel
- name: Build sidecar - name: Build sidecar
working-directory: python working-directory: python
run: uv run --python ${{ env.PYTHON_VERSION }} python build_sidecar.py --cpu-only run: python build_sidecar.py --cpu-only
- name: Upload sidecar artifact - name: Upload sidecar artifact
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
+9 -34
View File
@@ -59,67 +59,42 @@ def get_target_triple() -> str:
return f"{arch}-unknown-{system}" return f"{arch}-unknown-{system}"
def _has_uv() -> bool:
"""Check if uv is available."""
try:
subprocess.run(["uv", "--version"], capture_output=True, check=True)
return True
except (FileNotFoundError, subprocess.CalledProcessError):
return False
def create_venv_and_install(cpu_only: bool) -> Path: def create_venv_and_install(cpu_only: bool) -> Path:
"""Create a fresh venv and install dependencies. """Create a fresh venv and install dependencies."""
Uses uv if available (much faster), falls back to standard venv + pip.
"""
venv_dir = BUILD_DIR / "sidecar-venv" venv_dir = BUILD_DIR / "sidecar-venv"
if venv_dir.exists(): if venv_dir.exists():
shutil.rmtree(venv_dir) shutil.rmtree(venv_dir)
use_uv = _has_uv()
if use_uv:
print(f"[build] Creating venv with uv at {venv_dir}")
subprocess.run(
["uv", "venv", "--python", f"{sys.version_info.major}.{sys.version_info.minor}",
str(venv_dir)],
check=True,
)
else:
print(f"[build] Creating venv at {venv_dir}") print(f"[build] Creating venv at {venv_dir}")
subprocess.run([sys.executable, "-m", "venv", str(venv_dir)], check=True) subprocess.run([sys.executable, "-m", "venv", str(venv_dir)], check=True)
# Determine python path inside venv # Determine python path inside venv — use `python -m pip` instead of
# calling pip directly to avoid permission errors on Windows
if sys.platform == "win32": if sys.platform == "win32":
python = str(venv_dir / "Scripts" / "python") python = str(venv_dir / "Scripts" / "python")
else: else:
python = str(venv_dir / "bin" / "python") python = str(venv_dir / "bin" / "python")
def pkg_install(*args: str) -> None: def pip_install(*args: str) -> None:
if use_uv:
subprocess.run(["uv", "pip", "install", "--python", python, *args], check=True)
else:
subprocess.run([python, "-m", "pip", *args], check=True) subprocess.run([python, "-m", "pip", *args], check=True)
if not use_uv: # Upgrade pip
# Upgrade pip (uv doesn't need this) pip_install("install", "--upgrade", "pip", "setuptools", "wheel")
pkg_install("install", "--upgrade", "pip", "setuptools", "wheel")
# Install torch (CPU-only to avoid bundling ~2GB of CUDA libs) # Install torch (CPU-only to avoid bundling ~2GB of CUDA libs)
if cpu_only: if cpu_only:
print("[build] Installing PyTorch (CPU-only)") print("[build] Installing PyTorch (CPU-only)")
pkg_install( pip_install(
"install", "torch", "torchaudio", "install", "torch", "torchaudio",
"--index-url", "https://download.pytorch.org/whl/cpu", "--index-url", "https://download.pytorch.org/whl/cpu",
) )
else: else:
print("[build] Installing PyTorch (default, may include CUDA)") print("[build] Installing PyTorch (default, may include CUDA)")
pkg_install("install", "torch", "torchaudio") pip_install("install", "torch", "torchaudio")
# Install project and dev deps (includes pyinstaller) # Install project and dev deps (includes pyinstaller)
print("[build] Installing project dependencies") print("[build] Installing project dependencies")
pkg_install("install", "-e", f"{SCRIPT_DIR}[dev]") pip_install("install", "-e", f"{SCRIPT_DIR}[dev]")
return Path(python) return Path(python)