From 77f316ee7d63c07139bb6fa82649593ee9e362ec Mon Sep 17 00:00:00 2001 From: "Williams, Justin" Date: Fri, 14 Feb 2025 13:06:51 -0700 Subject: [PATCH] [SWDEV-500518] Updated Workflow (#111) Signed-off-by: Justin Williams [ROCm/amdsmi commit: 99e57f62695ca4bef3a4d5e4eb5af1ac0706ba69] --- .../amdsmi/.github/workflows/amdsmi-build.yml | 174 +++++++++++++----- 1 file changed, 126 insertions(+), 48 deletions(-) diff --git a/projects/amdsmi/.github/workflows/amdsmi-build.yml b/projects/amdsmi/.github/workflows/amdsmi-build.yml index 5bef802366..2137ceed41 100644 --- a/projects/amdsmi/.github/workflows/amdsmi-build.yml +++ b/projects/amdsmi/.github/workflows/amdsmi-build.yml @@ -2,11 +2,10 @@ name: Build and Install AMDSMI on: pull_request: - branches: - - amd-staging + branches: [amd-staging, amd-mainline] push: - branches: - - amd-staging + branches: [amd-staging, amd-mainline] + workflow_dispatch: jobs: build-and-install-deb: @@ -19,6 +18,7 @@ jobs: os: - Ubuntu20 - Ubuntu22 + - Debian10 steps: - name: Checkout Repository @@ -34,10 +34,19 @@ jobs: if: matrix.os == 'Ubuntu22' run: echo "DOCKER_IMAGE=${{ secrets.UBUNTU22_DOCKER_IMAGE }}" >> $GITHUB_ENV - - name: Build and Install on ${{ matrix.os }} + - name: Set Docker Image for Debian10 + if: matrix.os == 'Debian10' + run: echo "DOCKER_IMAGE=${{ secrets.DEBIAN10_DOCKER_IMAGE }}" >> $GITHUB_ENV + + - name: Generate Timestamp + id: timestamp + run: echo "TIMESTAMP=$(date +'%b %d %Y %-I:%M %p')" >> $GITHUB_ENV + + - name: Build, Install & Uninstall on ${{ matrix.os }} at ${{ env.TIMESTAMP }} run: | # Define a host directory for test results HOST_TEST_RESULTS_DIR=/tmp/test-results + # Ensure the host directory exists mkdir -p $HOST_TEST_RESULTS_DIR docker run --privileged -v ${{ github.workspace }}:/src:rw -v $HOST_TEST_RESULTS_DIR:/shared:rw $DOCKER_IMAGE /bin/bash -c " @@ -57,77 +66,104 @@ jobs: make package # Install AMD-SMI + apt update apt install -y \$BUILD_FOLDER/\$DEB_BUILD ln -s /opt/rocm/bin/amd-smi /usr/local/bin # Check If Installed echo 'Listing installed packages:' + amd-smi version python3 -m pip list | grep amd python3 -m pip list | grep pip python3 -m pip list | grep setuptools echo 'Completed build and installation on ${{ matrix.os }}' # Create the directory for test results - mkdir -p /shared/test-results/test-results-${{ matrix.os }} + mkdir -p /shared/test-results-${{ matrix.os }} + + # Parse and explain test results + parse_and_explain() { + local log_file=\$1 + local test_name=\$2 + + if grep -q 'FAILED' \"\$log_file\"; then + echo \"\$test_name failed. Check the log file for details: \$log_file\" + # Add more specific parsing and explanations here + if grep -q 'specific error message' \"\$log_file\"; then + echo 'Explanation: Specific error message encountered.' + fi + else + echo \"\$test_name passed.\" + fi + } # Run AMDSMI Tests echo 'Running AMDSMI Tests' - /opt/rocm/share/amd_smi/tests/amdsmitst > /shared/test-results/test-results-${{ matrix.os }}/amdsmi_tests.log + /opt/rocm/share/amd_smi/tests/amdsmitst > /shared/test-results-${{ matrix.os }}/amdsmi_tests.log 2>&1 + parse_and_explain /shared/test-results-${{ matrix.os }}/amdsmi_tests.log 'AMDSMI Tests' echo 'Completed AMDSMI Testing' # Run Python Unit Tests echo 'Running Python Unit Testing' cd /opt/rocm/share/amd_smi/tests/python_unittest - ./integration_test.py -v > /shared/test-results/test-results-${{ matrix.os }}/integration_test_output.txt 2>&1 - ./unit_tests.py -v > /shared/test-results/test-results-${{ matrix.os }}/unit_test_output.txt 2>&1 + ./integration_test.py -v > /shared/test-results-${{ matrix.os }}/integration_test_output.txt 2>&1 + parse_and_explain /shared/test-results-${{ matrix.os }}/integration_test_output.txt 'Python Integration Tests' + ./unit_tests.py -v > /shared/test-results-${{ matrix.os }}/unit_test_output.txt 2>&1 + parse_and_explain /shared/test-results-${{ matrix.os }}/unit_test_output.txt 'Python Unit Tests' echo 'Completed Python Unit Testing' - # Run Build Testing + # Run Build Testing echo 'Running Build Tests' cd /src/build/example - ./amd_smi_drm_ex > /shared/test-results/test-results-${{ matrix.os }}/amd_smi_drm_ex.log || echo 'amd_smi_drm_ex failed' - ./amd_smi_esmi_ex > /shared/test-results/test-results-${{ matrix.os }}/amd_smi_esmi_ex.log || echo 'amd_smi_esmi_ex failed' - ./amd_smi_nodrm_ex > /shared/test-results/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log || echo 'amd_smi_nodrm_ex failed' + ./amd_smi_drm_ex > /shared/test-results-${{ matrix.os }}/amd_smi_drm_ex.log 2>&1 || echo 'amd_smi_drm_ex failed' + parse_and_explain /shared/test-results-${{ matrix.os }}/amd_smi_drm_ex.log 'DRM Example Test' + ./amd_smi_esmi_ex > /shared/test-results-${{ matrix.os }}/amd_smi_esmi_ex.log 2>&1 || echo 'amd_smi_esmi_ex failed' + parse_and_explain /shared/test-results-${{ matrix.os }}/amd_smi_esmi_ex.log 'ESMI Example Test' + ./amd_smi_nodrm_ex > /shared/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log 2>&1 || echo 'amd_smi_nodrm_ex failed' + parse_and_explain /shared/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log 'No DRM Example Test' echo 'Completed Build Testing' + + # Uninstall AMD-SMI + echo 'Uninstalling AMD-SMI' + sudo apt remove -y amd-smi-lib + sudo rm -f /usr/local/bin/amd-smi + echo 'Successfully Completed uninstallation on ${{ matrix.os }}' " - # Artifacts disabled for now - # - name: Upload Test Results - # uses: actions/upload-artifact@v4 - # with: - # name: test-results-${{ matrix.os }} - # path: /tmp/test-results/test-results/test-results-${{ matrix.os }} - # if-no-files-found: warn + - name: Debug Test Results Directory + run: | + echo "Checking test results directory for ${{ matrix.os }}" + ls -R /tmp/test-results || echo "Test results directory not found" - name: AMDSMI Test Results run: | echo "Displaying AMDSMI test results for ${{ matrix.os }}" - cat /tmp/test-results/test-results/test-results-${{ matrix.os }}/amdsmi_tests.log || echo "No amdsmi test results found for ${{ matrix.os }}" + cat /tmp/test-results/test-results-${{ matrix.os }}/amdsmi_tests.log || echo "No amdsmi test results found for ${{ matrix.os }}" - name: Integration Test Results run: | echo "Displaying Integration test results for ${{ matrix.os }}" - cat /tmp/test-results/test-results/test-results-${{ matrix.os }}/integration_test_output.txt || echo "No integration test results found for ${{ matrix.os }}" + cat /tmp/test-results/test-results-${{ matrix.os }}/integration_test_output.txt || echo "No integration test results found for ${{ matrix.os }}" - name: Unit Test Results run: | echo "Displaying Unit Test Results for ${{ matrix.os }}" - cat /tmp/test-results/test-results/test-results-${{ matrix.os }}/unit_test_output.txt || echo "No unit test results found for ${{ matrix.os }}" + cat /tmp/test-results/test-results-${{ matrix.os }}/unit_test_output.txt || echo "No unit test results found for ${{ matrix.os }}" - name: DRM EX Test Results run: | echo "Displaying DRM EX Test Results for ${{ matrix.os }}" - cat /tmp/test-results/test-results/test-results-${{ matrix.os }}/amd_smi_drm_ex.log || echo "No amd_smi_drm_ex.log found for ${{ matrix.os }}" + cat /tmp/test-results/test-results-${{ matrix.os }}/amd_smi_drm_ex.log || echo "No amd_smi_drm_ex.log found for ${{ matrix.os }}" - name: NO-DRM EX Test Results run: | echo "Displaying NO-DRM EX Test Results for ${{ matrix.os }}" - cat /tmp/test-results/test-results/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log || echo "No amd_smi_nodrm_ex.log found for ${{ matrix.os }}" + cat /tmp/test-results/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log || echo "No amd_smi_nodrm_ex.log found for ${{ matrix.os }}" - name: ESMI EX Test Results run: | echo "Displaying ESMI EX Test Results for ${{ matrix.os }}" - cat /tmp/test-results/test-results/test-results-${{ matrix.os }}/amd_smi_esmi_ex.log || echo "No amd_smi_esmi_ex.log found for ${{ matrix.os }}" + cat /tmp/test-results/test-results-${{ matrix.os }}/amd_smi_esmi_ex.log || echo "No amd_smi_esmi_ex.log found for ${{ matrix.os }}" build-and-install-rpm: @@ -181,7 +217,12 @@ jobs: run: | echo "DOCKER_IMAGE=${{ secrets.ALMALINUX8_DOCKER_IMAGE }}" >> $GITHUB_ENV echo "PACKAGE_MANAGER=dnf" >> $GITHUB_ENV - - name: Build and Install on ${{ matrix.os }} + + - name: Generate Timestamp + id: timestamp + run: echo "TIMESTAMP=$(date +'%b %d %Y %-I:%M %p')" >> $GITHUB_ENV + + - name: Build and Install on ${{ matrix.os }} at ${{ env.TIMESTAMP }} run: | # Define a host directory for test results HOST_TEST_RESULTS_DIR=/tmp/test-results @@ -223,69 +264,106 @@ jobs: # Check If Installed echo 'Listing installed packages:' + amd-smi version python3 -m pip list | grep amd python3 -m pip list | grep pip python3 -m pip list | grep setuptools echo 'Completed build and installation on ${{ matrix.os }}' # Create the directory for test results - mkdir -p /shared/test-results/test-results-${{ matrix.os }} + mkdir -p /shared/test-results-${{ matrix.os }} + + # Parse and explain test results + parse_and_explain() { + local log_file=\$1 + local test_name=\$2 + + if grep -q 'FAILED' \"\$log_file\"; then + echo \"\$test_name failed. Check the log file for details: \$log_file\" + # Add more specific parsing and explanations here + if grep -q 'specific error message' \"\$log_file\"; then + echo 'Explanation: Specific error message encountered.' + fi + else + echo \"\$test_name passed.\" + fi + } # Run AMDSMI Tests echo 'Running AMDSMI Tests' - /opt/rocm/share/amd_smi/tests/amdsmitst > /shared/test-results/test-results-${{ matrix.os }}/amdsmi_tests.log + /opt/rocm/share/amd_smi/tests/amdsmitst > /shared/test-results-${{ matrix.os }}/amdsmi_tests.log 2>&1 + parse_and_explain /shared/test-results-${{ matrix.os }}/amdsmi_tests.log 'AMDSMI Tests' echo 'Completed AMDSMI Testing' # Run Python Unit Tests echo 'Running Python Unit Testing' cd /opt/rocm/share/amd_smi/tests/python_unittest - ./integration_test.py -v > /shared/test-results/test-results-${{ matrix.os }}/integration_test_output.txt 2>&1 - ./unit_tests.py -v > /shared/test-results/test-results-${{ matrix.os }}/unit_test_output.txt 2>&1 + ./integration_test.py -v > /shared/test-results-${{ matrix.os }}/integration_test_output.txt 2>&1 + parse_and_explain /shared/test-results-${{ matrix.os }}/integration_test_output.txt 'Python Integration Tests' + ./unit_tests.py -v > /shared/test-results-${{ matrix.os }}/unit_test_output.txt 2>&1 + parse_and_explain /shared/test-results-${{ matrix.os }}/unit_test_output.txt 'Python Unit Tests' echo 'Completed Python Unit Testing' - # Run Build Testing + # Run Build Testing echo 'Running Build Tests' cd /src/build/example - ./amd_smi_drm_ex > /shared/test-results/test-results-${{ matrix.os }}/amd_smi_drm_ex.log || echo 'amd_smi_drm_ex failed' - ./amd_smi_esmi_ex > /shared/test-results/test-results-${{ matrix.os }}/amd_smi_esmi_ex.log || echo 'amd_smi_esmi_ex failed' - ./amd_smi_nodrm_ex > /shared/test-results/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log || echo 'amd_smi_nodrm_ex failed' + ./amd_smi_drm_ex > /shared/test-results-${{ matrix.os }}/amd_smi_drm_ex.log 2>&1 || echo 'amd_smi_drm_ex failed' + parse_and_explain /shared/test-results-${{ matrix.os }}/amd_smi_drm_ex.log 'DRM Example Test' + ./amd_smi_esmi_ex > /shared/test-results-${{ matrix.os }}/amd_smi_esmi_ex.log 2>&1 || echo 'amd_smi_esmi_ex failed' + parse_and_explain /shared/test-results-${{ matrix.os }}/amd_smi_esmi_ex.log 'ESMI Example Test' + ./amd_smi_nodrm_ex > /shared/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log 2>&1 || echo 'amd_smi_nodrm_ex failed' + parse_and_explain /shared/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log 'No DRM Example Test' echo 'Completed Build Testing' + + # Uninstall AMD-SMI + echo 'Uninstalling AMD-SMI' + case '$PACKAGE_MANAGER' in + zypper) + zypper remove -y amd-smi-lib + ;; + dnf) + dnf remove -y amd-smi-lib + ;; + *) + echo 'Unsupported package manager: $PACKAGE_MANAGER' + exit 1 + ;; + esac + rm -f /usr/local/bin/amd-smi + echo 'Successfully Completed uninstallation on ${{ matrix.os }}' " - # Artifacts disabled for now - # - name: Upload Test Results - # uses: actions/upload-artifact@v4 - # with: - # name: test-results-${{ matrix.os }} - # path: /tmp/test-results/test-results/test-results-${{ matrix.os }} - # if-no-files-found: warn + - name: Debug Test Results Directory + run: | + echo "Checking test results directory for ${{ matrix.os }}" + ls -R /tmp/test-results || echo "Test results directory not found" - name: AMDSMI Test Results run: | echo "Displaying AMDSMI test results for ${{ matrix.os }}" - cat /tmp/test-results/test-results/test-results-${{ matrix.os }}/amdsmi_tests.log || echo "No amdsmi test results found for ${{ matrix.os }}" + cat /tmp/test-results/test-results-${{ matrix.os }}/amdsmi_tests.log || echo "No amdsmi test results found for ${{ matrix.os }}" - name: Python Integration Test Results run: | echo "Displaying Integration test results for ${{ matrix.os }}" - cat /tmp/test-results/test-results/test-results-${{ matrix.os }}/integration_test_output.txt || echo "No integration test results found for ${{ matrix.os }}" + cat /tmp/test-results/test-results-${{ matrix.os }}/integration_test_output.txt || echo "No integration test results found for ${{ matrix.os }}" - name: Python Unit Test Results run: | echo "Displaying Unit Test Results for ${{ matrix.os }}" - cat /tmp/test-results/test-results/test-results-${{ matrix.os }}/unit_test_output.txt || echo "No unit test results found for ${{ matrix.os }}" + cat /tmp/test-results/test-results-${{ matrix.os }}/unit_test_output.txt || echo "No unit test results found for ${{ matrix.os }}" - name: DRM EX Test Results run: | echo "Displaying DRM EX Test Results for ${{ matrix.os }}" - cat /tmp/test-results/test-results/test-results-${{ matrix.os }}/amd_smi_drm_ex.log || echo "No amd_smi_drm_ex.log found for ${{ matrix.os }}" + cat /tmp/test-results/test-results-${{ matrix.os }}/amd_smi_drm_ex.log || echo "No amd_smi_drm_ex.log found for ${{ matrix.os }}" - name: NO-DRM EX Test Results run: | echo "Displaying NO-DRM EX Test Results for ${{ matrix.os }}" - cat /tmp/test-results/test-results/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log || echo "No amd_smi_nodrm_ex.log found for ${{ matrix.os }}" + cat /tmp/test-results/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log || echo "No amd_smi_nodrm_ex.log found for ${{ matrix.os }}" - name: ESMI EX Test Results run: | echo "Displaying ESMI EX Test Results for ${{ matrix.os }}" - cat /tmp/test-results/test-results/test-results-${{ matrix.os }}/amd_smi_esmi_ex.log || echo "No amd_smi_esmi_ex.log found for ${{ matrix.os }}" + cat /tmp/test-results/test-results-${{ matrix.os }}/amd_smi_esmi_ex.log || echo "No amd_smi_esmi_ex.log found for ${{ matrix.os }}"