# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license # Continuous Integration (CI) GitHub Actions tests name: Actions CI on: push: branches: [main] pull_request: branches: [main] schedule: - cron: "0 0 * * *" # Runs at 00:00 UTC every day permissions: contents: read # Read code in PRs id-token: write # Required for Codecov OIDC uploads jobs: Setup-uv-Windows: runs-on: windows-latest steps: - uses: actions/checkout@v7 - uses: ./setup-uv with: python-version: "3.14" activate-environment: true enable-cache: true cache-dependency-glob: "pyproject.toml" - run: | uv --version python -c "import os, sys; assert sys.version_info[:2] == (3, 14); assert os.environ['VIRTUAL_ENV'].endswith(r'\.venv')" Test: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest] # does not work with windows-latest python-version: ["3.8", "3.14"] steps: - uses: actions/checkout@v7 - uses: ./setup-uv with: python-version: ${{ matrix.python-version }} activate-environment: true enable-cache: true cache-dependency-glob: "pyproject.toml" - name: Install dependencies run: | uv pip install -e ".[dev]" - name: Run Python tests uses: ultralytics/actions/retry@main with: retries: 1 # Retry once after initial attempt run: | python -m pytest tests -v --cov=actions --cov-report=xml:coverage.xml - name: Run CLI tests run: | ultralytics-actions-info - name: Upload coverage to Codecov continue-on-error: true uses: codecov/codecov-action@v7 with: files: ./coverage.xml disable_search: true plugins: noop use_oidc: true fail_ci_if_error: false