Files
rocm-systems/.github/workflows/amdsmi-build.yml
T
Justin Williams 4e3a197dcc [SWDEV-500518] Updated AMDSMI sanity checks
Signed-off-by: Justin Williams <Justin.Williams@amd.com>
2025-03-27 18:35:13 -05:00

401 lines
17 KiB
YAML

name: Build and Install AMDSMI
on:
pull_request:
branches: [amd-staging, amd-mainline, release/rocm-rel-*]
push:
branches: [amd-staging, amd-mainline, release/rocm-rel-*]
workflow_dispatch:
jobs:
build-and-install-deb:
name: Build on Debian-based Systems
runs-on:
- self-hosted
- ${{ vars.RUNNER_TYPE }}
continue-on-error: true
strategy:
matrix:
os:
- Ubuntu20
- Ubuntu22
- Debian10
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
clean: false
- name: Set Docker Image for Ubuntu20
if: matrix.os == 'Ubuntu20'
run: echo "DOCKER_IMAGE=${{ secrets.UBUNTU20_DOCKER_IMAGE }}" >> $GITHUB_ENV
- name: Set Docker Image for Ubuntu22
if: matrix.os == 'Ubuntu22'
run: echo "DOCKER_IMAGE=${{ secrets.UBUNTU22_DOCKER_IMAGE }}" >> $GITHUB_ENV
- 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 "
set -e
cd /src
echo 'Inside Docker Container on ${{ matrix.os }}'
# Build AMD-SMI
BUILD_FOLDER=/src/build
DEB_BUILD='amd-smi-lib*99999-local_amd64.deb'
DEB_BUILD_TEST='amd-smi-lib-tests*99999-local_amd64.deb'
rm -rf \$BUILD_FOLDER
mkdir -p \$BUILD_FOLDER
cd \$BUILD_FOLDER
cmake .. -DBUILD_TESTS=ON -DENABLE_ESMI_LIB=ON
make -j \$(nproc)
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-${{ 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-${{ matrix.os }}/amdsmi_tests.log 2>&1
if [ \$? -ne 0 ]; then
echo \"AMDSMI Tests failed. Check the log file for details: /shared/test-results-${{ matrix.os }}/amdsmi_tests.log\"
exit 1
else
parse_and_explain /shared/test-results-${{ matrix.os }}/amdsmi_tests.log 'AMDSMI Tests'
echo 'Completed AMDSMI Testing'
fi
# 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-${{ 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
echo 'Running Build Tests'
cd /src/build/example
./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
if [ -d /opt/rocm/share/amd_smi ]; then
echo '/opt/rocm/share/amd_smi directory still exists. Failing the job.'
exit 1
else
echo 'Successfully Completed uninstallation on ${{ matrix.os }}'
fi
"
- 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-${{ 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-${{ 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-${{ 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-${{ 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-${{ 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-${{ matrix.os }}/amd_smi_esmi_ex.log || echo "No amd_smi_esmi_ex.log found for ${{ matrix.os }}"
build-and-install-rpm:
name: Build on RPM-based Systems
runs-on:
- self-hosted
- ${{ vars.RUNNER_TYPE }}
continue-on-error: true
strategy:
matrix:
os:
- SLES
- RHEL8
- RHEL9
- Mariner2
- AzureLinux3
- AlmaLinux8
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
clean: false
- name: Set Docker Image and Package Manager for SLES
if: matrix.os == 'SLES'
run: |
echo "DOCKER_IMAGE=${{ secrets.SLES_DOCKER_IMAGE }}" >> $GITHUB_ENV
echo "PACKAGE_MANAGER=zypper" >> $GITHUB_ENV
- name: Set Docker Image and Package Manager for RHEL8
if: matrix.os == 'RHEL8'
run: |
echo "DOCKER_IMAGE=${{ secrets.RHEL8_DOCKER_IMAGE }}" >> $GITHUB_ENV
echo "PACKAGE_MANAGER=dnf" >> $GITHUB_ENV
- name: Set Docker Image and Package Manager for RHEL9
if: matrix.os == 'RHEL9'
run: |
echo "DOCKER_IMAGE=${{ secrets.RHEL9_DOCKER_IMAGE }}" >> $GITHUB_ENV
echo "PACKAGE_MANAGER=dnf" >> $GITHUB_ENV
- name: Set Docker Image and Package Manager for Mariner2
if: matrix.os == 'Mariner2'
run: |
echo "DOCKER_IMAGE=${{ secrets.MARINER2_DOCKER_IMAGE }}" >> $GITHUB_ENV
echo "PACKAGE_MANAGER=tdnf" >> $GITHUB_ENV
- name: Set Docker Image and Package Manager for AzureLinux3
if: matrix.os == 'AzureLinux3'
run: |
echo "DOCKER_IMAGE=${{ secrets.AZURELINUX3_DOCKER_IMAGE }}" >> $GITHUB_ENV
echo "PACKAGE_MANAGER=tdnf" >> $GITHUB_ENV
- name: Set Docker Image and Package Manager for AlmaLinux8
if: matrix.os == 'AlmaLinux8'
run: |
echo "DOCKER_IMAGE=${{ secrets.ALMALINUX8_DOCKER_IMAGE }}" >> $GITHUB_ENV
echo "PACKAGE_MANAGER=dnf" >> $GITHUB_ENV
- 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
# 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 "
set -e
cd /src
echo 'Inside Docker Container on ${{ matrix.os }}'
# Build AMD-SMI
BUILD_FOLDER=/src/build
RPM_BUILD='amd-smi-lib-*99999-local*.rpm'
rm -rf \$BUILD_FOLDER
mkdir -p \$BUILD_FOLDER
cd \$BUILD_FOLDER
cmake .. -DCPACK_RPM_PACKAGE_RELOCATABLE=ON -DBUILD_TESTS=ON -DENABLE_ESMI_LIB=ON
make -j \$(nproc)
make package
# Adjust permissions of the build directory
chmod -R a+rw \$BUILD_FOLDER
# Install AMD-SMI
case '$PACKAGE_MANAGER' in
zypper)
timeout 10m sudo zypper --no-refresh --no-gpg-checks install -y \$BUILD_FOLDER/\$RPM_BUILD
;;
dnf)
dnf install python3-setuptools python3-wheel -y
timeout 10m dnf install -y --skip-broken --disablerepo=* \$BUILD_FOLDER/\$RPM_BUILD
;;
tdnf)
tdnf install python3-setuptools python3-wheel -y
python3 -m pip install more_itertools
timeout 10m tdnf install -y --skip-broken --disablerepo=* \$BUILD_FOLDER/\$RPM_BUILD
;;
*)
echo 'Unsupported package manager: $PACKAGE_MANAGER'
exit 1
;;
esac
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-${{ 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-${{ matrix.os }}/amdsmi_tests.log 2>&1
if [ \$? -ne 0 ]; then
echo \"AMDSMI Tests failed. Check the log file for details: /shared/test-results-${{ matrix.os }}/amdsmi_tests.log\"
exit 1
else
parse_and_explain /shared/test-results-${{ matrix.os }}/amdsmi_tests.log 'AMDSMI Tests'
echo 'Completed AMDSMI Testing'
fi
# 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-${{ 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
echo 'Running Build Tests'
cd /src/build/example
./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
;;
tdnf)
tdnf remove -y amd-smi-lib
;;
*)
echo 'Unsupported package manager: $PACKAGE_MANAGER'
exit 1
;;
esac
rm -f /usr/local/bin/amd-smi
if [ -d /opt/rocm/share/amd_smi ]; then
echo '/opt/rocm/share/amd_smi directory still exists. Failing the job.'
exit 1
else
echo 'Successfully Completed uninstallation on ${{ matrix.os }}'
fi
"
- 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-${{ 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-${{ 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-${{ 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-${{ 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-${{ 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-${{ matrix.os }}/amd_smi_esmi_ex.log || echo "No amd_smi_esmi_ex.log found for ${{ matrix.os }}"