fix: Improve GitHub workflow with better CTS build configuration #8
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: OpenVX Vision Conformance | |
| on: | |
| push: | |
| branches: [ main, master, develop ] | |
| pull_request: | |
| branches: [ main, master ] | |
| workflow_dispatch: | |
| inputs: | |
| test_filter: | |
| description: 'Test filter pattern (optional)' | |
| required: false | |
| default: '' | |
| verbose: | |
| description: 'Verbose output' | |
| required: false | |
| default: 'false' | |
| env: | |
| CARGO_TERM_COLOR: always | |
| RUST_BACKTRACE: 1 | |
| ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true | |
| jobs: | |
| build-and-test: | |
| runs-on: ubuntu-22.04 | |
| timeout-minutes: 60 | |
| steps: | |
| - name: Checkout rustVX | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Debug directory structure | |
| run: | | |
| echo "=== Directory Structure ===" | |
| ls -la | |
| echo "=== OpenVX-cts structure ===" | |
| ls -la OpenVX-cts/ || echo "No OpenVX-cts directory!" | |
| echo "=== Current working directory ===" | |
| pwd | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| build-essential \ | |
| cmake \ | |
| ninja-build \ | |
| libgtest-dev \ | |
| libopencv-dev \ | |
| python3 \ | |
| python3-pip | |
| - name: Install Rust | |
| run: | | |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable | |
| source $HOME/.cargo/env | |
| rustc --version | |
| cargo --version | |
| - name: Build rustVX | |
| run: | | |
| source $HOME/.cargo/env | |
| echo "Building rustVX..." | |
| cargo build --release | |
| echo "Build complete. Library files:" | |
| ls -la target/release/*.so target/release/*.rlib 2>/dev/null || true | |
| - name: Build OpenVX CTS | |
| run: | | |
| echo "=== Building OpenVX CTS ===" | |
| # Check OpenVX-cts directory | |
| if [ ! -d "OpenVX-cts" ]; then | |
| echo "ERROR: OpenVX-cts directory not found!" | |
| ls -la | |
| exit 1 | |
| fi | |
| cd OpenVX-cts | |
| # Check for CMakeLists.txt | |
| if [ ! -f "CMakeLists.txt" ]; then | |
| echo "ERROR: CMakeLists.txt not found!" | |
| ls -la | |
| exit 1 | |
| fi | |
| # Prepare include directory | |
| mkdir -p include | |
| if [ -d "../include" ]; then | |
| echo "Copying OpenVX headers..." | |
| cp -r ../include/* include/ 2>/dev/null || true | |
| fi | |
| mkdir -p build | |
| cd build | |
| # Configure with verbose output and proper include paths | |
| echo "Running cmake..." | |
| cmake .. \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DOPENVX_INCLUDES="${{ github.workspace }}/include;${{ github.workspace }}/OpenVX-cts/include" \ | |
| -DOPENVX_LIBRARIES="${{ github.workspace }}/target/release/libopenvx_core.so;${{ github.workspace }}/target/release/libopenvx_ffi.so" \ | |
| -DOPENVX_DEFINITIONS="OPENVX_CONFORMANCE_VISION" \ | |
| 2>&1 || { | |
| echo "CMAKE FAILED!" | |
| echo "CMake output:" | |
| cat CMakeFiles/CMakeOutput.log 2>/dev/null | tail -100 || echo "No CMakeOutput.log" | |
| cat CMakeFiles/CMakeError.log 2>/dev/null | tail -100 || echo "No CMakeError.log" | |
| exit 1 | |
| } | |
| # Build | |
| echo "Running make..." | |
| make VERBOSE=1 -j$(nproc) 2>&1 || { | |
| echo "MAKE FAILED!" | |
| exit 1 | |
| } | |
| echo "Build complete. Listing binaries:" | |
| ls -la bin/ 2>/dev/null || echo "No bin directory" | |
| find . -name "vx_test_conformance" -type f 2>/dev/null | |
| - name: Run Vision Conformance Tests | |
| id: run_tests | |
| continue-on-error: true | |
| run: | | |
| source $HOME/.cargo/env | |
| echo "========================================" | |
| echo "Running OpenVX Vision Conformance Tests" | |
| echo "========================================" | |
| # Find CTS build directory | |
| CTS_DIR="OpenVX-cts/build" | |
| if [ ! -d "$CTS_DIR" ]; then | |
| echo "ERROR: CTS build directory not found!" | |
| exit 1 | |
| fi | |
| cd "$CTS_DIR" | |
| # Check for test binary | |
| if [ ! -f "bin/vx_test_conformance" ]; then | |
| echo "Test binary not found, searching..." | |
| find . -name "vx_test_conformance" -type f 2>/dev/null | |
| ls -la bin/ 2>/dev/null || true | |
| fi | |
| # Set library path for the conformance tests | |
| export LD_LIBRARY_PATH=${{ github.workspace }}/target/release:$LD_LIBRARY_PATH | |
| echo "Library path: $LD_LIBRARY_PATH" | |
| # Create output directory for results | |
| mkdir -p ${{ github.workspace }}/test-results | |
| # Run tests | |
| timeout 300 ./bin/vx_test_conformance 2>&1 | tee ${{ github.workspace }}/test-results/vision_test_output.txt || true | |
| echo "Test execution completed." | |
| - name: Analyze test results | |
| id: analyze_results | |
| run: | | |
| source $HOME/.cargo/env | |
| echo "========================================" | |
| echo "Analyzing Test Results" | |
| echo "========================================" | |
| OUTPUT_FILE="${{ github.workspace }}/test-results/vision_test_output.txt" | |
| # Create output file if it doesn't exist | |
| mkdir -p ${{ github.workspace }}/test-results | |
| touch "$OUTPUT_FILE" | |
| # Count passing tests | |
| PASS_COUNT=$(grep -c "\[ DONE \]" "$OUTPUT_FILE" 2>/dev/null || echo "0") | |
| echo "Tests passed: $PASS_COUNT" | |
| # Count failing tests | |
| FAIL_COUNT=$(grep -c "\[ !FAILED! \]" "$OUTPUT_FILE" 2>/dev/null || echo "0") | |
| echo "Tests failed: $FAIL_COUNT" | |
| # Extract test summary | |
| echo "========================================" | tee ${{ github.workspace }}/test-results/summary.txt | |
| echo "Vision Conformance Test Summary" | tee -a ${{ github.workspace }}/test-results/summary.txt | |
| echo "========================================" | tee -a ${{ github.workspace }}/test-results/summary.txt | |
| echo "Passed: $PASS_COUNT" | tee -a ${{ github.workspace }}/test-results/summary.txt | |
| echo "Failed: $FAIL_COUNT" | tee -a ${{ github.workspace }}/test-results/summary.txt | |
| echo "Total: $((PASS_COUNT + FAIL_COUNT))" | tee -a ${{ github.workspace }}/test-results/summary.txt | |
| if [ "$FAIL_COUNT" -eq 0 ] && [ "$PASS_COUNT" -gt 0 ]; then | |
| echo "Status: ✅ ALL TESTS PASSED" | tee -a ${{ github.workspace }}/test-results/summary.txt | |
| elif [ "$PASS_COUNT" -gt 0 ]; then | |
| echo "Status: ⚠️ PARTIAL SUCCESS ($PASS_COUNT/$((PASS_COUNT + FAIL_COUNT)))" | tee -a ${{ github.workspace }}/test-results/summary.txt | |
| else | |
| echo "Status: ❌ NO TESTS PASSED" | tee -a ${{ github.workspace }}/test-results/summary.txt | |
| fi | |
| # Set outputs for GitHub Actions summary | |
| echo "pass_count=$PASS_COUNT" >> $GITHUB_OUTPUT | |
| echo "fail_count=$FAIL_COUNT" >> $GITHUB_OUTPUT | |
| - name: Upload test results | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: conformance-test-results | |
| path: | | |
| test-results/ | |
| retention-days: 30 | |
| - name: Create GitHub Actions Summary | |
| if: always() | |
| run: | | |
| echo "## 🧪 OpenVX Vision Conformance Test Results" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| if [ -f "test-results/summary.txt" ]; then | |
| cat test-results/summary.txt >> $GITHUB_STEP_SUMMARY | |
| fi | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Build Information" >> $GITHUB_STEP_SUMMARY | |
| source $HOME/.cargo/env | |
| echo "- **Rust Version:** $(rustc --version)" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Build Type:** Release" >> $GITHUB_STEP_SUMMARY | |
| echo "- **CTS Build:** OpenVX Conformance Test Suite" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "📥 **Download full logs:** See Artifacts section above" >> $GITHUB_STEP_SUMMARY |