Skip to content

Add TheRock CI

Add TheRock CI #1

Workflow file for this run

name: Nightly CI
on:
schedule:
# Run nightly at 2 AM UTC
- cron: '0 2 * * *'
pull_request:
branches: [ amd-staging, amd-mainline, release/** ]
paths:
- '.github/workflows/**'
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.sha }}
cancel-in-progress: true
env:
DEBIAN_FRONTEND: noninteractive
jobs:
build:
name: "SLES 15.7 - ${{ matrix.gpu_config.gpu_target }} - ${{ matrix.install_method }}"
runs-on: [self-hosted, Linux, "${{ matrix.gpu_config.therock_family }}"]
container:
image: registry.suse.com/suse/sle15:15.7
options:
--group-add video
--device /dev/kfd
--device /dev/dri
--security-opt seccomp=unconfined
strategy:
fail-fast: false
matrix:
install_method: ['wheel', 'tarball']
gpu_config:
- gpu_target: gfx1100
therock_family: gfx110X-all
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install dependencies
shell: bash
run: |
zypper -qni update -y
zypper -qni install -y awk unzip xz cmake gcc gcc-c++ wget git python313 libdw-devel Mesa-libGL-devel wayland-devel libxkbcommon-devel libXcursor-devel libXi-devel libXinerama-devel libXrandr-devel
# build and install GLFW 3.4
wget https://github.com/glfw/glfw/releases/download/3.4/glfw-3.4.zip
unzip glfw-3.4.zip
cmake -S glfw-3.4 -B glfw-3.4/build -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF
cmake --build glfw-3.4/build --target install
# build and install Vulkan SDK 1.4.335.0
wget https://sdk.lunarg.com/sdk/download/1.4.335.0/linux/vulkansdk-linux-x86_64-1.4.335.0.tar.xz
tar -xvf vulkansdk-linux-x86_64-1.4.335.0.tar.xz -C $GITHUB_WORKSPACE
VULKAN_SDK=$GITHUB_WORKSPACE/1.4.335.0/x86_64
echo "VULKAN_SDK=$VULKAN_SDK" >> $GITHUB_ENV
echo "PATH=$VULKAN_SDK/bin:$PATH" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=$VULKAN_SDK/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" >> $GITHUB_ENV
echo "VK_ADD_LAYER_PATH=$VULKAN_SDK/share/vulkan/explicit_layer.d" >> $GITHUB_ENV
echo "PKG_CONFIG_PATH=$VULKAN_SDK/share/pkgconfig:$VULKAN_SDK/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" >> $GITHUB_ENV
- name: Setup virtual environment
shell: bash
run: |
python3.13 -m venv $GITHUB_WORKSPACE/.venv
source $GITHUB_WORKSPACE/.venv/bin/activate
pip install pyyaml cmake
# issue https://github.com/actions/runner/issues/3210:
# using $GITHUB_PATH breaks subsequent steps if base image does not have $PATH
# persist the virtual environment
echo "PATH=$PATH" >> $GITHUB_ENV
echo "VIRTUAL_ENV=$GITHUB_WORKSPACE/.venv" >> $GITHUB_ENV
- name: Install TheRock Python wheel
if: ${{ matrix.install_method == 'wheel' }}
shell: bash
run: |
pip install --no-cache-dir --index-url https://rocm.nightlies.amd.com/v2/${{ matrix.gpu_config.therock_family }}/ \
"rocm[libraries,devel]"
- name: Wheel sanity check
if: ${{ matrix.install_method == 'wheel' }}
id: sanity-check
shell: bash
run: |
ROCM_VERSION=$(rocm-sdk version)
echo "rocm_version=$ROCM_VERSION" >> $GITHUB_OUTPUT
echo "## ROCm Version: $ROCM_VERSION" >> $GITHUB_STEP_SUMMARY
rocm-sdk init
rocm-sdk test
continue-on-error: true
- name: Setup environment variables (wheel)
if: ${{ matrix.install_method == 'wheel' }}
shell: bash
run: |
ROCM_PATH=$(rocm-sdk path --root)
echo "ROCM_PATH=$ROCM_PATH" >> $GITHUB_ENV
echo "HIP_PATH=$ROCM_PATH" >> $GITHUB_ENV
echo "HIP_PLATFORM=amd" >> $GITHUB_ENV
echo "HIP_DEVICE_LIB_PATH=$ROCM_PATH/lib/llvm/amdgcn/bitcode" >> $GITHUB_ENV
echo "PATH=$ROCM_PATH/bin:$ROCM_PATH/llvm/bin:$PATH" >> $GITHUB_ENV
- name: Install TheRock tarball
if: ${{ matrix.install_method == 'tarball' }}
id: install-tarball
shell: bash
run: |
LATEST_TARBALL=$(curl -s https://rocm.nightlies.amd.com/tarball/ | grep -oE "therock-dist-linux-${{ matrix.gpu_config.therock_family }}-[0-9]+\.[0-9]+\.\w+\.tar\.gz" | tail -1)
mkdir /therock-tarball && cd /therock-tarball
wget https://rocm.nightlies.amd.com/tarball/$LATEST_TARBALL
mkdir install
tar -xzf $LATEST_TARBALL -C install
ROCM_VERSION=$(echo $LATEST_TARBALL | grep -oE "[0-9]+\.[0-9]+\.\w+")
echo "rocm_version=$ROCM_VERSION" >> $GITHUB_OUTPUT
echo "## ROCm Version: $ROCM_VERSION" >> $GITHUB_STEP_SUMMARY
echo "## Tarball link: https://rocm.nightlies.amd.com/tarball/$LATEST_TARBALL" >> $GITHUB_STEP_SUMMARY
- name: Setup environment variables (tarball)
if: ${{ matrix.install_method == 'tarball' }}
shell: bash
run: |
ROCM_PATH=/therock-tarball/install
echo "ROCM_PATH=$ROCM_PATH" >> $GITHUB_ENV
echo "HIP_PATH=$ROCM_PATH" >> $GITHUB_ENV
echo "HIP_PLATFORM=amd" >> $GITHUB_ENV
echo "HIP_DEVICE_LIB_PATH=$ROCM_PATH/lib/llvm/amdgcn/bitcode" >> $GITHUB_ENV
echo "PATH=$ROCM_PATH/bin:$ROCM_PATH/llvm/bin:$PATH" >> $GITHUB_ENV
- name: CMake configure
shell: bash
run: |
cmake -S . -B build -DCMAKE_HIP_ARCHITECTURES="${{ matrix.gpu_config.gpu_target }}" -DROCM_ROOT="$ROCM_PATH" -DCMAKE_BUILD_RPATH="$ROCM_PATH/lib" -Wno-dev 2> >(tee cmake_error.log >&2)
- name: CMake configure error summary
if: ${{ !cancelled() }}
shell: bash
run: |
if [ ! -f cmake_error.log ]; then
exit 0
fi
echo "## CMake Configure" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
# Count warnings and errors
WARNINGS=$(grep -ci "warning" cmake_error.log || true)
ERRORS=$(grep -ci "error" cmake_error.log || true)
echo "| Status | Count |" >> $GITHUB_STEP_SUMMARY
echo "|--------|-------|" >> $GITHUB_STEP_SUMMARY
echo "| Warnings | $WARNINGS |" >> $GITHUB_STEP_SUMMARY
echo "| Errors | $ERRORS |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
# Show details if there are warnings/errors
if [ -s cmake_error.log ]; then
echo "<details><summary>CMake error log</summary>" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat cmake_error.log >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
echo "</details>" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
else
echo "Clean configure - no warnings or errors" >> $GITHUB_STEP_SUMMARY
fi
- name: CMake build
shell: bash
run: |
cmake --build build -j
- name: Upload build artifacts
if: success()
uses: actions/upload-artifact@v4
with:
name: rocm-examples-build-${{ matrix.gpu_config.gpu_target }}-${{ steps.sanity-check.outputs.rocm_version || steps.install-tarball.outputs.rocm_version }}-${{ matrix.install_method }}
path: build/
- name: Run tests
shell: bash
run: |
ctest --test-dir build --output-on-failure 2>&1 | tee ctest_output.log
- name: Test summary
if: ${{ !cancelled() }}
shell: bash
run: |
if [ ! -f ctest_output.log ]; then
exit 0
fi
# Generate summary
echo "## Test summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
# Parse test result
SUMMARY=$(grep "tests passed" ctest_output.log)
echo "**$SUMMARY**" >> $GITHUB_STEP_SUMMARY
# Count passed/failed
FAILED=$(grep -c "Failed" ctest_output.log || true)
# Show failed tests if any
if [ "$FAILED" -gt 0 ]; then
echo "<details><summary>Failed tests output</summary>" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
# Extract failed test output
awk '/^[[:space:]]*Start[[:space:]]+[0-9]+:/ {found=0; next} /\*\*\*/ && !/Passed/ {found=1} found' ctest_output.log >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
echo "</details>" >> $GITHUB_STEP_SUMMARY
fi