name: Continuous Integration on: workflow_dispatch: push: branches: [ amd-staging, amd-mainline ] paths-ignore: - '*.md' - '**/README.md' - 'source/docs/**' - 'CODEOWNERS' pull_request: paths-ignore: - '*.md' - '**/README.md' - 'source/docs/**' - 'CODEOWNERS' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: # TODO(jrmadsen): replace LD_RUNPATH_FLAG, GPU_TARGETS, etc. with internal handling in cmake ROCM_PATH: "/opt/rocm" GPU_TARGETS: "gfx900 gfx906 gfx908 gfx90a gfx940 gfx941 gfx942 gfx950 gfx1030 gfx1100 gfx1101 gfx1102 gfx1201" PATH: "/usr/bin:$PATH" ## No tests should be excluded here except for extreme emergencies; tests should only be disabled in CMake ## A task should be assigned directly to fix the issue ## Scratch memory tests need to be fixed for ROCm 7.0 release navi3_EXCLUDE_TESTS_REGEX: "" vega20_EXCLUDE_TESTS_REGEX: "" mi200_EXCLUDE_TESTS_REGEX: "" mi300_EXCLUDE_TESTS_REGEX: "" mi300a_EXCLUDE_TESTS_REGEX: "" mi325_EXCLUDE_TESTS_REGEX: "" mi3xx_EXCLUDE_TESTS_REGEX: "" navi4_EXCLUDE_TESTS_REGEX: "" navi3_EXCLUDE_LABEL_REGEX: "" vega20_EXCLUDE_LABEL_REGEX: "" mi200_EXCLUDE_LABEL_REGEX: "" mi300_EXCLUDE_LABEL_REGEX: "" mi300a_EXCLUDE_LABEL_REGEX: "" mi325_EXCLUDE_LABEL_REGEX: "" mi3xx_EXCLUDE_LABEL_REGEX: "" navi4_EXCLUDE_LABEL_REGEX: "" GLOBAL_CMAKE_OPTIONS: "" jobs: core-deb: # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix strategy: fail-fast: false matrix: runner: ['navi3', 'navi4', 'mi3xx'] os: ['ubuntu-22.04'] build-type: ['RelWithDebInfo'] ci-flags: ['--linter clang-tidy'] runs-on: ${{ matrix.runner == 'mi3xx' && 'rocprof-azure' || matrix.runner }}-emu-runner-set # define this for containers env: GIT_DISCOVERY_ACROSS_FILESYSTEM: 1 CORE_EXT_RUNNER: mi3xx steps: - uses: actions/checkout@v4 - name: Install requirements timeout-minutes: 10 shell: bash run: | git config --global --add safe.directory '*' apt-get update apt-get install -y build-essential cmake g++-11 g++-12 python3-pip libdw-dev libsqlite3-dev rccl-dev rccl-unittests rocjpeg-dev rocjpeg-test rocdecode-dev rocdecode-test update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 10 --slave /usr/bin/g++ g++ /usr/bin/g++-11 --slave /usr/bin/gcov gcov /usr/bin/gcov-11 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 20 --slave /usr/bin/g++ g++ /usr/bin/g++-12 --slave /usr/bin/gcov gcov /usr/bin/gcov-12 python3 -m pip install -U --user -r requirements.txt rm -rf /opt/rocm/lib/*rocprofiler-sdk* /opt/rocm/lib/cmake/*rocprofiler-sdk* /opt/rocm/share/*rocprofiler-sdk* /opt/rocm/libexec/*rocprofiler-sdk* /opt/rocm*/lib/python*/site-packages/roctx /opt/rocm*/lib/python*/site-packages/rocpd - name: List Files shell: bash run: | echo "PATH: ${PATH}" echo "LD_LIBRARY_PATH: ${LD_LIBRARY_PATH}" which-realpath() { echo -e "\n$1 resolves to $(realpath $(which $1))"; echo "$($(which $1) --version &> /dev/stdout | head -n 1)"; } for i in python3 git cmake ctest gcc g++ gcov; do which-realpath $i; done cat /opt/rocm/.info/version ls -la - name: Enable PC Sampling if: ${{ contains(matrix.runner, 'mi200') || contains(matrix.runner, 'mi300a') }} shell: bash run: | echo 'ROCPROFILER_PC_SAMPLING_BETA_ENABLED=1' >> $GITHUB_ENV - name: Configure, Build, and Test timeout-minutes: 30 shell: bash run: python3 ./source/scripts/run-ci.py -B build --name ${{ github.repository }}-${{ github.ref_name }}-${{ matrix.os }}-${{ matrix.runner }}-core --build-jobs 16 --site ${RUNNER_HOSTNAME} --gpu-targets ${{ env.GPU_TARGETS }} --run-attempt ${{ github.run_attempt }} ${{ matrix.ci-flags }} -- -DROCPROFILER_DEP_ROCMCORE=ON -DROCPROFILER_BUILD_DOCS=OFF -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DCMAKE_INSTALL_PREFIX=/opt/rocprofiler-sdk -DCPACK_GENERATOR='DEB;RPM;TGZ' -DCPACK_PACKAGING_INSTALL_PREFIX="$(realpath /opt/rocm)" -DPython3_EXECUTABLE=$(which python3) ${{ env.GLOBAL_CMAKE_OPTIONS }} -- -LE "${${{ matrix.runner }}_EXCLUDE_LABEL_REGEX}" -E "${${{ matrix.runner }}_EXCLUDE_TESTS_REGEX}" - name: Install if: ${{ contains(matrix.runner, env.CORE_EXT_RUNNER) }} timeout-minutes: 10 run: cmake --build build --target install --parallel 16 - name: Build Packaging if: ${{ contains(matrix.runner, env.CORE_EXT_RUNNER) }} timeout-minutes: 10 run: cmake --build build --target package --parallel 16 - name: Test Install Build if: ${{ contains(matrix.runner, env.CORE_EXT_RUNNER) }} timeout-minutes: 20 shell: bash run: | CMAKE_PREFIX_PATH=/opt/rocprofiler-sdk cmake -B build-samples samples CMAKE_PREFIX_PATH=/opt/rocprofiler-sdk cmake -B build-tests -DGPU_TARGETS="gfx942" tests export LD_LIBRARY_PATH=/opt/rocprofiler-sdk/lib:${LD_LIBRARY_PATH} cmake --build build-samples --target all --parallel 16 cmake --build build-tests --target all --parallel 16 ctest --test-dir build-samples -LE "${${{ matrix.runner }}_EXCLUDE_LABEL_REGEX}" -E "${${{ matrix.runner }}_EXCLUDE_TESTS_REGEX}" --output-on-failure ctest --test-dir build-tests -LE "${${{ matrix.runner }}_EXCLUDE_LABEL_REGEX}" -E "${${{ matrix.runner }}_EXCLUDE_TESTS_REGEX}" --output-on-failure - name: Install Packages if: ${{ contains(matrix.runner, env.CORE_EXT_RUNNER) }} timeout-minutes: 5 shell: bash run: | export PATH=${PATH}:/usr/local/sbin:/usr/sbin:/sbin ls -la ls -la ./build dpkg --force-all -i ./build/rocprofiler-sdk-roctx_*.deb dpkg --force-all -i ./build/rocprofiler-sdk-rocpd_*.deb for i in $(ls -S ./build/rocprofiler-sdk*.deb | egrep -v 'roctx|rocpd'); do dpkg --force-all -i ${i}; done; - name: Test Installed Packages if: ${{ contains(matrix.runner, env.CORE_EXT_RUNNER) }} timeout-minutes: 20 shell: bash run: | CMAKE_PREFIX_PATH=/opt/rocm cmake -B build-samples-deb /opt/rocm/share/rocprofiler-sdk/samples CMAKE_PREFIX_PATH=/opt/rocm cmake -B build-tests-deb -DGPU_TARGETS="gfx942" /opt/rocm/share/rocprofiler-sdk/tests cmake --build build-samples-deb --target all --parallel 16 cmake --build build-tests-deb --target all --parallel 16 ctest --test-dir build-samples-deb -LE "${${{ matrix.runner }}_EXCLUDE_LABEL_REGEX}" -E "${${{ matrix.runner }}_EXCLUDE_TESTS_REGEX}" --output-on-failure ctest --test-dir build-tests-deb -LE "${${{ matrix.runner }}_EXCLUDE_LABEL_REGEX}" -E "${${{ matrix.runner }}_EXCLUDE_TESTS_REGEX}" --output-on-failure - name: Archive production artifacts if: ${{ github.event_name == 'workflow_dispatch' && contains(matrix.runner, env.CORE_EXT_RUNNER) }} uses: actions/upload-artifact@v4 with: name: installers-deb path: | ${{github.workspace}}/build/*.deb ${{github.workspace}}/build/*.rpm ${{github.workspace}}/build/*.tgz core-rpm: # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix strategy: fail-fast: false matrix: runner: ['mi300'] os: ['rhel', 'sles'] build-type: ['RelWithDebInfo'] ci-flags: [''] runs-on: rocprof-azure-${{ matrix.os }}-emu-runner-set # define this for containers env: GIT_DISCOVERY_ACROSS_FILESYSTEM: 1 OS_TYPE: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - name: Install requirements timeout-minutes: 10 shell: bash run: | git config --global --add safe.directory '*' if [ "${OS_TYPE}" == "rhel" ]; then dnf makecache dnf groupinstall -y "Development Tools" dnf remove -y gcc-c++ dnf install -y gcc-toolset-11-gcc-c++ llvm14-devel fi python3 -m pip install --upgrade pip python3 -m pip install -U --user -r requirements.txt rm -rf /opt/rocm/lib/*rocprofiler-sdk* /opt/rocm/lib/cmake/*rocprofiler-sdk* /opt/rocm/share/*rocprofiler-sdk* /opt/rocm/libexec/*rocprofiler-sdk* - name: List Files shell: bash run: | echo "PATH: ${PATH}" echo "LD_LIBRARY_PATH: ${LD_LIBRARY_PATH}" which-realpath() { echo -e "\n$1 resolves to $(realpath $(which $1))"; echo "$($(which $1) --version &> /dev/stdout | head -n 1)"; } for i in python3 git cmake ctest gcc g++ gcov; do which-realpath $i; done cat /opt/rocm/.info/version ls -la - name: Enable PC Sampling if: ${{ contains(matrix.runner, 'mi200') || contains(matrix.runner, 'mi300a') }} shell: bash run: | echo 'ROCPROFILER_PC_SAMPLING_BETA_ENABLED=1' >> $GITHUB_ENV - name: Configure, Build, and Test timeout-minutes: 30 shell: bash run: if [ "${OS_TYPE}" == "rhel" ]; then source scl_source enable gcc-toolset-11; fi; /usr/bin/python3 ./source/scripts/run-ci.py -B build --name ${{ github.repository }}-${{ github.ref_name }}-${{ matrix.os }}-${{ matrix.runner }}-core --build-jobs 16 --site ${RUNNER_HOSTNAME} --gpu-targets ${{ env.GPU_TARGETS }} --run-attempt ${{ github.run_attempt }} ${{ matrix.ci-flags }} -- -DROCPROFILER_DEP_ROCMCORE=ON -DROCPROFILER_BUILD_DOCS=OFF -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DPython3_EXECUTABLE=$(which python3) ${{ env.GLOBAL_CMAKE_OPTIONS }} -- -LE "${${{ matrix.runner }}_EXCLUDE_LABEL_REGEX}" -E "${${{ matrix.runner }}_EXCLUDE_TESTS_REGEX}" sanitizers: strategy: fail-fast: false matrix: runner: ['mi3xx'] sanitizer: ['AddressSanitizer', 'ThreadSanitizer', 'LeakSanitizer', 'UndefinedBehaviorSanitizer'] os: ['ubuntu-22.04'] build-type: ['RelWithDebInfo'] if: ${{ contains(github.event_name, 'pull_request') }} runs-on: ${{ matrix.runner == 'mi3xx' && 'rocprof-azure' || matrix.runner }}-emu-runner-set # define this for containers env: GIT_DISCOVERY_ACROSS_FILESYSTEM: 1 GCC_COMPILER_VERSION: 13 steps: - uses: actions/checkout@v4 - name: Install requirements timeout-minutes: 10 shell: bash run: | git config --global --add safe.directory '*' apt-get update apt-get install -y build-essential cmake python3-pip libasan8 libtsan2 software-properties-common clang-15 libdw-dev libsqlite3-dev add-apt-repository ppa:ubuntu-toolchain-r/test apt-get update apt-get upgrade -y apt-get install -y gcc-${{ env.GCC_COMPILER_VERSION }} g++-${{ env.GCC_COMPILER_VERSION }} update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ env.GCC_COMPILER_VERSION }} 100 --slave /usr/bin/g++ g++ /usr/bin/g++-${{ env.GCC_COMPILER_VERSION }} --slave /usr/bin/gcov gcov /usr/bin/gcov-${{ env.GCC_COMPILER_VERSION }} python3 -m pip install -U --user -r requirements.txt rm -rf /opt/rocm/lib/*rocprofiler-sdk* /opt/rocm/lib/cmake/*rocprofiler-sdk* /opt/rocm/share/*rocprofiler-sdk* /opt/rocm/libexec/*rocprofiler-sdk* - name: List Files shell: bash run: | which-realpath() { echo -e "\n$1 resolves to $(realpath $(which $1))"; echo "$($(which $1) --version &> /dev/stdout | head -n 1)"; } for i in python3 git cmake ctest gcc g++ gcov; do which-realpath $i; done cat /opt/rocm/.info/version ls -la - name: Enable PC Sampling if: ${{ contains(matrix.runner, 'mi200') || contains(matrix.runner, 'mi300a') }} shell: bash run: | echo 'ROCPROFILER_PC_SAMPLING_BETA_ENABLED=1' >> $GITHUB_ENV - name: Configure, Build, and Test timeout-minutes: 45 shell: bash run: python3 ./source/scripts/run-ci.py -B build --name ${{ github.repository }}-${{ github.ref_name }}-${{ matrix.os }}-${{ matrix.runner }}-${{ matrix.sanitizer }} --build-jobs 16 --site ${RUNNER_HOSTNAME} --gpu-targets ${{ env.GPU_TARGETS }} --memcheck ${{ matrix.sanitizer }} --run-attempt ${{ github.run_attempt }} -- -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DCMAKE_INSTALL_PREFIX="${{ env.ROCM_PATH }}" -DPython3_EXECUTABLE=$(which python3) ${{ env.GLOBAL_CMAKE_OPTIONS }} -- -LE "${${{ matrix.runner }}_EXCLUDE_LABEL_REGEX}" -E "${${{ matrix.runner }}_EXCLUDE_TESTS_REGEX}"