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