3.13 support for Windows #16752
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Tests | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
schedule: | |
- cron: '5 1 * * *' # every day at 01:05 | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
permissions: | |
contents: read | |
jobs: | |
lint: | |
timeout-minutes: 10 | |
runs-on: ${{ matrix.os }} | |
env: | |
DVC_NO_ANALYTICS: true | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.13' | |
- uses: astral-sh/setup-uv@v5 | |
with: | |
enable-cache: true | |
cache-dependency-glob: pyproject.toml | |
- run: uv pip install -e ".[dev]" --system | |
env: | |
UV_LINK_MODE: ${{ runner.os == 'Windows' && 'symlink' || 'hardlink' }} | |
- name: Cache mypy | |
uses: actions/cache@v4 | |
with: | |
path: .mypy_cache | |
key: mypy-${{ runner.os }}-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }} | |
- uses: pre-commit/[email protected] | |
tests: | |
timeout-minutes: 20 | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest] | |
pyv: ["3.9", "3.10", "3.11", "3.12", "3.13"] | |
include: | |
- os: windows-latest | |
pyv: "3.9" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 1" | |
- os: windows-latest | |
pyv: "3.9" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 2" | |
- os: windows-latest | |
pyv: "3.9" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 3" | |
- os: windows-latest | |
pyv: "3.9" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 4" | |
- os: windows-latest | |
pyv: "3.10" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 1" | |
- os: windows-latest | |
pyv: "3.10" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 2" | |
- os: windows-latest | |
pyv: "3.10" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 3" | |
- os: windows-latest | |
pyv: "3.10" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 4" | |
- os: windows-latest | |
pyv: "3.11" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 1" | |
- os: windows-latest | |
pyv: "3.11" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 2" | |
- os: windows-latest | |
pyv: "3.11" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 3" | |
- os: windows-latest | |
pyv: "3.11" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 4" | |
- os: windows-latest | |
pyv: "3.12" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 1" | |
- os: windows-latest | |
pyv: "3.12" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 2" | |
- os: windows-latest | |
pyv: "3.12" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 3" | |
- os: windows-latest | |
pyv: "3.12" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 4" | |
- os: windows-latest | |
pyv: "3.13" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 1" | |
- os: windows-latest | |
pyv: "3.13" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 2" | |
- os: windows-latest | |
pyv: "3.13" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 3" | |
- os: windows-latest | |
pyv: "3.13" | |
pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 4" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.pyv }} | |
- uses: astral-sh/setup-uv@v5 | |
with: | |
enable-cache: true | |
cache-dependency-glob: pyproject.toml | |
cache-suffix: ${{ matrix.pyv }} | |
- run: uv pip install -e ".[dev]" pytest-split --system | |
env: | |
UV_LINK_MODE: ${{ runner.os == 'Windows' && 'symlink' || 'hardlink' }} | |
- name: run tests | |
timeout-minutes: 40 | |
env: | |
PYTHONUTF8: 1 | |
run: > | |
pytest ${{ matrix.pytestargs }} -n=logical --dist=worksteal --timeout=300 --durations=0 | |
--cov --cov-report=xml --cov-report=term --durations-path=./.github/.test_durations | |
- name: upload coverage report | |
uses: codecov/codecov-action@v5 | |
with: | |
file: ./coverage.xml | |
fail_ci_if_error: false | |
check: | |
if: always() | |
needs: [tests] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: re-actors/alls-green@release/v1 | |
with: | |
jobs: ${{ toJSON(needs) }} | |
notify: | |
if: github.ref == 'refs/heads/main' && failure() | |
needs: [tests] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Slack Notification | |
uses: rtCamp/[email protected] | |
env: | |
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} | |
SLACK_COLOR: ${{ job.status }} | |
SLACK_MESSAGE: 'CI Failed on main :boom:' | |
SLACK_TITLE: CI Status | |
SLACK_USERNAME: DVC-CI |