llama-stack-mirror/.github/actions/setup-runner/action.yml
Omar Abdelwahab 166c37bbbe fix(ci): Prevent Python from caching old code during uv sync
The signature mismatch error persists because 'uv sync' installs and potentially imports
the llama-stack package, caching provider modules in memory BEFORE we do the editable
install with fresh source code.

This fix adds the --no-install-project flag to 'uv sync', which:
1. Installs all dependencies but skips installing the project itself
2. Prevents Python from importing and caching provider modules
3. Ensures the subsequent 'uv pip install -e .' loads fresh source code

This should finally resolve the persistent signature mismatch errors in CI where
the protocol has 'authorization' parameter but provider implementations appear not to.
2025-11-12 15:56:26 -08:00

83 lines
3.3 KiB
YAML

name: Setup runner
description: Prepare a runner for the tests (install uv, python, project dependencies, etc.)
inputs:
python-version:
description: The Python version to use
required: false
default: "3.12"
client-version:
description: The llama-stack-client-python version to test against (latest or published)
required: false
default: "latest"
runs:
using: "composite"
steps:
- name: Install uv
uses: astral-sh/setup-uv@6b9c6063abd6010835644d4c2e1bef4cf5cd0fca # v6.0.1
with:
python-version: ${{ inputs.python-version }}
version: 0.7.6
- name: Configure client installation
id: client-config
uses: ./.github/actions/install-llama-stack-client
with:
client-version: ${{ inputs.client-version }}
- name: Install dependencies
shell: bash
env:
UV_EXTRA_INDEX_URL: ${{ steps.client-config.outputs.uv-extra-index-url }}
PYTHONDONTWRITEBYTECODE: 1
run: |
# Export UV env vars for current step and persist to GITHUB_ENV for subsequent steps
if [ -n "$UV_EXTRA_INDEX_URL" ]; then
export UV_INDEX_STRATEGY=unsafe-best-match
echo "UV_EXTRA_INDEX_URL=$UV_EXTRA_INDEX_URL" >> $GITHUB_ENV
echo "UV_INDEX_STRATEGY=$UV_INDEX_STRATEGY" >> $GITHUB_ENV
echo "Exported UV environment variables for current and subsequent steps"
fi
echo "Clearing cached virtual environment to ensure fresh install"
# Remove cached venv that may contain old code
if [ -d ".venv" ]; then
echo "Removing cached .venv directory"
rm -rf .venv
fi
# Clear Python bytecode cache
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find . -name "*.pyc" -delete 2>/dev/null || true
# Clear uv's cache directory to force rebuilding wheels from source
if [ -n "$UV_CACHE_DIR" ] && [ -d "$UV_CACHE_DIR" ]; then
echo "Clearing UV cache at $UV_CACHE_DIR"
rm -rf "$UV_CACHE_DIR"/*
fi
echo "Syncing dependencies with uv (will create fresh venv)"
# Use --no-install-project to avoid installing llama-stack yet (we'll do it later with -e)
# This prevents Python from importing old code during sync
uv sync --all-groups --no-install-project
echo "Force reinstalling llama-stack from source to ensure latest changes"
uv pip install --force-reinstall --no-deps -e .
echo "Installing ci-tests distribution dependencies"
uv run llama stack list-deps ci-tests | xargs -L1 uv pip install
echo "Installing ad-hoc dependencies"
uv pip install faiss-cpu
# Install specific client version after sync if needed
if [ "${{ steps.client-config.outputs.install-after-sync }}" = "true" ]; then
echo "Installing llama-stack-client from: ${{ steps.client-config.outputs.install-source }}"
uv pip install ${{ steps.client-config.outputs.install-source }}
fi
echo "Final cleanup: removing all bytecode cache after installations"
find . -name "*.pyc" -type f -delete 2>/dev/null || true
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
echo "Installed llama packages"
uv pip list | grep llama