Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
136 changes: 5 additions & 131 deletions .github/workflows/pre_commit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,49 +14,6 @@ concurrency:
cancel-in-progress: true

jobs:
code_quality_checks:
runs-on: ubuntu-latest
steps:
- name: Harden the runner
uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4
with:
disable-sudo: true
disable-telemetry: true
egress-policy: block
allowed-endpoints: >
files.pythonhosted.org:443
github.com:443
nodejs.org:443
pypi.org:443
raw.githubusercontent.com:443
registry.npmjs.org:443
releases.astral.sh:443

- &checkout
name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version-file: ".python-version"

- name: Install uv
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
enable-cache: false
version: "0.11.13"

- name: Install dependencies
run: |
uv --directory model_api sync --locked --all-extras --group docs
uv --directory model_converter sync --locked

- name: Run pre-commit checks
run: uvx pre-commit run --all-files

unit-functional-tests:
strategy:
fail-fast: false
Expand All @@ -74,28 +31,11 @@ jobs:
python-version: "3.14" # started to fail with "Windows fatal exception: access violation"
runs-on: ${{ matrix.os }}
steps:
- name: Harden the runner
uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4
- &checkout
name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
disable-sudo: true
disable-telemetry: true
egress-policy: block
allowed-endpoints: >
dc.services.visualstudio.com:443
download.pytorch.org:443
files.pythonhosted.org:443
github.com:443
incoming.telemetry.mozilla.org:443
ocsp.digicert.com:443
ocsp.sectigo.com:443
pypi.org:443
raw.githubusercontent.com:443
releases.astral.sh:443
settings-win.data.microsoft.com:443
storage.geti.intel.com:443
telemetry-incoming.r53-2.services.mozilla.com:443

- *checkout
persist-credentials: false

- &matrix-setup-uv
name: Install uv
Expand All @@ -108,84 +48,18 @@ jobs:
- name: Install dependencies
run: uv --directory model_api sync --locked --group tests --extra-index-url https://download.pytorch.org/whl/cpu

- name: Run model_api unit tests
run: uv --directory model_api run pytest tests/unit --cov

- name: Run model_converter unit tests
run: uv --directory model_converter run --group tests pytest tests/unit --cov

- name: Prepare test data
run: |
uv --directory model_api run python tests/functional/download_models.py -d data -j tests/functional/public_scope.json -l

- name: Run test
run: |
uv --directory model_api run pytest --data=./data tests/functional

serving_api-tests:
strategy:
fail-fast: false
matrix:
os:
- "ubuntu-latest"
python-version:
- "3.11"
- "3.12"
- "3.13"
- "3.14"
runs-on: ${{ matrix.os }}
steps:
- name: Harden the runner
uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4
with:
disable-sudo: true
disable-telemetry: true
egress-policy: block
allowed-endpoints: >
auth.docker.io:443
download.pytorch.org:443
dseasb33srnrn.cloudfront.net:443
files.pythonhosted.org:443
github.com:443
production.cloudflare.docker.com:443
production.cloudfront.docker.com:443
pypi.org:443
raw.githubusercontent.com:443
registry-1.docker.io:443
releases.astral.sh:443
storage.geti.intel.com:443
index.docker.io:443
- name: Set up docker for macOS
if: startsWith(matrix.os, 'macos-1')
run: |
brew install colima docker
colima start

- *checkout

- *matrix-setup-uv

- name: Install dependencies
run: uv --directory model_api sync --locked --group tests --extra ovms --extra-index-url https://download.pytorch.org/whl/cpu

- name: Prepare test data
run: |
uv --directory model_api run python tests/functional/download_models.py -d data -j tests/functional/serving_scope.json -l

- name: serving_api
run: |
uv --directory model_api run python -c "from model_api.models import Model; Model.create_model('./data/otx_models/ssd-card-detection.xml').save('ovms_models/ssd-card-detection/1/ssd-card-detection.xml')"
docker run -d --rm -v $GITHUB_WORKSPACE/model_api/ovms_models/:/models -p 8000:8000 openvino/model_server:latest --model_path /models/ssd-card-detection/ --model_name ssd-card-detection --rest_port 8000 --log_level DEBUG --target_device CPU
echo "Waiting for OVMS to be ready..."
timeout 120 bash -c 'until curl -sf http://localhost:8000/v2/health/ready; do sleep 3; done'
uv --directory model_api run python examples/serving_api/run.py data/coco128/images/train2017/000000000009.jpg # detects 4 objects
uv --directory model_api run pytest --data=./data tests/functional -sx

pre-commit-result:
runs-on: ubuntu-latest
needs:
- code_quality_checks
- unit-functional-tests
- serving_api-tests
if: always()
steps:
- name: All tests ok
Expand Down
14 changes: 14 additions & 0 deletions model_api/tests/functional/test_inference.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import ast
import json
import operator
import platform
import subprocess

Check notice

Code scanning / Bandit

Consider possible security implications associated with the subprocess module. Low test

Consider possible security implications associated with the subprocess module.
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
from pathlib import Path

import cv2
Expand Down Expand Up @@ -85,6 +87,8 @@
configuration=None,
dump: bool = False,
):
print(f"Running tests on platform\n\n{get_processor_name()}\n\n")

if model_path.endswith(".onnx") and force_onnx_adapter:
wrapper_type = model_type.get_model_class(
load_parameters_from_onnx(onnx.load(model_path))["model_info"]["model_type"],
Expand Down Expand Up @@ -592,3 +596,13 @@
visualizer.save(image, result, path)
except (TypeError, ValueError) as e:
print(f"Cannot save the output visualization for {name}. Error: {e}")


def get_processor_name():
if platform.system() == "Windows":
return platform.processor()
if platform.system() == "Linux":
command = "cat /proc/cpuinfo"
return subprocess.check_output(command, shell=True).decode().strip() # noqa: S602

Check failure

Code scanning / Bandit

subprocess call with shell=True identified, security issue. High test

subprocess call with shell=True identified, security issue.
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed

return ""
Loading