Skip to content
Merged
Show file tree
Hide file tree
Changes from 82 commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
bc9e548
Updated, streamlined pythong bindings
aljazdu Jul 10, 2026
df49daa
Merge pull request #1892 from luxonis/main
aljazkonec1 Jul 13, 2026
1501d64
Merge branch 'develop' into update/bindings
aljazdu Jul 13, 2026
b9d08c0
Remove inherited Buffer bindings (#1877)
asahtik Jul 13, 2026
5d69e8c
Merge pull request #1889 from luxonis/update/bindings
aljazdu Jul 13, 2026
84cfbd6
Added H.265 encoding to multi_device_frame_sync
TamseSaso Jul 15, 2026
47cac8e
Add resolution perser from getConnectedCameraFeatures
MaticTonin Jul 16, 2026
ab1d582
Adding printouts for better unserstanding
MaticTonin Jul 16, 2026
a30f5f6
Moved backgroud class to Head's Metadata
aljazdu Jul 20, 2026
20ac337
Added strides to Head's Metadata
aljazdu Jul 20, 2026
3055bb7
Merge pull request #1903 from luxonis/feat/head_metadata_update
aljazdu Jul 21, 2026
45d4141
StereoDepth platform docstrings (#1902)
asahtik Jul 21, 2026
202304f
Merge pull request #1901 from luxonis/bugfix/cam_test_lite_support
aljazkonec1 Jul 21, 2026
3727e57
fix: colorization
CasualMathEnjoyer Jul 21, 2026
3d6eebb
Remove calibrationHandler from Rectifiacation (#1904)
JakubFara Jul 22, 2026
d0bd6d5
Added improvements to Depthai Python CI/CD workflow
aljazdu Jul 22, 2026
c0ddf24
CodeRabbit Fixes
aljazdu Jul 22, 2026
b0e2878
MacOS Intel builds will be triggered for develop branch as well
aljazdu Jul 22, 2026
af87b74
fix: colorization in C++ ToF examples
CasualMathEnjoyer Jul 22, 2026
a8d1538
fix: drop unnecessary colorization comments in Python ToF examples
CasualMathEnjoyer Jul 22, 2026
b9b3592
Rewrite getStereoPairs (#1848)
JakubFara Jul 23, 2026
f8d713c
remove comments
CasualMathEnjoyer Jul 23, 2026
079e80e
fix: unify ToF examples at 30 FPS and drop stray comments
CasualMathEnjoyer Jul 23, 2026
5374c08
fix: align C++ sync threshold precision with Python example
CasualMathEnjoyer Jul 23, 2026
d6d9f3d
Bump vcpkg
aljazdu Jul 23, 2026
bd2120c
Merge pull request #1894 from luxonis/update/python_CICD_workflow
aljazdu Jul 24, 2026
7642ddb
Merge pull request #1878 from luxonis/feature/slc_remap_bbox
asahtik Jul 24, 2026
87972ef
Revert "Bump vcpkg"
aljazdu Jul 26, 2026
b3947f2
Bump vcpkg commit
aljazdu Jul 26, 2026
b6d26f5
Specify brew install to opencv 4
aljazdu Jul 26, 2026
7d26745
Merge pull request #1906 from luxonis/fix/tof-examples
CasualMathEnjoyer Jul 27, 2026
2116cd4
Update decodeR1AF used for yolov6r1
aljazdu Jul 27, 2026
93dbb7e
Merge branch 'develop' into fix/decodeR1AF
aljazdu Jul 27, 2026
f896391
Bump RVC4 FW
aljazdu Jul 27, 2026
06b2050
Merge pull request #1908 from luxonis/fix/vcpkg_update
aljazdu Jul 27, 2026
9bf3f5b
Merge pull request #1899 from luxonis/feat/H.265_encoding
aljazkonec1 Jul 27, 2026
bd9fd7a
Align YOLOv6 subtype decoding with RVC2 firmware
aljazdu Jul 28, 2026
6786f22
Merge branch 'develop' into fix/decodeR1AF
aljazdu Jul 28, 2026
d8ce7e6
Merge pull request #1911 from luxonis/fix/decodeR1AF
aljazdu Jul 28, 2026
9e337fd
Resizer undistortion alpha (#1881)
asahtik Jul 28, 2026
77df1d4
reduce imu_gyroscope verbosity
aljazkonec1 Jul 28, 2026
438e28a
Examples print to stdout once per second to reduce verbosity
aljazkonec1 Jul 28, 2026
48ba9f6
TelemetrySharedState installs a fresh state for child processes
aljazkonec1 Jul 28, 2026
8988992
Fix MSVC deprecation error in DeviceNodeCRTP
aljazdu Jul 29, 2026
f2c840c
Merge pull request #1916 from luxonis/fix/msvc-deprecated-node-warning
aljazdu Jul 30, 2026
a4cea4e
Added PR HIL testing workflows
aljazdu Jul 30, 2026
a51aebb
Add RVC4 VideoEncoder latency regression coverage
Jul 30, 2026
6181a81
A full run of HIL tests will now be triggered on a schedule
aljazdu Jul 30, 2026
7eec2d8
Bump FW
Jul 30, 2026
dab5d8c
Added nightly test workflows. Moved fsync and ptp tests to nightly runs.
aljazdu Jul 31, 2026
60914a3
Updated pull_request triggers for main.workflow.yml
aljazdu Jul 31, 2026
30d314e
Last corner index is 3 and not 2. Added test.
aljazkonec1 Aug 3, 2026
4b452d2
Merge pull request #1924 from luxonis/fix/image_manip_corner_indexes
aljazkonec1 Aug 3, 2026
9377bcf
Merge pull request #1914 from luxonis/fix/telemetry-fork-subprocess
aljazkonec1 Aug 3, 2026
059de3b
recording now includes
aljazkonec1 Aug 3, 2026
e03b569
Merge pull request #1925 from luxonis/fix/neural_depth_node_test_Reco…
aljazkonec1 Aug 4, 2026
a110652
PR Test runs can now be triggered using testable label
aljazdu Aug 5, 2026
87b7031
Renamed weekly test workflow
aljazdu Aug 5, 2026
1fa2146
Pull request workflow now uses test_child.yml instead of duplicating …
aljazdu Aug 6, 2026
f895091
Minor fixes to the testing workflows
aljazdu Aug 6, 2026
d191947
Feat: Beta namespace (#1919)
aljazkonec1 Aug 7, 2026
8074c0e
clangformat (#1932)
aljazkonec1 Aug 10, 2026
981b438
Merge remote-tracking branch 'origin/develop' into feat/videoencoder_…
Aug 10, 2026
462a998
Bump FW
Aug 10, 2026
dca98e4
Bump FW
Aug 10, 2026
cd30a43
Merge pull request #1921 from luxonis/feat/videoencoder_improvements
moratom Aug 10, 2026
e10c030
examples: migrate examples from StereoDepth to unified Depth node (#1…
devin-ai-integration[bot] Aug 10, 2026
f16db43
Merge pull request #1926 from luxonis/feature/hil_testing_overhaul
aljazdu Aug 11, 2026
fcd9684
Feature/colorize depth frame (#1909)
JakubFara Aug 11, 2026
07c41b7
Fix four points transform (#1933)
asahtik Aug 12, 2026
4810315
Added LUXONIS_TELEMETRY_CORRELATION_ID env variable support
Aug 12, 2026
9bca257
Reallocate pool in ImageManip if running low on frames (#1929)
asahtik Aug 12, 2026
2d691f3
Merge pull request #1938 from luxonis/telemetry_chain
aljazkonec1 Aug 12, 2026
1d27132
enforced transform validation in stereo_depth_remap.cppand reduced lo…
ViacheslavTelelyukhin Aug 12, 2026
29aa1f0
Bugfix/detection parser test stability (#1939)
ViacheslavTelelyukhin Aug 13, 2026
68bca7c
Update Bootloader (#1936)
aljazkonec1 Aug 13, 2026
e2b0ea8
Bump depthai version
aljazkonec1 Aug 13, 2026
a9e1a16
Bump FW to 3.9.0
aljazkonec1 Aug 13, 2026
30daf33
fix tof minimal examples and bump device side
aljazkonec1 Aug 13, 2026
5c9ed71
pin chocolately opencv install to version 4.13.0
aljazkonec1 Aug 13, 2026
8ed51dd
revert bindings regression from bc9e548d2d992ea45ed66b5d835cecea0d61b835
aljazkonec1 Aug 14, 2026
0286383
Bump pybind fork
aljazkonec1 Aug 14, 2026
31887e3
Bump FW to release versions
aljazkonec1 Aug 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
28 changes: 28 additions & 0 deletions .github/workflows/hil_testing_nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: DepthAI Core HIL Testing Nightly

on:
workflow_dispatch:

permissions:
contents: read

# Only allow latest nightly run on same branch to be tested
concurrency:
group: ci-nightly-tests-${{ github.ref }}-1
cancel-in-progress: true

jobs:
run_ptp_fsync_tests:
uses: ./.github/workflows/test_child.yml
with:
flavor: "vanilla"
job_prefix: "vanilla-nightly"
run_standard_tests: false
luxonis_os_versions_to_test: "[]"
luxonis_os_versions_to_test_fsync: "['1.33.0']"
luxonis_os_versions_to_test_ptp: "['1.33.0']"
secrets:
CONTAINER_REGISTRY: ${{ secrets.CONTAINER_REGISTRY }}
HIL_PAT_TOKEN: ${{ secrets.HIL_PAT_TOKEN }}
CI_TELEMETRY_URL: ${{ secrets.CI_TELEMETRY_URL }}
CI_TELEMETRY_API_KEY: ${{ secrets.CI_TELEMETRY_API_KEY }}
62 changes: 62 additions & 0 deletions .github/workflows/hil_testing_pull_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: DepthAI Core HIL Testing PR

# Trigger on submitted reviews or when manually marked as testable
on:
pull_request_review:
types: [submitted]
pull_request:
types: [labeled]

permissions:
contents: read

# Cancel older runs for the same PR and trigger.
concurrency:
group: depthai-core-pr-testing-${{ github.event.pull_request.number }}-${{ github.event.review.state || github.event.label.name }}
cancel-in-progress: true

jobs:
run_pr_tests:
name: Run Linux PR HIL tests
if: >
(
github.event.review.state == 'approved' ||
(github.event_name == 'pull_request' && github.event.label.name == 'testable')
) &&
(
github.event.pull_request.base.ref == 'main' ||
github.event.pull_request.base.ref == 'develop'
)
uses: ./.github/workflows/test_child.yml
with:
flavor: "vanilla"
job_prefix: "pr-approved"
luxonis_os_versions_to_test: "['1.33.0']"
secrets:
CONTAINER_REGISTRY: ${{ secrets.CONTAINER_REGISTRY }}
HIL_PAT_TOKEN: ${{ secrets.HIL_PAT_TOKEN }}
CI_TELEMETRY_URL: ${{ secrets.CI_TELEMETRY_URL }}
CI_TELEMETRY_API_KEY: ${{ secrets.CI_TELEMETRY_API_KEY }}

required_hil_test_report:
name: Required HIL test report
needs: [run_pr_tests]
if: >
always() &&
(
github.event.review.state == 'approved' ||
(github.event_name == 'pull_request' && github.event.label.name == 'testable')
) &&
(
github.event.pull_request.base.ref == 'main' ||
github.event.pull_request.base.ref == 'develop'
)
runs-on: ubuntu-latest
steps:
- name: Check required test results
run: |
if [[ "${{ needs.run_pr_tests.result }}" != "success" ]]; then
echo "Required HIL tests failed or did not complete."
echo "run_pr_tests: ${{ needs.run_pr_tests.result }}"
exit 1
fi
45 changes: 45 additions & 0 deletions .github/workflows/hil_testing_schedule_develop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: DepthAI Core HIL Testing Develop Schedule

on:
schedule:
- cron: '0 1 * * *' # Every day at 01:00 UTC
- cron: '0 3 * * 6' # Saturdays at 03:00 UTC

permissions:
actions: write

jobs:
dispatch:
runs-on: ubuntu-latest
steps:
- name: Trigger develop HIL testing
if: github.event.schedule == '0 3 * * 6'
env:
GH_TOKEN: ${{ github.token }}
run: gh workflow run hil_testing_weekly.yml --repo "$GITHUB_REPOSITORY" --ref develop

- name: Trigger nightly develop HIL testing
if: github.event.schedule == '0 1 * * *'
env:
GH_TOKEN: ${{ github.token }}
run: gh workflow run hil_testing_nightly.yml --repo "$GITHUB_REPOSITORY" --ref develop

- name: Notify Slack
if: github.event.schedule == '0 3 * * 6'
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_BOT_CHANNEL_ID: ${{ secrets.SLACK_BOT_CHANNEL_ID_TEST }}
SCHEDULER_RUN_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
run: |
MESSAGE="*Scheduled DepthAI Core HIL tests triggered*
Branch: develop
Workflow: DepthAI Core HIL Testing
Scheduler Run: $SCHEDULER_RUN_URL"
jq -n --arg user_id "$SLACK_BOT_CHANNEL_ID" --arg message "$MESSAGE" \
'{"channel": $user_id, "text": $message}' > payload.json
curl -X POST https://slack.com/api/chat.postMessage \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-type: application/json" \
--data @payload.json
227 changes: 227 additions & 0 deletions .github/workflows/hil_testing_weekly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
name: DepthAI Core HIL Testing Weekly

on:
workflow_dispatch:
inputs:
test_os:
description: Run Linux, Windows, and macOS tests
type: boolean
default: true
test_replay:
description: Run replay tests
type: boolean
default: true
test_sanitizers:
description: Run sanitizer tests
type: boolean
default: true

permissions:
actions: read
contents: read

# Only allow latest run on same branch to be tested
concurrency:
group: ci-tests-${{ github.ref }}-1
cancel-in-progress: true

jobs:
select_tests:
runs-on: ubuntu-latest
outputs:
test_all: ${{ steps.selection.outputs.test_all }}
steps:
- id: selection
run: echo "test_all=${{ !inputs.test_os && !inputs.test_replay && !inputs.test_sanitizers }}" >> "$GITHUB_OUTPUT"

run_vanilla_tests:
needs: select_tests
if: inputs.test_os || needs.select_tests.outputs.test_all == 'true'
uses: ./.github/workflows/test_child.yml
with:
flavor: "vanilla"
luxonis_os_versions_to_test: "['1.20.5','1.27.1','1.33.0']"
luxonis_os_versions_to_test_rgb: "['1.33.0']"
luxonis_os_versions_to_test_usb: "['1.33.0']"
secrets:
CONTAINER_REGISTRY: ${{ secrets.CONTAINER_REGISTRY }}
HIL_PAT_TOKEN: ${{ secrets.HIL_PAT_TOKEN }}
CI_TELEMETRY_URL: ${{ secrets.CI_TELEMETRY_URL }}
CI_TELEMETRY_API_KEY: ${{ secrets.CI_TELEMETRY_API_KEY }}

run_tsan_tests:
needs: select_tests
if: inputs.test_sanitizers || needs.select_tests.outputs.test_all == 'true'
uses: ./.github/workflows/test_child.yml
with:
flavor: "tsan"
luxonis_os_versions_to_test: "['1.33.0']"
secrets:
CONTAINER_REGISTRY: ${{ secrets.CONTAINER_REGISTRY }}
HIL_PAT_TOKEN: ${{ secrets.HIL_PAT_TOKEN }}
CI_TELEMETRY_URL: ${{ secrets.CI_TELEMETRY_URL }}
CI_TELEMETRY_API_KEY: ${{ secrets.CI_TELEMETRY_API_KEY }}

run_asan-ubsan_tests:
needs: select_tests
if: inputs.test_sanitizers || needs.select_tests.outputs.test_all == 'true'
uses: ./.github/workflows/test_child.yml
with:
flavor: "asan-ubsan"
luxonis_os_versions_to_test: "['1.33.0']"
secrets:
CONTAINER_REGISTRY: ${{ secrets.CONTAINER_REGISTRY }}
HIL_PAT_TOKEN: ${{ secrets.HIL_PAT_TOKEN }}
CI_TELEMETRY_URL: ${{ secrets.CI_TELEMETRY_URL }}
CI_TELEMETRY_API_KEY: ${{ secrets.CI_TELEMETRY_API_KEY }}

run_windows_tests:
needs: select_tests
if: inputs.test_os || needs.select_tests.outputs.test_all == 'true'
uses: ./.github/workflows/test_child_windows.yml
with:
luxonis_os_versions_to_test: "['1.33.0']"
luxonis_os_versions_to_test_usb: '["1.33.0"]'
secrets:
CONTAINER_REGISTRY: ${{ secrets.CONTAINER_REGISTRY }}
HIL_PAT_TOKEN: ${{ secrets.HIL_PAT_TOKEN }}
CI_TELEMETRY_URL: ${{ secrets.CI_TELEMETRY_URL }}
CI_TELEMETRY_API_KEY: ${{ secrets.CI_TELEMETRY_API_KEY }}

run_replay_tests:
needs: select_tests
if: inputs.test_replay || needs.select_tests.outputs.test_all == 'true'
uses: ./.github/workflows/test_child.yml
with:
flavor: "vanilla"
job_prefix: "vanilla-replay"
enable_replay_tests: true
rvc2_timeout_minutes: 1440
luxonis_os_versions_to_test: "['1.33.0']"
secrets:
CONTAINER_REGISTRY: ${{ secrets.CONTAINER_REGISTRY }}
HIL_PAT_TOKEN: ${{ secrets.HIL_PAT_TOKEN }}
CI_TELEMETRY_URL: ${{ secrets.CI_TELEMETRY_URL }}
CI_TELEMETRY_API_KEY: ${{ secrets.CI_TELEMETRY_API_KEY }}

run_vanilla_mac_tests:
needs: select_tests
if: inputs.test_os || needs.select_tests.outputs.test_all == 'true'
uses: ./.github/workflows/test_child_mac.yml
with:
flavor: "vanilla"
luxonis_os_versions_to_test: "['1.33.0']"
luxonis_os_versions_to_test_usb: '["1.33.0"]'
secrets:
HIL_PAT_TOKEN: ${{ secrets.HIL_PAT_TOKEN }}
CI_TELEMETRY_URL: ${{ secrets.CI_TELEMETRY_URL }}
CI_TELEMETRY_API_KEY: ${{ secrets.CI_TELEMETRY_API_KEY }}

notify_slack:
needs:
- select_tests
- run_vanilla_tests
- run_tsan_tests
- run_asan-ubsan_tests
- run_windows_tests
- run_replay_tests
- run_vanilla_mac_tests
if: always()
runs-on: ubuntu-latest
steps:
- name: Download JUnit reports
uses: actions/download-artifact@v4
continue-on-error: true
with:
pattern: junit-reports-*
path: junit-reports

- name: Send Slack test summary
continue-on-error: true
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_BOT_CHANNEL_ID: ${{ secrets.SLACK_BOT_CHANNEL_ID_TEST }}
NEEDS_JSON: ${{ toJson(needs) }}
RUN_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
run: |
SUMMARY=$(jq -r '
def job_label:
{
run_vanilla_tests: "Linux",
run_tsan_tests: "TSan",
"run_asan-ubsan_tests": "ASan/UBSan",
run_windows_tests: "Windows",
run_replay_tests: "Replay",
run_vanilla_mac_tests: "macOS"
}[.] // .;

to_entries
| map(select(.key != "select_tests"))
| map("- " + (.key | job_label) + ": `" + .value.result + "`")
| join("\n")
' <<< "$NEEDS_JSON")

FAILED_COUNT=$(jq '[to_entries[].value.result | select(. == "failure" or . == "cancelled")] | length' <<< "$NEEDS_JSON")
CTEST_SUMMARY=$(python3 - <<'PY'
from pathlib import Path
from xml.etree import ElementTree as ET
import re

passed = failed = total = 0
failed_tests = []
summary_re = re.compile(r"Passed=(\d+), Failed=(\d+), Total=(\d+)")

for report in Path("junit-reports").rglob("*.xml"):
root = ET.parse(report).getroot()
for suite in root.findall(".//testsuite"):
for prop in suite.findall("./properties/property"):
if prop.get("name") != "ctest.summary":
continue
match = summary_re.fullmatch(prop.get("value", ""))
if match:
suite_passed, suite_failed, suite_total = map(int, match.groups())
passed += suite_passed
failed += suite_failed
total += suite_total
for case in suite.findall("./testcase"):
if case.find("./failure") is not None:
failed_tests.append(f"{suite.get('name', report.stem)} - {case.get('name', 'unknown')}")

if total == 0:
print("CTest reports: no summaries found")
else:
print(f"CTest totals: {passed} passed, {failed} failed, {total} total")
if failed_tests:
print("Failed tests:")
for test in failed_tests[:10]:
print(f"- {test}")
if len(failed_tests) > 10:
print(f"- ...and {len(failed_tests) - 10} more")
PY
)

if [ "$FAILED_COUNT" -gt 0 ]; then
RESULT="failed"
else
RESULT="passed"
fi

MESSAGE="*DepthAI Core HIL tests finished*
Branch: $GITHUB_REF_NAME
Result: $RESULT
Run: $RUN_URL

$SUMMARY"
if [ -n "$CTEST_SUMMARY" ]; then
MESSAGE="$MESSAGE

$CTEST_SUMMARY"
fi

jq -n --arg channel "$SLACK_BOT_CHANNEL_ID" --arg message "$MESSAGE" \
'{"channel": $channel, "text": $message}' > payload.json

curl -X POST https://slack.com/api/chat.postMessage \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-type: application/json" \
--data @payload.json
Loading
Loading