Skip to content

Fix CI: Update all actions to v4 (checkout, cache, upload-artifact) #5

Fix CI: Update all actions to v4 (checkout, cache, upload-artifact)

Fix CI: Update all actions to v4 (checkout, cache, upload-artifact) #5

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: 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: Cache Cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-registry-
- name: Cache Cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-index-
- name: Cache Cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-build-target-
- name: Cache OpenVX CTS build
id: cache-cts
uses: actions/cache@v4
with:
path: OpenVX-cts/build
key: ${{ runner.os }}-cts-${{ hashFiles('OpenVX-cts/CMakeLists.txt') }}
- 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 (if not cached)
if: steps.cache-cts.outputs.cache-hit != 'true'
run: |
echo "Building OpenVX CTS..."
cd OpenVX-cts
mkdir -p build
cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-G Ninja
ninja -j$(nproc) || make -j$(nproc)
echo "CTS build complete."
- name: Prepare test environment
run: |
echo "Setting up test environment..."
echo "RUSTVX_LIBRARY_PATH=${{ github.workspace }}/target/release" >> $GITHUB_ENV
echo "CTS_BUILD_DIR=${{ github.workspace }}/OpenVX-cts/build" >> $GITHUB_ENV
- 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 "========================================"
cd $CTS_BUILD_DIR
# Set library path for the conformance tests
export LD_LIBRARY_PATH=${{ github.workspace }}/target/release:$LD_LIBRARY_PATH
echo "Library path: $LD_LIBRARY_PATH"
echo "Checking for rustVX library..."
ls -la ${{ github.workspace }}/target/release/*.so 2>/dev/null || echo "No .so files found"
# Create output directory for results
mkdir -p ${{ github.workspace }}/test-results
# Run tests with timeout and capture output
TEST_FILTER="${{ github.event.inputs.test_filter }}"
VERBOSE="${{ github.event.inputs.verbose }}"
if [ -n "$TEST_FILTER" ]; then
echo "Running filtered tests: $TEST_FILTER"
timeout 300 ./bin/vx_test_conformance "$TEST_FILTER" 2>&1 | tee ${{ github.workspace }}/test-results/vision_test_output.txt || true
else
echo "Running all Vision tests..."
timeout 300 ./bin/vx_test_conformance 2>&1 | tee ${{ github.workspace }}/test-results/vision_test_output.txt || true
fi
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"
# Check for crashes
if grep -q "double free\|segmentation fault\|core dumped" "$OUTPUT_FILE" 2>/dev/null; then
echo "⚠️ WARNING: Tests crashed!"
echo "CRASH_DETECTED=true" >> $GITHUB_ENV
fi
# 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
if [ "${{ env.CRASH_DETECTED }}" == "true" ]; then
echo "" >> $GITHUB_STEP_SUMMARY
echo "⚠️ **Warning:** Tests encountered crashes. See artifacts for details." >> $GITHUB_STEP_SUMMARY
fi
echo "" >> $GITHUB_STEP_SUMMARY
echo "📥 **Download full logs:** See Artifacts section above" >> $GITHUB_STEP_SUMMARY