[DLS] [U22/24] Build dev imgs and run Unit Tests(by nszczygl9) #24
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "[DLS] [U22/24] Build dev imgs and run Unit Tests" | |
| run-name: "[DLS] [U22/24] Build dev imgs and run Unit Tests(by ${{ github.actor }})" | |
| on: | |
| workflow_call: | |
| workflow_dispatch: | |
| permissions: {} | |
| env: | |
| MODELS_PATH: "/home/runner/models" | |
| VIDEO_INPUTS_PATH: "/home/runner/videos" | |
| jobs: | |
| build: | |
| name: Build dev ${{ matrix.ubuntu_version }} imgs and run unit | |
| runs-on: [dls, ubuntu] | |
| permissions: | |
| contents: read | |
| packages: read | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - path_dockerfile: ./dlstreamer-repo/docker/ubuntu/ubuntu22.Dockerfile | |
| ubuntu_version: ubuntu22 | |
| - path_dockerfile: ./dlstreamer-repo/docker/ubuntu/ubuntu24.Dockerfile | |
| ubuntu_version: ubuntu24 | |
| steps: | |
| - name: Clean before | |
| run: | | |
| sudo rm -rf dlstreamer-repo | |
| - name: Check out dlstreamer repository | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 #5.0.0 | |
| with: | |
| persist-credentials: false | |
| path: dlstreamer-repo | |
| - name: Init submodules | |
| run: | | |
| cd dlstreamer-repo | |
| git submodule update --init thirdparty/spdlog | |
| git submodule update --init thirdparty/googletest | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 #3.11.1 | |
| - name: Log in to GitHub Container Registry | |
| uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef #3.6.0 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Build dev debug img with cache from GHCR | |
| env: | |
| dev_debug_img: ghcr.io/${{ github.repository }}/dev-debug-img-${{ matrix.ubuntu_version }}:${{ github.sha }} | |
| dev_debug_img_cached: ghcr.io/${{ github.repository }}/dev-debug-img-${{ matrix.ubuntu_version }}:buildcache | |
| run: | | |
| docker buildx build \ | |
| --load \ | |
| --target dlstreamer-dev \ | |
| --tag "${dev_debug_img}" \ | |
| --cache-from="${dev_debug_img_cached}" \ | |
| --build-arg BUILD_ARG=Debug \ | |
| -f ${{ matrix.path_dockerfile }} \ | |
| ./dlstreamer-repo | |
| # ====================================================== UNIT TESTS ============================================================ | |
| - name: Check models | |
| run: | | |
| echo "## Basic checks" >> $GITHUB_STEP_SUMMARY | |
| if [ -d "${{ env.MODELS_PATH }}" ] && [ "$(ls -A "${{ env.MODELS_PATH }}")" ]; then | |
| echo "Models: found ✅" >> $GITHUB_STEP_SUMMARY | |
| ls -A "${{ env.MODELS_PATH }}" | |
| else | |
| echo "Models: folder not found or it is empty ❌" >> $GITHUB_STEP_SUMMARY | |
| ls -A "${{ env.MODELS_PATH }}" | |
| exit 1 | |
| fi | |
| - name: Check videos | |
| run: | | |
| if [ -d "${{ env.VIDEO_INPUTS_PATH }}" ] && [ "$(ls -A "${{ env.VIDEO_INPUTS_PATH }}")" ]; then | |
| echo "Tests input videos: found ✅" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "Tests input videos: folder not found or it is empty ❌" >> $GITHUB_STEP_SUMMARY | |
| exit 1 | |
| fi | |
| - name: Create test results folder | |
| env: | |
| RESULTS_DIR: test-results | |
| run: | | |
| mkdir -p ${RESULTS_DIR} | |
| chmod -R 777 ${RESULTS_DIR} | |
| - name: Run tests | |
| id: run-tests | |
| env: | |
| dev_debug_img: ghcr.io/${{ github.repository }}/dev-debug-img-${{ matrix.ubuntu_version }}:${{ github.sha }} | |
| MAPPED_MODELS_PATH: /home/dlstreamer/models | |
| MAPPED_RESULTS_DIR: /home/dlstreamer/test-results | |
| MAPPED_VIDEO_EXAMPLES_DIR: /home/dlstreamer/video-examples | |
| RESULTS_DIR: test-results | |
| run: | | |
| docker run --device /dev/dri --rm \ | |
| --group-add=$(stat -c "%g" /dev/dri/render*) \ | |
| -v ${{ env.VIDEO_INPUTS_PATH }}:${MAPPED_VIDEO_EXAMPLES_DIR} \ | |
| -v ${{ env.MODELS_PATH }}:${MAPPED_MODELS_PATH} \ | |
| -v $PWD/${RESULTS_DIR}:${MAPPED_RESULTS_DIR} \ | |
| -v $PWD/dlstreamer-repo/tests/scripts:/home/dlstreamer/dlstreamer/tests-scripts \ | |
| -v $PWD/dlstreamer-repo/tests/unit_tests:/home/dlstreamer/dlstreamer/tests \ | |
| -e VIDEO_EXAMPLES_DIR=${MAPPED_VIDEO_EXAMPLES_DIR} \ | |
| -w /home/dlstreamer/dlstreamer \ | |
| -e MODELS_PATH=${MAPPED_MODELS_PATH} \ | |
| -e MODELS_PROC_PATH=/home/dlstreamer/dlstreamer/samples/gstreamer/model_proc \ | |
| ${dev_debug_img} \ | |
| tests-scripts/run_unit_tests.sh "" "" ${MAPPED_RESULTS_DIR} | |
| #this script creates output file called unit_test_summary.txt | |
| - name: Run python script to get Unit Test results | |
| env: | |
| RESULTS_DIR: test-results | |
| run: python3 dlstreamer-repo/tests/scripts/unit_test_results.py $PWD/${RESULTS_DIR} | |
| - name: Check Docker image size | |
| id: check-size | |
| env: | |
| dev_debug_img: ghcr.io/${{ github.repository }}/dev-debug-img-${{ matrix.ubuntu_version }}:${{ github.sha }} | |
| run: | | |
| IMAGE_NAME=${dev_debug_img} | |
| if [ "${{ matrix.ubuntu_version }}" == "ubuntu22" ]; then | |
| EXPECTED_SIZE_MB=${{ vars.EXPECTED_SIZE_MB_DEV_U22 }} | |
| elif [ "${{ matrix.ubuntu_version }}" == "ubuntu24" ]; then | |
| EXPECTED_SIZE_MB=${{ vars.EXPECTED_SIZE_MB_DEV_U24 }} | |
| fi | |
| IMAGE_SIZE_BYTES=$(docker image inspect "$IMAGE_NAME" --format='{{.Size}}') | |
| IMAGE_SIZE_MB=$((IMAGE_SIZE_BYTES / 1024 / 1024)) | |
| echo "Actual image size: ${IMAGE_SIZE_MB} MB" | |
| echo "Expected size: ${EXPECTED_SIZE_MB} MB" | |
| DIFF=$(( IMAGE_SIZE_MB - EXPECTED_SIZE_MB )) | |
| ABS_DIFF=${DIFF#-} | |
| echo "Difference: ${ABS_DIFF} MB" | |
| THRESHOLD_SIZE_MB=100 | |
| echo "IMAGE_SIZE_MB=$IMAGE_SIZE_MB" >> $GITHUB_ENV | |
| echo "EXPECTED_SIZE_MB=$EXPECTED_SIZE_MB" >> $GITHUB_ENV | |
| if [ "$ABS_DIFF" -gt "$THRESHOLD_SIZE_MB" ]; then | |
| echo "❌ Image size difference exceeds allowed threshold: ${THRESHOLD_SIZE_MB}MB (difference: ${ABS_DIFF} MB)" | |
| exit 1 | |
| else | |
| echo "✅ Image size within allowed threshold: ${THRESHOLD_SIZE_MB}MB." | |
| fi | |
| - name: Print image size summary | |
| if: always() | |
| env: | |
| IMAGE_SIZE_MB: ${{ env.IMAGE_SIZE_MB }} | |
| EXPECTED_SIZE_MB: ${{ env.EXPECTED_SIZE_MB }} | |
| run: | | |
| { | |
| echo "## 🐳 Docker image size" | |
| echo "" | |
| echo "| Image | Size |" | |
| echo "|-------|------|" | |
| echo "| Current Docker ${{ matrix.ubuntu_version }}-deb | **${IMAGE_SIZE_MB} MB** |" | |
| echo "| Expected Docker ${{ matrix.ubuntu_version }}-deb | **${EXPECTED_SIZE_MB} MB** |" | |
| } >> "$GITHUB_STEP_SUMMARY" | |
| - name: Check and display unit test results | |
| if: always() | |
| env: | |
| RESULTS_DIR: test-results | |
| run: | | |
| RESULTS_FILE="$PWD/${RESULTS_DIR}/unit_test_summary.txt" | |
| # Add results to summary | |
| echo "## Test Summary for Unit Tests on TGL" >> $GITHUB_STEP_SUMMARY | |
| cat "$RESULTS_FILE" >> $GITHUB_STEP_SUMMARY | |
| # Check for failures and fail if any | |
| CTEST_FAILED=$(grep "CTest:" "$RESULTS_FILE" | grep -o "Failed: [0-9]*" | awk '{print $2}') | |
| PYTEST_FAILED=$(grep "Pytest:" "$RESULTS_FILE" | grep -o "Failed: [0-9]*" | awk '{print $2}') | |
| TOTAL_FAILED=$((CTEST_FAILED + PYTEST_FAILED)) | |
| if [ "$TOTAL_FAILED" -gt 0 ]; then | |
| echo "::error::$TOTAL_FAILED test(s) failed (CTest: $CTEST_FAILED, Pytest: $PYTEST_FAILED)" | |
| exit 1 | |
| fi | |
| - name: Upload test results | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 #4.6.2 | |
| if: always () | |
| env: | |
| RESULTS_DIR: test-results | |
| with: | |
| name: DLS_unit_tests_tgl_${{ matrix.ubuntu_version }} | |
| path: ${{ env.RESULTS_DIR }}/*.xml | |
| - name: Clean up | |
| if: always () | |
| env: | |
| RESULTS_DIR: test-results | |
| run: | | |
| sudo rm -rf ${RESULTS_DIR} dlstreamer-repo | |
| docker system prune -a -f |