From c86e6e906a9642d6f93ff22719cc218c02981026 Mon Sep 17 00:00:00 2001 From: Ashwin Bharambe Date: Thu, 30 Oct 2025 22:41:08 -0700 Subject: [PATCH] refactor: extract client install logic into reusable action Moved the release branch detection and client pre-install logic into a dedicated action to eliminate duplication between setup-runner and pre-commit workflows. --- .../install-client-for-release/action.yml | 34 +++++++++++++++++++ .github/actions/setup-runner/action.yml | 29 +++------------- .github/workflows/pre-commit.yml | 28 ++------------- 3 files changed, 41 insertions(+), 50 deletions(-) create mode 100644 .github/actions/install-client-for-release/action.yml diff --git a/.github/actions/install-client-for-release/action.yml b/.github/actions/install-client-for-release/action.yml new file mode 100644 index 000000000..aea4d6089 --- /dev/null +++ b/.github/actions/install-client-for-release/action.yml @@ -0,0 +1,34 @@ +name: Install Client for Release Branch +description: Pre-install llama-stack-client from git on release branches to satisfy RC dependencies before uv sync + +runs: + using: "composite" + steps: + - name: Install client from release branch if needed + 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 diff --git a/.github/actions/setup-runner/action.yml b/.github/actions/setup-runner/action.yml index 14963580c..9804c5e6e 100644 --- a/.github/actions/setup-runner/action.yml +++ b/.github/actions/setup-runner/action.yml @@ -18,34 +18,15 @@ runs: python-version: ${{ inputs.python-version }} version: 0.7.6 + - name: Pre-install client for release branches + uses: ./.github/actions/install-client-for-release + - 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) + # Determine the branch we're working with (needed for post-install logic) 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 + BRANCH="${BRANCH#refs/heads/}" echo "Updating project dependencies via uv sync" uv sync --all-groups diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index e0c20bbc4..eb0c35024 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -130,32 +130,8 @@ 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: Pre-install client for release branches + uses: ./.github/actions/install-client-for-release - name: Sync dev + type_checking dependencies run: uv sync --group dev --group type_checking