Skip to content

ci: uv with cache for Phoenix Python CI #9869

ci: uv with cache for Phoenix Python CI

ci: uv with cache for Phoenix Python CI #9869

Workflow file for this run

name: Python CI
on:
push:
branches: [ main, playground ]
pull_request:
paths:
- "src/**"
- "tests/**"
- "integration_tests/**"
- "tutorials/**"
- "pyproject.toml"
- "packages/**"
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
concurrency:
group: test-python-${{ github.head_ref }}
cancel-in-progress: true
env:
pip-version: 24.2
OPENAI_API_KEY: "sk-fake-openai-key" # fake openai key so that llama_index doesn't download huggingface embeddings
jobs:
changes:
name: Filter Changes
runs-on: ubuntu-latest
outputs:
phoenix: ${{ steps.filter.outputs.phoenix }}
packages: ${{ steps.filter.outputs.packages }}
phoenix_evals: ${{ steps.filter.outputs.phoenix_evals }}
phoenix_otel: ${{ steps.filter.outputs.phoenix_otel }}
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
phoenix:
- "src/**"
- "tests/**"
- "integration_tests/**"
- "tutorials/**"
- "pyproject.toml"
packages:
- "packages/**"
phoenix_evals:
- "packages/phoenix-evals/**"
phoenix_otel:
- "packages/phoenix-otel/**"
phoenix-evals:
needs: changes
if: ${{ needs.changes.outputs.phoenix_evals == 'true' }}
strategy:
matrix:
py: [ 3.9, 3.12 ]
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/phoenix-evals
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.py }}
- uses: astral-sh/setup-uv@v3
with:
version: 0.4.17
- run: uv sync --extra test
- run: uv pip list
- run: uv run ruff format --diff .
- run: uv run ruff check --no-fix .
- run: uv run mypy src/phoenix/evals
- run: uv run pytest -n auto -x -ra tests
timeout-minutes: 15
phoenix-otel:
needs: changes
if: ${{ needs.changes.outputs.phoenix_otel == 'true' }}
strategy:
matrix:
py: [ 3.9, 3.12 ]
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/phoenix-otel
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.py }}
- uses: astral-sh/setup-uv@v3
with:
version: 0.4.17
- run: uv sync --extra test
- run: uv run ruff format --diff .
- run: uv run ruff check --no-fix .
- run: uv run mypy src/phoenix/otel
- run: uv run pytest -n auto -x -ra tests
timeout-minutes: 15
lint:
name: Lint Phoenix
runs-on: ubuntu-latest
needs: changes
if: ${{ needs.changes.outputs.phoenix == 'true' }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up python 3.9
uses: actions/setup-python@v5
with:
python-version: 3.9
- name: Install dependencies
run: |
python -m pip install --upgrade pip==${{ env.pip-version }}
pip install hatch
- name: Proto codegen
run: |
hatch run proto:recompile
git diff --exit-code
- name: Export OpenAPI schema
run: |
hatch run openapi:build
git diff --exit-code
- name: Check notebooks have cleaned output and metadata
run: |
hatch run notebooks:clean
git diff --exit-code
checks:
needs: changes
if: ${{ needs.changes.outputs.phoenix == 'true' }}
strategy:
matrix:
py: [ 3.9, 3.12 ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.py }}
- uses: astral-sh/setup-uv@v3
with:
version: 0.4.17
enable-cache: true
cache-dependency-glob: "uv.lock"
github-token: ${{ secrets.GITHUB_TOKEN }}
- run: uv tool install tox --with tox-uv
- run: tox r -e ci_checks
- run: git diff --exit-code
unit-tests:
needs: changes
if: ${{ needs.changes.outputs.phoenix == 'true' }}
strategy:
matrix:
py: [ 3.9, 3.12 ]
os: [ ubuntu-latest, windows-latest, macos-12 ]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.py }}
- uses: astral-sh/setup-uv@v3
with:
version: 0.4.17
enable-cache: true
cache-dependency-glob: "uv.lock"
github-token: ${{ secrets.GITHUB_TOKEN }}
- run: uv tool install tox --with tox-uv
- run: sudo apt-get -yqq install postgresql
if: runner.os == 'Linux'
- run: tox r -e ci_unit_tests_linux
if: runner.os == 'Linux'
timeout-minutes: 15
- run: tox r -e ci_unit_tests_non_linux
if: runner.os != 'Linux'
timeout-minutes: 15
integration-tests:
needs: changes
if: ${{ needs.changes.outputs.phoenix == 'true' }}
strategy:
matrix:
py: [ 3.9, 3.12 ]
os: [ ubuntu-latest, windows-latest, macos-12 ]
runs-on: ${{ matrix.os }}
services:
postgres:
# Applying this workaround: https://github.com/actions/runner/issues/822
image: ${{ matrix.os == 'ubuntu-latest' && 'postgres:12' || '' }}
env:
POSTGRES_PASSWORD: phoenix
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.py }}
- uses: astral-sh/setup-uv@v3
with:
version: 0.4.17
enable-cache: true
cache-dependency-glob: "uv.lock"
github-token: ${{ secrets.GITHUB_TOKEN }}
- run: uv tool install tox --with tox-uv
- run: tox r -e ci_integration_tests
timeout-minutes: 15