Skip to content
112 changes: 61 additions & 51 deletions .github/workflows/lib-lint-and-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ on:
push:
branches:
- develop
- releases/**
- release/**
tags:
- "v*"
pull_request:
merge_group:
branches:
- develop
- releases/**
- release/**
workflow_dispatch: # run on request (no need for PR)

permissions: {} # No permissions by default
Expand Down Expand Up @@ -66,21 +66,28 @@ jobs:
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: Set up Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0

- name: Install uv and set the python version
uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
with:
enable-cache: false
python-version: "3.12"
- name: Install tox
version: "0.8.15"

- name: Installing dependencies
working-directory: library
run: |
pip install '.[dev]'
- name: Code quality checks
run: uv sync --locked --all-extras --no-extra xpu --dev

- name: Run pre-commit checks
working-directory: library
run: tox r -vv -e pre-commit
run: uv run pre-commit run --all-files

Unit-Test:
runs-on: [self-hosted, linux, x64, dev, dmount]
permissions:
contents: read
# The id-token permission is required by Codecov to use OIDC
id-token: write
needs:
- Code-Quality-Checks
- check_paths
Expand All @@ -89,52 +96,41 @@ jobs:
strategy:
fail-fast: false
matrix:
include:
- python-version: "3.12"
tox-env: "py312"
- python-version: "3.11"
tox-env: "py311"
python-version: ["3.11", "3.12"]
name: Unit-Test-with-Python${{ matrix.python-version }}
steps:
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: Install Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0

- name: Install uv and set the python version
uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
with:
enable-cache: false
python-version: ${{ matrix.python-version }}
- name: Install tox
version: "0.8.15"

- name: Installing dependencies
Copy link

Copilot AI Oct 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The --no-extra xpu flag excludes the xpu extra, but according to the pyproject.toml conflicts configuration, xpu and cuda extras conflict with each other. Consider documenting why xpu is explicitly excluded or verify that the conflicts configuration handles this correctly.

Suggested change
- name: Installing dependencies
- name: Installing dependencies
# Exclude the 'xpu' extra because 'xpu' and 'cuda' extras conflict in pyproject.toml.
# This ensures that only 'cuda' dependencies are installed for this test matrix.

Copilot uses AI. Check for mistakes.

working-directory: library
run: |
pip install '.[dev]'
- name: Run unit test
run: uv sync --locked --all-extras --no-extra xpu --dev

- name: Unit testing
working-directory: library
run: tox r -vv -e unit-test-${{ matrix.tox-env }}
run: uv run pytest tests/unit --cov --cov-report=xml
Copy link

Copilot AI Oct 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pytest command is missing the working directory specification. The command should include working-directory: library or use an explicit path like library/tests/unit to ensure tests run from the correct location.

Suggested change
run: uv run pytest tests/unit --cov --cov-report=xml
run: uv run pytest tests/unit --cov --cov-report=xml
working-directory: library

Copilot uses AI. Check for mistakes.


- name: Upload coverage reports to Codecov
working-directory: library
run: |
# If the workflow is triggered from PR then it gets the commit id from the PR.
# else it uses the commit id of the latest commit. This is because the commit
# of the checked-out branch/commit does not exist in the tree as it is grafted.
# Also note: GitHub does not pass secrets to pipelines triggered from a fork.
# This means that upload will fail for PRs from forks.
if [ -n "${{ github.event.pull_request.head.sha }}" ]
then
COMMIT_ID=${{ github.event.pull_request.head.sha }}
else
COMMIT_ID=${{ github.sha }}
fi
# current version of codecov-action does not support uploading reports through the proxy
# so we use the latest version of codecov uploader binary
curl -Os https://uploader.codecov.io/latest/linux/codecov
chmod +x codecov
./codecov -t ${{ secrets.CODECOV_TOKEN }} --sha $COMMIT_ID -U $HTTP_PROXY -f .tox/coverage_unit-test-${{ matrix.tox-env }}.xml -F ${{ matrix.tox-env }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
with:
directory: library
flags: coverage_unit-test_Python-${{ matrix.python-version }}
use_oidc: true

Integration-Test:
if: |
github.event.pull_request.draft == false &&
!(startsWith(github.event.pull_request.title, '[WIP]')) &&
needs.check_paths.outputs.run_workflow == 'true'
#if: |
# github.event.pull_request.draft == false &&
# !(startsWith(github.event.pull_request.title, '[WIP]')) &&
# needs.check_paths.outputs.run_workflow == 'true'
runs-on: [self-hosted, linux, x64, dev, dmount]
permissions:
contents: read
Expand All @@ -146,30 +142,44 @@ jobs:
matrix:
include:
- task: "multi_class_cls"
python-version: "3.12"
- task: "multi_label_cls"
python-version: "3.12"
- task: "h_label_cls"
python-version: "3.12"
- task: "anomaly"
python-version: "3.12"
- task: "keypoint_detection"
python-version: "3.12"
- task: "detection"
python-version: "3.12"
- task: "instance_segmentation"
python-version: "3.12"
- task: "semantic_segmentation"
python-version: "3.12"
name: Integration-Test-${{ matrix.task }}-py312
steps:
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: Install Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0

- name: Install uv and set the python version
uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
with:
python-version: "3.12"
- name: Install tox
enable-cache: false
python-version: ${{ matrix.python-version }}
version: "0.8.15"

- name: Installing dependencies
working-directory: library
run: |
pip install '.[dev]'
- name: Run Integration Test
run: uv sync --locked --all-extras --no-extra xpu --dev

- name: Integration testing
working-directory: library
run: tox r -vv -e integration-test-${{ matrix.task }} -- --task ${{ matrix.task }} --run-category-only
env:
CUBLAS_WORKSPACE_CONFIG: ":4096:8"
run: uv run pytest tests/integration -ra --showlocals --csv=${{ matrix.task }}_Python-${{ matrix.python-version }}.csv --task ${{ matrix.task }} --open-subprocess --run-category-only

required_check:
name: Required Check lib-lint-and-test
Expand Down
14 changes: 9 additions & 5 deletions library/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ name = "otx"
dynamic = ["version"]
description = "OpenVINO™ Training Extensions: Train, Evaluate, Optimize, Deploy Computer Vision Models via OpenVINO™"
readme = "README.md"
requires-python = ">=3.10"
requires-python = ">=3.10,<3.13"
license = {file = "LICENSE"}
authors = [
{ name = "OpenVINO™ Training Extensions Contributors" },
Expand All @@ -39,8 +39,7 @@ dependencies = [
"einops==0.8.1",
"decord==0.6.0",
"typeguard>=4.3,<4.5",
# TODO(ashwinvaidya17): https://github.com/openvinotoolkit/anomalib/issues/2126
"setuptools<70",
"setuptools",
"lightning==2.4.0",
"torchmetrics==1.6.0",
"pytorchcv==0.0.67",
Expand Down Expand Up @@ -69,6 +68,7 @@ dev = [
"pytest-csv",
"pytest-cov",
"onnxruntime==1.21.1",
"wandb",
]

cuda = ["torch==2.8.0",
Expand All @@ -82,7 +82,7 @@ xpu = [

docs = [
"furo",
"myst-parser",
"myst-parser>=2.0.0",
"sphinx==7.2.6",
"pydata-sphinx-theme==0.12.0",
"sphinx-tabs",
Expand All @@ -92,7 +92,6 @@ docs = [
"sphinx-autoapi",
"sphinxemoji",
"nbsphinx",
"myst-parser>=2.0.0",
"linkify-it-py",
]

Expand All @@ -115,6 +114,11 @@ otx = "otx.cli:main"
Documentation = "https://open-edge-platform.github.io/training_extensions/"
Repository = "https://github.com/open-edge-platform/training_extensions/"

[tool.uv]
conflicts = [
[{extra="xpu"}, {extra="cuda"}]
]

[tool.uv.sources]
torch = [
{ index = "torch-xpu", extra = "xpu"},
Expand Down
Loading
Loading