Files
TheRock/rocm-systems/.github/workflows/amdsmi-build.yml
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

260 lines
10 KiB
YAML

# ---------------------------------------------------------------------------
# AMD-SMI CI.
#
# Builds, installs, and tests AMD-SMI against AMD GPUs on self-hosted
# runners BM/VM, using per-distro containers to cover a matrix of
# Debian/RPM distros. TheRock CI only runs in containers so it doesn't cover
# every scenario
#
# Aims to follow TheRock CI conventions as closely as possible.
# ---------------------------------------------------------------------------
name: AMDSMI CI
on:
pull_request:
branches: [develop]
paths:
- 'projects/amdsmi/**'
- '.github/workflows/amdsmi-build.yml'
push:
branches: [develop]
paths:
- 'projects/amdsmi/**'
- '.github/workflows/amdsmi-build.yml'
workflow_dispatch:
permissions:
contents: read
env:
DEBIAN_FRONTEND: noninteractive
DEBCONF_NONINTERACTIVE_SEEN: true
BUILD_TYPE: Release
ROCM_DIR: /opt/rocm
defaults:
run:
shell: bash
jobs:
# Single job covering every distro + package format. The build-time logic
# (package manager, distro quirks) is autodetected by run_amdsmi_build.py
# from /etc/os-release, so the matrix only needs the OS label plus the
# artifact format used for upload.
build-and-test:
name: ${{ matrix.os }}
# Privileged self-hosted runner (SYS_MODULE + host /lib/modules): never
# auto-run untrusted fork-PR code on it. Mirrors the guard other CI jobs use.
if: ${{ github.event_name != 'pull_request' || !github.event.pull_request.head.repo.fork }}
runs-on:
- self-hosted
- ${{ vars.RUNNER_TYPE }}
continue-on-error: true
strategy:
max-parallel: 10
fail-fast: false
matrix:
include:
- { os: Ubuntu20, package_format: deb, arch_suffix: _amd64.deb }
- { os: Ubuntu22, package_format: deb, arch_suffix: _amd64.deb }
- { os: Debian10, package_format: deb, arch_suffix: _amd64.deb }
- { os: SLES, package_format: rpm, arch_suffix: .rpm }
- { os: RHEL8, package_format: rpm, arch_suffix: .rpm }
- { os: RHEL9, package_format: rpm, arch_suffix: .rpm }
- { os: RHEL10, package_format: rpm, arch_suffix: .rpm }
- { os: AlmaLinux8, package_format: rpm, arch_suffix: .rpm }
- { os: AzureLinux3, package_format: rpm, arch_suffix: .rpm }
container:
image: ${{ vars[format('{0}_DOCKER_IMAGE', matrix.os)] }}
options: --rm --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --shm-size=64G --cap-add=SYS_MODULE -v /lib/modules:/lib/modules -u root
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Mark workspace safe for git
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- name: Set Artifact Metadata
if: github.event_name == 'pull_request'
run: |
set -euo pipefail
echo "PR_NUMBER=PR${{ github.event.pull_request.number }}" >> $GITHUB_ENV
echo "BUILD_DATE=$(date -u +%m%d%y-%H%M)" >> $GITHUB_ENV
- name: Set Project Directory
run: |
set -euo pipefail
TARGET_DIR=$(find $GITHUB_WORKSPACE -path "*/projects/amdsmi/CMakeLists.txt" -exec dirname {} \;)
if [ -z "$TARGET_DIR" ]; then
TARGET_DIR=$(find $GITHUB_WORKSPACE -maxdepth 2 -name "CMakeLists.txt" -exec dirname {} \; | head -n 1)
fi
echo "PROJECT_DIR=$TARGET_DIR" >> $GITHUB_ENV
- name: Run AMDSMI Build and Install
run: |
set -euo pipefail
SCRIPT=$(find $GITHUB_WORKSPACE -path "*/projects/amdsmi/tests/amdsmi_build/run_amdsmi_build.py" | head -1)
if [ -z "$SCRIPT" ]; then
echo "ERROR: run_amdsmi_build.py not found"
exit 1
fi
echo "Using runner script: $SCRIPT"
# The script autodetects package manager, format, and distro
# quirks (Debian10 archived repos, RHEL10/AlmaLinux8 QA_RPATHS,
# AzureLinux3 more_itertools, etc.) from /etc/os-release.
python3 "$SCRIPT" \
--project-dir "${{ env.PROJECT_DIR }}" \
--os-label "${{ matrix.os }}" \
--test-results-dir "/tmp/test-results-${{ matrix.os }}"
# The previous step exits non-zero if any build/install/wheel-verify
# stage failed; on failure we dump the per-stage result files for
# quick triage in the GitHub Actions log. Full logs are still
# uploaded via the test-results artifact below.
- name: Dump build/install/wheel result files on failure
if: failure()
run: |
set +e
for f in build_result.txt install_result.txt verify_wheel_result.txt; do
path="/tmp/test-results-${{ matrix.os }}/$f"
if [ -f "$path" ]; then
echo "===== $f ====="
cat "$path"
fi
done
- name: Upload Package Artifact
if: github.event_name == 'pull_request'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: amd-smi-lib-${{ matrix.package_format }}-${{ matrix.os }}-${{ env.PR_NUMBER }}-${{ env.BUILD_DATE }}
path: |
${{ env.PROJECT_DIR }}/build/amd-smi-lib*99999-local${{ matrix.arch_suffix }}
${{ env.PROJECT_DIR }}/build/amd-smi-lib-*99999-local*.rpm
if-no-files-found: warn
retention-days: 7
- name: AMDSMI Command Tests
run: |
set -euo pipefail
mkdir -p /tmp/test-results-${{ matrix.os }}
commands=(
"amd-smi version"
"amd-smi list"
"amd-smi static"
"amd-smi firmware"
"amd-smi ucode"
"amd-smi bad-pages"
"amd-smi metric"
"amd-smi process"
"amd-smi topology"
"amd-smi monitor"
"amd-smi dmon"
"amd-smi xgmi"
"amd-smi partition"
)
# Command failures are not hard fails here; the AMDSMI CI
# Summary step scans amd-smi_*.log for 'Error code:' / 'Traceback'
# / 'AmdSmiException' and surfaces any failures in the summary.
for cmd in "${commands[@]}"; do
debug_cmd="$cmd --loglevel debug"
echo "Running: $debug_cmd"
log="/tmp/test-results-${{ matrix.os }}/$(echo $cmd | tr ' ' '_').log"
rc=0
eval "$debug_cmd" > "$log" 2>&1 || rc=$?
if [ "$rc" -ne 0 ]; then
echo "Command '$debug_cmd' failed (exit $rc)."
cat "$log"
echo "Error code: $rc" >> "$log"
fi
done
- name: Upload AMDSMI Command Test Results
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: amdsmi-command-tests-${{ matrix.os }}
path: /tmp/test-results-${{ matrix.os }}
- name: Run AMDSMI, Python, and Example Tests
run: |
set -euo pipefail
RESULTS_DIR=/tmp/test-results-${{ matrix.os }}
cd /opt/rocm/share/amd_smi/tests
source amdsmitst.exclude
source detect_asic_filter.sh
echo "GTEST_EXCLUDE=${GTEST_EXCLUDE}"
./amdsmitst --gtest_filter="-${GTEST_EXCLUDE}" > "$RESULTS_DIR/amdsmi_tests.log" 2>&1
cd /opt/rocm/share/amd_smi/tests/python_unittest
./integration_test.py -v > "$RESULTS_DIR/integration_test_output.txt" 2>&1
./unit_tests.py -v > "$RESULTS_DIR/unit_test_output.txt" 2>&1
if [ -f ./perf_tests.py ]; then
./perf_tests.py -v > "$RESULTS_DIR/perf_test_output.txt" 2>&1 || echo 'perf_tests.py failed'
else
echo "perf_tests.py not present; skipping" > "$RESULTS_DIR/perf_test_output.txt"
fi
cd ${{ env.PROJECT_DIR }}/example
rm -rf build
cmake -B build -DENABLE_ESMI_LIB=OFF
make -C build -j $(nproc)
cd build
./amd_smi_drm_ex > "$RESULTS_DIR/amd_smi_drm_ex.log" 2>&1 || echo 'amd_smi_drm_ex failed'
./amd_smi_nodrm_ex > "$RESULTS_DIR/amd_smi_nodrm_ex.log" 2>&1 || echo 'amd_smi_nodrm_ex failed'
- name: AMDSMI Test Results
if: always()
run: cat /tmp/test-results-${{ matrix.os }}/amdsmi_tests.log || echo "No AMDSMI test results"
- name: Integration Test Results
if: always()
run: cat /tmp/test-results-${{ matrix.os }}/integration_test_output.txt || echo "No integration test results"
- name: Unit Test Results
if: always()
run: cat /tmp/test-results-${{ matrix.os }}/unit_test_output.txt || echo "No unit test results"
- name: Perf Test Results
if: always()
run: cat /tmp/test-results-${{ matrix.os }}/perf_test_output.txt || echo "No perf test results"
- name: Example DRM Test Results
if: always()
run: cat /tmp/test-results-${{ matrix.os }}/amd_smi_drm_ex.log || echo "No DRM example results"
- name: Example NoDRM Test Results
if: always()
run: cat /tmp/test-results-${{ matrix.os }}/amd_smi_nodrm_ex.log || echo "No NoDRM example results"
- name: AMDSMI CI Summary
if: always()
run: |
set -euo pipefail
SCRIPT=$(find $GITHUB_WORKSPACE -path "*/projects/amdsmi/tests/amdsmi_build/run_amdsmi_build.py" | head -1)
python3 "$SCRIPT" summarize \
--results-dir "/tmp/test-results-${{ matrix.os }}" \
--os-label "${{ matrix.os }}" \
--summary-file "$GITHUB_STEP_SUMMARY"
- name: Uninstall
if: always()
run: |
set -euo pipefail
case "${{ matrix.package_format }}" in
deb) apt remove -y amd-smi-lib || true ;;
rpm)
case "${{ matrix.os }}" in
SLES) zypper remove -y amd-smi-lib || true ;;
*) dnf remove -y amd-smi-lib || true ;;
esac
;;
esac
rm -f /usr/local/bin/amd-smi
if [ -d /opt/rocm/share/amd_smi ]; then
rm -rf /opt/rocm/share/amd_smi
fi