Development and pull requests

October 6, 2025 · View on GitHub

We appreciate any contribution to the Geti™ SDK, whether it's in the form of a Pull Request, Feature Request or general comment/issue that you found. For feature requests and issues, please feel free to create a GitHub Issue in this repository.

Development and pull requests

To set up your development environment, please follow the steps below:

  1. Clone the repository or a fork (for external contributors):

    git clone https://github.com/openvinotoolkit/geti-sdk.git
    cd geti-sdk
    
  2. Checkout the desired branch or commit based off the main branch.

  3. Install uv following the official uv documentation.

  4. Set up the development environment with all dependencies:

    uv sync --all-extras
    
  5. Make sure that git lfs is configured for your Git account, by following the steps here. Git LFS (Large File Storage) is used in this repo to manage certain data files used in the tests.

  6. Run git lfs pull to download the test data.

  7. Verify that the integration tests now run locally by executing pytest tests/integration

  8. Set up the pre-commit hooks in the repo by running pre-commit install. Several pre-commit hooks are used in the repo to lint and format the code. The pre-commit install command sets up all of these hooks so that the checks will be performed on each commit you make.

You should now be ready to make changes, run the SDK integration tests and create a Pull Request!

Testing your code

More details about the tests can be found in the readme for the test suite. If your changes require updating the tests or the test data, please refer to that document.

Security

To ensure our codebase remains secure, we leverage GitHub Actions for continuous security scanning (on PR and periodically) with the following tools:

  • CodeQL: static analysis tool to check Python code and GitHub Actions workflows
  • Semgrep: static analysis tool to check Python code; ML-specific Semgrep rules developed by Trail of Bits are used
  • Bandit: Static analysis tool to check Python code
  • Zizmor: Static analysis tool to check GitHub Actions workflows
  • Trivy: Check misconfigurations and detect security issues in dependencies
ToolPre-commitPR-checksPeriodic
CodeQL
Semgrep
Bandit
Zizmor
Trivy
Suppressing False Positives

If necessary, to suppress false positives, add inline comment with specific syntax. Please also add a comment explaining why you decided to disable a rule or provide a risk-acceptance reason.

Bandit

Findings can be ignored inline with # nosec BXXX comments.

import subprocess # nosec B404 # this is actually fine

Details in Bandit docs.

Zizmor

Findings can be ignored inline with # zizmor: ignore[rulename] comments.

uses: actions/checkout@v3 # zizmor: ignore[artipacked] this is actually fine

Details in Zizmor docs.

Semgrep

Findings can be ignored inline with # nosemgrep: rule-id comments.

    # nosemgrep: python.lang.security.audit.dangerous-system-call.dangerous-system-call # this is actually fine
    r = os.system(' '.join(command))

Details in Semgrep docs.