From afa9f08823aa570555756c31bcb99f28ffa30064 Mon Sep 17 00:00:00 2001 From: Ashwin Bharambe Date: Thu, 30 Oct 2025 22:31:44 -0700 Subject: [PATCH] fix(ci): install client from release branch before uv sync CI was failing on release branches because uv sync tried to resolve llama-stack-client>=0.3.1rc1 from PyPI, but RC versions only exist on test.pypi. The dependency resolution would fail before we could install the client from git. Solution: On release-X.Y.x branches, pre-install llama-stack-client from the matching git branch before running uv sync. This satisfies the RC version requirement in pyproject.toml and allows dependency resolution to succeed. Changes: - setup-runner: Pre-install client from git on release branches - pre-commit: Add same pre-install logic before uv sync - setup-test-environment: Remove duplicate logic (now in setup-runner) Example failure: https://github.com/llamastack/llama-stack/actions/runs/18963190991/job/54154788350 --- .github/actions/setup-runner/action.yml | 47 +++++++++++++++---- .../actions/setup-test-environment/action.yml | 24 +--------- .github/workflows/pre-commit.yml | 27 +++++++++++ 3 files changed, 66 insertions(+), 32 deletions(-) diff --git a/.github/actions/setup-runner/action.yml b/.github/actions/setup-runner/action.yml index 905d6b73a..14963580c 100644 --- a/.github/actions/setup-runner/action.yml +++ b/.github/actions/setup-runner/action.yml @@ -21,6 +21,32 @@ runs: - name: Install dependencies shell: bash run: | + # Determine the branch we're working with + # For PRs: use base_ref (target branch) + # For pushes: use ref (current branch) + BRANCH="${{ github.base_ref || github.ref }}" + BRANCH="${BRANCH#refs/heads/}" # Strip refs/heads/ prefix + + echo "Working with branch: $BRANCH" + + # If on a release branch, install from matching release branch BEFORE uv sync + # This allows uv sync to resolve dependencies that reference unreleased RC versions + # We always do this on release branches regardless of client-version to satisfy pyproject.toml + if [[ "$BRANCH" =~ ^release-[0-9]+\.[0-9]+\.x$ ]]; then + echo "Detected release branch: $BRANCH" + echo "Checking if matching branch exists in llama-stack-client-python..." + + # Check if the branch exists in the client repo + if git ls-remote --exit-code --heads https://github.com/llamastack/llama-stack-client-python.git "$BRANCH" > /dev/null 2>&1; then + echo "Installing llama-stack-client-python from matching branch: $BRANCH" + uv pip install git+https://github.com/llamastack/llama-stack-client-python.git@$BRANCH + else + echo "::error::Branch $BRANCH not found in llama-stack-client-python repository" + echo "::error::Please create the matching release branch in llama-stack-client-python before testing" + exit 1 + fi + fi + echo "Updating project dependencies via uv sync" uv sync --all-groups @@ -28,15 +54,18 @@ runs: uv pip install faiss-cpu # Install llama-stack-client-python based on the client-version input - if [ "${{ inputs.client-version }}" = "latest" ]; then - echo "Installing latest llama-stack-client-python from main branch" - uv pip install git+https://github.com/llamastack/llama-stack-client-python.git@main - elif [ "${{ inputs.client-version }}" = "published" ]; then - echo "Installing published llama-stack-client-python from PyPI" - uv pip install llama-stack-client - else - echo "Invalid client-version: ${{ inputs.client-version }}" - exit 1 + # Only applies to non-release branches (on release branches, we already installed from git above) + if [[ ! "$BRANCH" =~ ^release-[0-9]+\.[0-9]+\.x$ ]]; then + if [ "${{ inputs.client-version }}" = "latest" ]; then + echo "Installing latest llama-stack-client-python from main branch" + uv pip install git+https://github.com/llamastack/llama-stack-client-python.git@main + elif [ "${{ inputs.client-version }}" = "published" ]; then + echo "Installing published llama-stack-client-python from PyPI" + uv pip install llama-stack-client + else + echo "Invalid client-version: ${{ inputs.client-version }}" + exit 1 + fi fi echo "Installed llama packages" diff --git a/.github/actions/setup-test-environment/action.yml b/.github/actions/setup-test-environment/action.yml index 992b25803..7b306fef5 100644 --- a/.github/actions/setup-test-environment/action.yml +++ b/.github/actions/setup-test-environment/action.yml @@ -42,29 +42,7 @@ runs: - name: Build Llama Stack shell: bash run: | - # Install llama-stack-client-python based on the client-version input - if [ "${{ inputs.client-version }}" = "latest" ]; then - # Check if PR is targeting a release branch - TARGET_BRANCH="${{ github.base_ref }}" - - if [[ "$TARGET_BRANCH" =~ ^release-[0-9]+\.[0-9]+\.x$ ]]; then - echo "PR targets release branch: $TARGET_BRANCH" - echo "Checking if matching branch exists in llama-stack-client-python..." - - # Check if the branch exists in the client repo - if git ls-remote --exit-code --heads https://github.com/llamastack/llama-stack-client-python.git "$TARGET_BRANCH" > /dev/null 2>&1; then - echo "Installing llama-stack-client-python from matching branch: $TARGET_BRANCH" - uv pip install --force-reinstall git+https://github.com/llamastack/llama-stack-client-python.git@$TARGET_BRANCH - else - echo "::error::Branch $TARGET_BRANCH not found in llama-stack-client-python repository" - echo "::error::Please create the matching release branch in llama-stack-client-python before testing" - exit 1 - fi - fi - # For main branch, client is already installed by setup-runner - fi - # For published version, client is already installed by setup-runner - + # Client is already installed by setup-runner (handles both main and release branches) echo "Building Llama Stack" LLAMA_STACK_DIR=. \ diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 695a4f9e2..e0c20bbc4 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -130,6 +130,33 @@ jobs: exit 1 fi + - name: Install client from release branch if needed + run: | + # Determine the branch we're working with + # For PRs: use base_ref (target branch) + # For pushes: use ref (current branch) + BRANCH="${{ github.base_ref || github.ref }}" + BRANCH="${BRANCH#refs/heads/}" # Strip refs/heads/ prefix + + echo "Working with branch: $BRANCH" + + # If on a release branch, install from matching release branch BEFORE uv sync + # This allows uv sync to resolve dependencies that reference unreleased RC versions + if [[ "$BRANCH" =~ ^release-[0-9]+\.[0-9]+\.x$ ]]; then + echo "Detected release branch: $BRANCH" + echo "Checking if matching branch exists in llama-stack-client-python..." + + # Check if the branch exists in the client repo + if git ls-remote --exit-code --heads https://github.com/llamastack/llama-stack-client-python.git "$BRANCH" > /dev/null 2>&1; then + echo "Installing llama-stack-client-python from matching branch: $BRANCH" + uv pip install git+https://github.com/llamastack/llama-stack-client-python.git@$BRANCH + else + echo "::error::Branch $BRANCH not found in llama-stack-client-python repository" + echo "::error::Please create the matching release branch in llama-stack-client-python before testing" + exit 1 + fi + fi + - name: Sync dev + type_checking dependencies run: uv sync --group dev --group type_checking