Files
rocm-systems/.github/workflows/amdsmi-build.yml
T
Williams, Justin e3ab8cf71b [SWDEV-500518] Updated CI Structure (#244)
Signed-off-by: Justin Williams <Justin.Williams@amd.com>
2025-04-07 15:02:57 -05:00

384 řádky
13 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:
env:
DEBIAN_FRONTEND: noninteractive
DEBCONF_NONINTERACTIVE_SEEN: true
BUILD_TYPE: Release
ROCM_DIR: /opt/rocm
jobs:
build-debian:
name: Build on Debian
runs-on:
- self-hosted
- ${{ vars.RUNNER_TYPE }}
continue-on-error: true
container:
image: ${{ vars[format('{0}_DOCKER_IMAGE', matrix.os)] }}
options: --privileged
strategy:
matrix:
os: [Ubuntu20, Ubuntu22, Debian10]
steps:
- uses: actions/checkout@v4
with:
clean: false
- name: Generate Timestamp
id: timestamp
run: echo "TIMESTAMP=$(date +'%b %d %Y %-I:%M %p')" >> $GITHUB_ENV
- name: Build AMDSMI
run: |
set -e
echo 'Building on ${{ matrix.os }}'
BUILD_FOLDER=$GITHUB_WORKSPACE/build
rm -rf $BUILD_FOLDER
mkdir -p $BUILD_FOLDER
cd $BUILD_FOLDER
cmake $GITHUB_WORKSPACE -DBUILD_TESTS=ON -DENABLE_ESMI_LIB=ON
make -j $(nproc)
make package
echo "Build completed on ${{ matrix.os }}"
- name: Install AMDSMI
run: |
cd $GITHUB_WORKSPACE/build
apt update
apt install -y ./amd-smi-lib*99999-local_amd64.deb
ln -s /opt/rocm/bin/amd-smi /usr/local/bin
# Verify Installation
echo 'Verifying installation:'
amd-smi version
python3 -m pip list | grep amd
python3 -m pip list | grep pip
python3 -m pip list | grep setuptools
echo 'Completed installation on ${{ matrix.os }}'
- name: Run AMD-SMI Commands
shell: bash
run: |
echo "Running AMD-SMI Commands on ${{ matrix.os }}"
# Ensure the test results directory exists
mkdir -p /tmp/test-results-${{ matrix.os }}
# Run the AMD-SMI commands and capture their output
commands=(
"amd-smi version"
"amd-smi list"
"amd-smi static"
"amd-smi firmware"
"amd-smi bad-pages"
"amd-smi metric"
"amd-smi process"
"amd-smi topology"
"amd-smi monitor"
"amd-smi xgmi"
"amd-smi partition"
)
for cmd in "${commands[@]}"; do
echo "Running: $cmd"
if ! $cmd > /tmp/test-results-${{ matrix.os }}/$(echo $cmd | tr ' ' '_').log 2>&1; then
echo "Command '$cmd' failed. Check logs for details."
cat /tmp/test-results-${{ matrix.os }}/$(echo $cmd | tr ' ' '_').log
exit 1
else
echo "$cmd ran successfully."
fi
done
echo "All Commands ran successfully on ${{ matrix.os }}"
- name: Run AMDSMI Tests
run: |
mkdir -p /tmp/test-results-${{ matrix.os }}
echo 'Running AMDSMI Tests'
/opt/rocm/share/amd_smi/tests/amdsmitst > /tmp/test-results-${{ matrix.os }}/amdsmi_tests.log 2>&1
if [ $? -ne 0 ]; then
echo "AMDSMI Tests failed"
exit 1
fi
echo "AMDSMI Tests completed"
- name: Run Python Tests
run: |
echo 'Running Python Tests'
cd /opt/rocm/share/amd_smi/tests/python_unittest
./integration_test.py -v > /tmp/test-results-${{ matrix.os }}/integration_test_output.txt 2>&1
./unit_tests.py -v > /tmp/test-results-${{ matrix.os }}/unit_test_output.txt 2>&1
echo "Python tests completed"
- name: Run Example Tests
run: |
echo 'Running Example Tests'
cd $GITHUB_WORKSPACE/example
rm -rf build
cmake -B build -DENABLE_ESMI_LIB=OFF
make -C build -j $(nproc)
cd build
./amd_smi_drm_ex > /tmp/test-results-${{ matrix.os }}/amd_smi_drm_ex.log 2>&1 || echo 'amd_smi_drm_ex failed'
./amd_smi_nodrm_ex > /tmp/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log 2>&1 || echo 'amd_smi_nodrm_ex failed'
echo "Example tests completed"
- name: Uninstall AMDSMI
run: |
apt remove -y amd-smi-lib
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
fi
echo 'Uninstallation completed'
- name: Debug Test Results Directory
if: always()
run: |
echo "Checking test results directory for ${{ matrix.os }}"
ls -R /tmp/test-results-${{ matrix.os }} || echo "Test results directory not found"
- name: AMDSMI Test Results
if: always()
run: |
echo "Displaying AMDSMI test results for ${{ matrix.os }}"
cat /tmp/test-results-${{ matrix.os }}/amdsmi_tests.log || echo "No AMDSMI test results found for ${{ matrix.os }}"
- name: Integration Test Results
if: always()
run: |
echo "Displaying Integration test results for ${{ matrix.os }}"
cat /tmp/test-results-${{ matrix.os }}/integration_test_output.txt || echo "No integration test results found for ${{ matrix.os }}"
- name: Unit Test Results
if: always()
run: |
echo "Displaying Unit Test Results for ${{ matrix.os }}"
cat /tmp/test-results-${{ matrix.os }}/unit_test_output.txt || echo "No unit test results found for ${{ matrix.os }}"
- name: Example DRM Test Results
if: always()
run: |
echo "Displaying Example DRM test results for ${{ matrix.os }}"
cat /tmp/test-results-${{ matrix.os }}/amd_smi_drm_ex.log || echo "No DRM example test results found for ${{ matrix.os }}"
- name: Example NoDRM Test Results
if: always()
run: |
echo "Displaying Example NoDRM test results for ${{ matrix.os }}"
cat /tmp/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log || echo "No NoDRM example test results found for ${{ matrix.os }}"
build-rpm:
name: Build on RPM
runs-on:
- self-hosted
- ${{ vars.RUNNER_TYPE }}
continue-on-error: true
container:
image: ${{ vars[format('{0}_DOCKER_IMAGE', matrix.os)] }}
options: --privileged
strategy:
matrix:
os:
- SLES
- RHEL8
- RHEL9
- RHEL10
- AzureLinux3
- AlmaLinux8
steps:
- uses: actions/checkout@v4
with:
clean: false
- name: Set Package Manager
run: |
case "${{ matrix.os }}" in
SLES)
echo "PACKAGE_MANAGER=zypper" >> $GITHUB_ENV
;;
RHEL8|RHEL9|RHEL10|AlmaLinux8|AzureLinux3)
echo "PACKAGE_MANAGER=dnf" >> $GITHUB_ENV
;;
esac
- name: Generate Timestamp
id: timestamp
run: echo "TIMESTAMP=$(date +'%b %d %Y %-I:%M %p')" >> $GITHUB_ENV
- name: Build AMDSMI
run: |
set -e
echo 'Building on ${{ matrix.os }}'
BUILD_FOLDER=$GITHUB_WORKSPACE/build
rm -rf $BUILD_FOLDER
mkdir -p $BUILD_FOLDER
cd $BUILD_FOLDER
cmake $GITHUB_WORKSPACE -DBUILD_TESTS=ON -DENABLE_ESMI_LIB=ON
make -j $(nproc)
make package
echo "Build completed on ${{ matrix.os }}"
- name: Install more_itertools for AzureLinux3
if: matrix.os == 'AzureLinux3'
run: |
python3 -m pip install more_itertools
- name: Install AMDSMI
run: |
cd $GITHUB_WORKSPACE/build
case ${{ env.PACKAGE_MANAGER }} in
zypper)
timeout 10m zypper --no-refresh --no-gpg-checks install -y ./amd-smi-lib-*99999-local*.rpm
;;
dnf)
dnf install python3-setuptools python3-wheel -y
RETRIES=3
for i in $(seq 1 $RETRIES); do
echo "Attempt $i: Installing AMDSMI package..."
if timeout 10m dnf install -y --skip-broken --disablerepo=* ./amd-smi-lib-*99999-local*.rpm; then
echo "AMDSMI package installed successfully."
break
else
echo "Installation failed on attempt $i. Retrying..."
if [ $i -eq $RETRIES ]; then
echo "All $RETRIES attempts failed. Exiting."
exit 1
fi
sleep 10
fi
done
;;
esac
ln -s /opt/rocm/bin/amd-smi /usr/local/bin
# Verify Installation
echo 'Verifying installation:'
amd-smi version
python3 -m pip list | grep amd
python3 -m pip list | grep pip
python3 -m pip list | grep setuptools
echo 'Completed installation on ${{ matrix.os }}'
- name: Run AMD-SMI Commands
shell: bash
run: |
echo "Running AMD-SMI Commands on ${{ matrix.os }}"
# Ensure the test results directory exists
mkdir -p /tmp/test-results-${{ matrix.os }}
# Run the AMD-SMI commands and capture their output
commands=(
"amd-smi version"
"amd-smi list"
"amd-smi static"
"amd-smi firmware"
"amd-smi bad-pages"
"amd-smi metric"
"amd-smi process"
"amd-smi topology"
"amd-smi monitor"
"amd-smi xgmi"
"amd-smi partition"
)
for cmd in "${commands[@]}"; do
echo "Running: $cmd"
if ! $cmd > /tmp/test-results-${{ matrix.os }}/$(echo $cmd | tr ' ' '_').log 2>&1; then
echo "Command '$cmd' failed. Check logs for details."
cat /tmp/test-results-${{ matrix.os }}/$(echo $cmd | tr ' ' '_').log
exit 1
else
echo "$cmd ran successfully."
fi
done
echo "All Commands ran successfully on ${{ matrix.os }}"
- name: Run AMDSMI Tests
run: |
mkdir -p /tmp/test-results-${{ matrix.os }}
echo 'Running AMDSMI Tests'
/opt/rocm/share/amd_smi/tests/amdsmitst > /tmp/test-results-${{ matrix.os }}/amdsmi_tests.log 2>&1
if [ $? -ne 0 ]; then
echo "AMDSMI Tests failed"
exit 1
fi
- name: Run Python Tests
run: |
echo 'Running Python Tests'
cd /opt/rocm/share/amd_smi/tests/python_unittest
./integration_test.py -v > /tmp/test-results-${{ matrix.os }}/integration_test_output.txt 2>&1
./unit_tests.py -v > /tmp/test-results-${{ matrix.os }}/unit_test_output.txt 2>&1
echo "Python tests completed"
- name: Run Example Tests
run: |
echo 'Running Example Tests'
cd $GITHUB_WORKSPACE/example
rm -rf build
cmake -B build -DENABLE_ESMI_LIB=OFF
make -C build -j $(nproc)
cd build
./amd_smi_drm_ex > /tmp/test-results-${{ matrix.os }}/amd_smi_drm_ex.log 2>&1 || echo 'amd_smi_drm_ex failed'
./amd_smi_nodrm_ex > /tmp/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log 2>&1 || echo 'amd_smi_nodrm_ex failed'
echo "Example tests completed"
- name: Uninstall AMDSMI
run: |
case ${{ env.PACKAGE_MANAGER }} in
zypper)
zypper remove -y amd-smi-lib
;;
dnf)
dnf remove -y amd-smi-lib
;;
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
fi
- name: Debug Test Results Directory
if: always()
run: |
echo "Checking test results directory for ${{ matrix.os }}"
ls -R /tmp/test-results-${{ matrix.os }} || echo "Test results directory not found"
- name: AMDSMI Test Results
if: always()
run: |
echo "Displaying AMDSMI test results for ${{ matrix.os }}"
cat /tmp/test-results-${{ matrix.os }}/amdsmi_tests.log || echo "No AMDSMI test results found for ${{ matrix.os }}"
- name: Integration Test Results
if: always()
run: |
echo "Displaying Integration test results for ${{ matrix.os }}"
cat /tmp/test-results-${{ matrix.os }}/integration_test_output.txt || echo "No integration test results found for ${{ matrix.os }}"
- name: Unit Test Results
if: always()
run: |
echo "Displaying Unit Test Results for ${{ matrix.os }}"
cat /tmp/test-results-${{ matrix.os }}/unit_test_output.txt || echo "No unit test results found for ${{ matrix.os }}"
- name: Example DRM Test Results
if: always()
run: |
echo "Displaying Example DRM test results for ${{ matrix.os }}"
cat /tmp/test-results-${{ matrix.os }}/amd_smi_drm_ex.log || echo "No DRM example test results found for ${{ matrix.os }}"
- name: Example NoDRM Test Results
if: always()
run: |
echo "Displaying Example NoDRM test results for ${{ matrix.os }}"
cat /tmp/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log || echo "No NoDRM example test results found for ${{ matrix.os }}"