Add TheRock CI #1
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |