mirror of
https://github.com/microsoft/semantic-kernel.git
synced 2026-10-12 02:19:06 +00:00
### Motivation and Context <!-- Thank you for your contribution to the semantic-kernel repo! Please help reviewers and future users, providing the following information: 1. Why is this change required? 2. What problem does it solve? 3. What scenario does it contribute to? 4. If it fixes an open issue, please link to the issue here. --> Switches from poetry to uv much faster and easier lock management easier maintenance of pyproject.toml fixes: #6584 fixes: #8326 ### Description <!-- Describe your changes, the overall approach, the underlying design. These notes will help understanding how your code works. Thanks! --> ### Contribution Checklist <!-- Before submitting this PR, please make sure: --> - [x] The code builds clean without any errors or warnings - [x] The PR follows the [SK Contribution Guidelines](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md) and the [pre-submission formatting script](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md#development-scripts) raises no violations - [x] All unit tests pass, and I have added new tests where possible - [ ] I didn't break anyone 😄
122 lines
4.1 KiB
YAML
122 lines
4.1 KiB
YAML
name: Python Unit Tests
|
|
|
|
on:
|
|
pull_request:
|
|
branches: ["main", "feature*"]
|
|
paths:
|
|
- "python/**"
|
|
env:
|
|
# Configure a constant location for the uv cache
|
|
UV_CACHE_DIR: /tmp/.uv-cache
|
|
|
|
jobs:
|
|
python-unit-tests:
|
|
name: Python Unit Tests
|
|
runs-on: ${{ matrix.os }}
|
|
continue-on-error: ${{ matrix.experimental }}
|
|
strategy:
|
|
fail-fast: true
|
|
matrix:
|
|
python-version: ["3.10", "3.11", "3.12"]
|
|
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
experimental: [false]
|
|
include:
|
|
- python-version: "3.13.0-beta.4"
|
|
os: "ubuntu-latest"
|
|
experimental: true
|
|
permissions:
|
|
contents: write
|
|
defaults:
|
|
run:
|
|
working-directory: python
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Set up uv
|
|
if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' }}
|
|
run: curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
- name: Set up uv
|
|
if: ${{ matrix.os == 'windows-latest' }}
|
|
run: irm https://astral.sh/uv/install.ps1 | iex
|
|
shell: powershell
|
|
- name: Set up Python ${{ matrix.python-version }}
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
- name: Restore uv cache
|
|
id: cache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ${{ env.UV_CACHE_DIR }}
|
|
key: uv-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/uv.lock') }}
|
|
- name: Install the project
|
|
run: uv sync --all-extras --dev
|
|
- name: Test with pytest
|
|
run: uv run pytest --junitxml=pytest.xml ./tests/unit
|
|
- name: Surface failing tests
|
|
if: always()
|
|
uses: pmeier/pytest-results-action@main
|
|
with:
|
|
# A list of JUnit XML files, directories containing the former, and wildcard
|
|
# patterns to process.
|
|
# See @actions/glob for supported patterns.
|
|
path: python/pytest.xml
|
|
# (Optional) Add a summary of the results at the top of the report
|
|
summary: true
|
|
# (Optional) Select which results should be included in the report.
|
|
# Follows the same syntax as `pytest -r`
|
|
display-options: fEX
|
|
# (Optional) Fail the workflow if no JUnit XML was found.
|
|
fail-on-empty: true
|
|
# (Optional) Title of the test results section in the workflow summary
|
|
title: Test results
|
|
- name: Minimize uv cache
|
|
run: uv cache prune --ci
|
|
python-test-coverage:
|
|
name: Python Test Coverage
|
|
runs-on: [ubuntu-latest]
|
|
continue-on-error: true
|
|
permissions:
|
|
contents: write
|
|
defaults:
|
|
run:
|
|
working-directory: python
|
|
env:
|
|
PYTHON_VERSION: "3.10"
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Setup filename variables
|
|
run: echo "FILE_ID=${{ github.event.number }}" >> $GITHUB_ENV
|
|
- name: Set up uv
|
|
run: curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
- name: Set up Python ${{ env.PYTHON_VERSION }}
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: ${{ env.PYTHON_VERSION }}
|
|
- name: Restore uv cache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ${{ env.UV_CACHE_DIR }}
|
|
key: uv-${{ runner.os }}-${{ env.PYTHON_VERSION }}-${{ hashFiles('**/uv.lock') }}
|
|
- name: Install the project
|
|
run: uv sync --all-extras --dev
|
|
- name: Test with pytest
|
|
run: uv run pytest -q --junitxml=pytest.xml --cov=semantic_kernel --cov-report=term-missing:skip-covered ./tests/unit | tee python-coverage.txt
|
|
- name: Upload coverage
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: python-coverage-${{ env.FILE_ID }}.txt
|
|
path: python/python-coverage.txt
|
|
overwrite: true
|
|
retention-days: 1
|
|
- name: Upload pytest.xml
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: pytest-${{ env.FILE_ID }}.xml
|
|
path: python/pytest.xml
|
|
overwrite: true
|
|
retention-days: 1
|
|
- name: Minimize uv cache
|
|
run: uv cache prune --ci
|