name: rocprofiler-compute Code Coverage run-name: rocprofiler-compute-code-coverage on: schedule: - cron: '0 2 * * *' workflow_dispatch: inputs: runner_matrix: description: 'Runner configuration' required: false type: string env: ROCM_PATH: "/opt/rocm" ROCM_VERSION: "7.0.2" jobs: prepare_matrix: runs-on: ubuntu-latest outputs: matrix: ${{ steps.generate_matrix.outputs.matrix }} steps: - name: Generate matrix id: generate_matrix run: | MATRIX='[{"os-release":"22.04","gpu":"mi355","arch":"gfx950","runner":"linux-mi355-1gpu-ossci-rocm","code-name":"jammy"},{"os-release":"24.04","gpu":"mi355","arch":"gfx950","runner":"linux-mi355-1gpu-ossci-rocm","code-name":"noble"},{"os-release":"22.04","gpu":"mi325","arch":"gfx94X","runner":"linux-mi325-1gpu-ossci-rocm","code-name":"jammy"},{"os-release":"24.04","gpu":"mi325","arch":"gfx94X","runner":"linux-mi325-1gpu-ossci-rocm","code-name":"noble"}]' if [ -n "${{ github.event.inputs.runner_matrix }}" ]; then MATRIX='${{ github.event.inputs.runner_matrix }}' fi echo "matrix=${MATRIX}" >> $GITHUB_OUTPUT coverage: name: Coverage • ${{ matrix.system.gpu }} • Ubuntu ${{ matrix.system.os-release }} needs: prepare_matrix strategy: fail-fast: false matrix: system: ${{ fromJSON(needs.prepare_matrix.outputs.matrix) }} runs-on: ${{ matrix.system.runner }} env: HIP_PLATFORM: "amd" OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 permissions: packages: read container: image: ghcr.io/rocm/rocprofiler-ubuntu:${{ matrix.system.os-release }}-systems-ci-${{ matrix.system.arch }} options: --privileged --ipc host --group-add video --device /dev/kfd --device /dev/dri --cap-add CAP_SYS_ADMIN steps: - uses: actions/checkout@v5 with: sparse-checkout: projects/rocprofiler-compute/ - name: Update system packages run: | apt-get update apt-get dist-upgrade -y echo "✅ System packages updated!" - name: Install amdgpu and dependencies shell: bash run: | ROCM_MAJOR=$(echo ${{ env.ROCM_VERSION }} | sed 's/\./ /g' | awk '{print $1}') ROCM_MINOR=$(echo ${{ env.ROCM_VERSION }} | sed 's/\./ /g' | awk '{print $2}') ROCM_VERSN=$(( (${ROCM_MAJOR}*10000)+(${ROCM_MINOR}*100) )) wget -N -P /tmp/ https://repo.radeon.com/amdgpu-install/${ROCM_MAJOR}.${ROCM_MINOR}/ubuntu/${{ matrix.system.code-name }}/amdgpu-install_${ROCM_MAJOR}.${ROCM_MINOR}.${ROCM_VERSN}-1_all.deb apt-get install -y /tmp/amdgpu-install_${ROCM_MAJOR}.${ROCM_MINOR}.${ROCM_VERSN}-1_all.deb apt-get update apt install -y amd-smi-lib libdw-dev echo "✅ amdgpu and dependencies Installed!" - name: Install MPI run: | apt install -y libopenmpi-dev echo "✅ MPI Installed!" - name: Install ROCm run: | apt install -y rocm-dev echo "✅ ROCm Installation Complete!" - name: Install Python Dependencies working-directory: projects/rocprofiler-compute run: | pip install -r requirements.txt --break-system-packages --ignore-installed pip install -r requirements-test.txt --break-system-packages --ignore-installed echo "✅ Python dependencies installed!" - name: Configure, Build, Test, and Upload Coverage id: run_coverage timeout-minutes: 120 working-directory: projects/rocprofiler-compute continue-on-error: true run: | set -e git config --global --add safe.directory ${GITHUB_WORKSPACE} git config --global --add safe.directory ${PWD} BUILD_NAME="ROCm/rocprofiler-compute-${{ github.ref_name }}-ubuntu-${{ matrix.system.os-release }}-${{ matrix.system.gpu }}" SITE_NAME="${{ matrix.system.runner }}" PATH=${{ env.ROCM_PATH }}/bin:${{ env.ROCM_PATH }}/llvm/bin:$PATH \ LD_LIBRARY_PATH=${{ env.ROCM_PATH }}/lib:${{ env.ROCM_PATH }}/llvm/lib:$LD_LIBRARY_PATH \ python3 ./tools/run-code-coverage.py \ --build-name "${BUILD_NAME}" \ --site "${SITE_NAME}" \ --mode "Nightly" \ --build-jobs 16 \ --pytest-numprocs 8 \ --install - name: Check Coverage Configuration if: always() working-directory: projects/rocprofiler-compute run: | echo "=== Checking Build Configuration ===" if [ -f "build/CMakeCache.txt" ]; then echo "CMakeCache.txt contents (relevant variables):" grep -E "ENABLE_TESTS|ENABLE_COVERAGE|INSTALL_TESTS|PYTEST_NUMPROCS" build/CMakeCache.txt || echo "⚠️ Coverage variables not found!" echo "" echo "=== Checking for coverage.xml ===" if [ -f "build/coverage.xml" ]; then echo "✅ coverage.xml found!" ls -lh build/coverage.xml else echo "❌ coverage.xml NOT found!" fi echo "" echo "=== Checking CTest results ===" if [ -f "build/Testing/Temporary/LastTest.log" ]; then echo "Last 50 lines of test log:" tail -n 50 build/Testing/Temporary/LastTest.log fi else echo "❌ build/CMakeCache.txt not found - build may have failed!" fi - name: Upload Logs on Failure if: failure() uses: actions/upload-artifact@v4 with: name: test-logs-${{ matrix.system.gpu }}-${{ matrix.system.os-release }} path: | projects/rocprofiler-compute/build/Testing/Temporary/LastTest*.log projects/rocprofiler-compute/build/coverage.xml retention-days: 7