Fix CI: Update all actions to v4 (checkout, cache, upload-artifact) #5
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: 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 |