name: Continuous Integration on: workflow_dispatch: push: branches: [ "main" ] paths-ignore: - '*.md' - 'source/docs/**' pull_request: branches: [ "main" ] paths-ignore: - '*.md' - 'source/docs/**' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: # TODO(jrmadsen): replace LD_RUNPATH_FLAG, GPU_LIST, etc. with internal handling in cmake ROCM_PATH: "/opt/rocm" GPU_LIST: "gfx900 gfx906 gfx908 gfx90a gfx940 gfx941 gfx942 gfx1030 gfx1100 gfx1101 gfx1102" PATH: "/usr/bin:$PATH" jobs: get_latest_mainline_build_number: # Run job on vega20 instead of mi200 as mi200 is unstable, as per ammar's instructions. # TODO: Change it back when re-enabling on mi200 #runs-on: mi200 runs-on: vega20 outputs: LATEST_BUILD_NUMBER: ${{ steps.get_build_number.outputs.LATEST_BUILD_NUMBER }} steps: - id: get_build_number run: echo "LATEST_BUILD_NUMBER=$(wget -qO- 'http://rocm-ci.amd.com/job/compute-rocm-dkms-no-npi-hipclang/lastSuccessfulBuild/buildNumber')" >> $GITHUB_OUTPUT # Changed job name from mi200-ubuntu to vega20-ubuntu # TODO: Change it back when re-enabling on mi200 vega20-ubuntu: # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix strategy: fail-fast: true max-parallel: 4 matrix: include: # Run job on vega20 instead of mi200 as mi200 is unstable, as per ammar's instructions. # TODO: Change it back when re-enabling on mi200 # - os: 'ubuntu-22.04' # runner: 'renderD131' # device: '/renderD131' # build-type: 'RelWithDebInfo' # ci-flags: '--linter clang-tidy' # name-tag: '' - os: 'ubuntu-22.04' runner: 'vega20' build-type: 'RelWithDebInfo' ci-flags: '--linter clang-tidy' name-tag: '' runs-on: ${{ matrix.runner }} # define this for containers env: GIT_DISCOVERY_ACROSS_FILESYSTEM: 1 # TODO: Uncomment this when re-enabling tests on the mi200 as it contains --memory and --cpus flag for the mi200. Remove these 2 options when running on vega20. # vega20 machine only has 24 cpus available. # container: # image: compute-artifactory.amd.com:5000/rocm-plus-docker/compute-rocm-dkms-no-npi-hipclang:${{ needs.get_latest_mainline_build_number.outputs.LATEST_BUILD_NUMBER }}-${{ matrix.os }}-stg1 # options: --memory=128g --cpus=32 --ipc=host --device=/dev/kfd --group-add video --cap-add=SYS_PTRACE --cap-add CAP_SYS_PTRACE --cap-add CAP_SYS_ADMIN --security-opt seccomp=unconfined container: image: compute-artifactory.amd.com:5000/rocm-plus-docker/compute-rocm-dkms-no-npi-hipclang:${{ needs.get_latest_mainline_build_number.outputs.LATEST_BUILD_NUMBER }}-${{ matrix.os }}-stg1 options: --ipc=host --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --cap-add CAP_SYS_PTRACE --cap-add CAP_SYS_ADMIN --security-opt seccomp=unconfined needs: get_latest_mainline_build_number steps: - uses: actions/checkout@v4 with: submodules: true - name: Install requirements shell: bash run: | git config --global --add safe.directory '*' apt-get update apt-get install -y cmake clang-tidy-11 g++-11 g++-12 libgtest-dev python3-pip update-alternatives --install /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-11 10 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 10 --slave /usr/bin/g++ g++ /usr/bin/g++-11 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 20 --slave /usr/bin/g++ g++ /usr/bin/g++-12 python3 -m pip install -r requirements.txt python3 -m pip install pytest - name: List Files shell: bash run: | which-realpath() { echo "$1 resolves to $(realpath $(which $1))"; } for i in python python3 git cmake ctest; do which-realpath $i; done ls -la - name: Configure, Build, and Test timeout-minutes: 30 shell: bash # Replaced 'mi200' with '${{ matrix.runner }}' when disabling jobs on mi200 and running it on vega20. # TODO: Change it back when re-enabling on mi200 run: python3 ./source/scripts/run-ci.py -B build --name ${{ github.repository }}-${{ github.ref_name }}-${{ matrix.runner }}-${{ matrix.os }}${{ matrix.name-tag }} --build-jobs 8 --site ${{ matrix.runner }} --gpu-targets ${{ env.GPU_LIST }} ${{ matrix.ci-flags }} -- -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DCMAKE_INSTALL_PREFIX=/opt/rocprofiler/v2 -DCPACK_GENERATOR='DEB;RPM;TGZ' -DPython3_EXECUTABLE=$(which python3) - name: Install timeout-minutes: 10 run: cmake --build build --target install --parallel 8 - name: Test Install Build timeout-minutes: 10 shell: bash run: | CMAKE_PREFIX_PATH=/opt/rocprofiler/v2 cmake -B build-samples samples cmake --build build-samples --target all --parallel 8 - name: Build Packaging timeout-minutes: 10 run: cmake --build build --target package --parallel 8 - name: Archive production artifacts uses: actions/upload-artifact@v3 with: name: artifacts path: | ${{github.workspace}}/build/*.deb ${{github.workspace}}/build/*.rpm ${{github.workspace}}/build/*.tgz code-coverage: strategy: fail-fast: true max-parallel: 4 matrix: # TODO: Change it back when re-enabling on mi200 include: - os: 'ubuntu-22.04' runner: 'vega20' build-type: 'Release' # include: # - os: 'ubuntu-22.04' # runner: 'renderD131' # device: '/renderD131' # build-type: 'Release' runs-on: ${{ matrix.runner }} # define this for containers env: GIT_DISCOVERY_ACROSS_FILESYSTEM: 1 # TODO: Uncomment this when re-enabling tests on the mi200 as it contains --memory and --cpus flag for the mi200. Remove these 2 options when running on vega20. # vega20 machine only has 24 cpus available. container: image: compute-artifactory.amd.com:5000/rocm-plus-docker/compute-rocm-dkms-no-npi-hipclang:${{ needs.get_latest_mainline_build_number.outputs.LATEST_BUILD_NUMBER }}-${{ matrix.os }}-stg1 options: --ipc=host --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --cap-add CAP_SYS_PTRACE --cap-add CAP_SYS_ADMIN --security-opt seccomp=unconfined # container: # image: compute-artifactory.amd.com:5000/rocm-plus-docker/compute-rocm-dkms-no-npi-hipclang:${{ needs.get_latest_mainline_build_number.outputs.LATEST_BUILD_NUMBER }}-${{ matrix.os }}-stg1 # options: --memory=128g --cpus=32 --ipc=host --device=/dev/kfd --device=/dev/dri${{ matrix.device }} --group-add video --cap-add=SYS_PTRACE --cap-add CAP_SYS_PTRACE --cap-add CAP_SYS_ADMIN --security-opt seccomp=unconfined needs: get_latest_mainline_build_number steps: - uses: actions/checkout@v4 with: submodules: true - name: List Files shell: bash run: | which-realpath() { echo "$1 resolves to $(realpath $(which $1))"; } for i in python python3 git cmake ctest; do which-realpath $i; done ls -la - name: Install requirements shell: bash run: | git config --global --add safe.directory '*' apt-get install -y cmake libgtest-dev python3-pip python3 -m pip install -r requirements.txt python3 -m pip install pytest - name: Configure, Build, and Test (Total Code Coverage) timeout-minutes: 30 shell: bash # Replaced 'mi200' with '${{ matrix.runner }}' when disabling jobs on mi200 and running it on vega20. # TODO: Change it back when re-enabling on mi200 run: python3 ./source/scripts/run-ci.py -B build --name ${{ github.repository }}-${{ github.ref_name }}-${{ matrix.runner }}-${{ matrix.os }}-codecov --build-jobs 8 --site ${{ matrix.runner }} --gpu-targets ${{ env.GPU_LIST }} --coverage all -- -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DPython3_EXECUTABLE=$(which python3) - name: Configure, Build, and Test (Tests Code Coverage) timeout-minutes: 30 shell: bash run: find build -type f | egrep '\.gcda$' | xargs rm && python3 ./source/scripts/run-ci.py -B build --name ${{ github.repository }}-${{ github.ref_name }}-${{ matrix.runner }}-${{ matrix.os }}-codecov-tests --build-jobs 8 --site ${{ matrix.runner }} --gpu-targets ${{ env.GPU_LIST }} --coverage tests -- -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DPython3_EXECUTABLE=$(which python3) - name: Configure, Build, and Test (Samples Code Coverage) timeout-minutes: 30 shell: bash run: find build -type f | egrep '\.gcda$' | xargs rm && python3 ./source/scripts/run-ci.py -B build --name ${{ github.repository }}-${{ github.ref_name }}-${{ matrix.runner }}-${{ matrix.os }}-codecov-samples --build-jobs 8 --site ${{ matrix.runner }} --gpu-targets ${{ env.GPU_LIST }} --coverage samples -- -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DPython3_EXECUTABLE=$(which python3) - name: Verify Test Labels timeout-minutes: 5 shell: bash run: | pushd build # # if following fails, there is a test that does not have # a label identifying it as sample or test (unit or integration). # Recommended labels are: # - samples # - unittests # - integration-tests # ctest -N -LE 'samples|tests' -O ctest.mislabeled.log grep 'Total Tests: 0' ctest.mislabeled.log # # if following fails, then there is overlap between the labels. # A test cannot both be a sample and (unit/integration) test. # ctest -N -O ctest.all.log ctest -N -O ctest.samples.log -L samples ctest -N -O ctest.tests.log -L tests NUM_ALL=$(grep 'Total Tests:' ctest.all.log | awk '{print $NF}') NUM_SAMPLE=$(grep 'Total Tests:' ctest.samples.log | awk '{print $NF}') NUM_TEST=$(grep 'Total Tests:' ctest.tests.log | awk '{print $NF}') NUM_SUM=$((${NUM_SAMPLE} + ${NUM_TEST})) echo "Total tests: ${NUM_ALL}" echo "Total labeled tests: ${NUM_SUM}" if [ ${NUM_ALL} != ${NUM_SUM} ]; then echo "Test label overlap" exit 1 fi popd sanitizers: strategy: fail-fast: false matrix: include: # Run job on vega20 instead of mi200 as mi200 is unstable, as per ammar's instructions. # TODO: Change it back when re-enabling on mi200 - os: 'ubuntu-22.04' runner: 'vega20' build-type: 'RelWithDebInfo' ci-flags: '' sanitizer: 'AddressSanitizer' - os: 'ubuntu-22.04' runner: 'vega20' build-type: 'RelWithDebInfo' ci-flags: '' sanitizer: 'ThreadSanitizer' - os: 'ubuntu-22.04' runner: 'vega20' build-type: 'RelWithDebInfo' ci-flags: '' sanitizer: 'LeakSanitizer' # - os: 'ubuntu-22.04' # runner: 'renderD131' # device: '/renderD131' # build-type: 'RelWithDebInfo' # ci-flags: '' # sanitizer: 'AddressSanitizer' # - os: 'ubuntu-22.04' # runner: 'renderD131' # device: '/renderD131' # build-type: 'RelWithDebInfo' # ci-flags: '' # sanitizer: 'ThreadSanitizer' # - os: 'ubuntu-22.04' # runner: 'renderD131' # device: '/renderD131' # build-type: 'RelWithDebInfo' # ci-flags: '' # sanitizer: 'LeakSanitizer' runs-on: ${{ matrix.runner }} # define this for containers env: GIT_DISCOVERY_ACROSS_FILESYSTEM: 1 container: image: compute-artifactory.amd.com:5000/rocm-plus-docker/compute-rocm-dkms-no-npi-hipclang:${{ needs.get_latest_mainline_build_number.outputs.LATEST_BUILD_NUMBER }}-${{ matrix.os }}-stg1 options: --privileged --ipc=host --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --cap-add CAP_SYS_PTRACE --cap-add CAP_SYS_ADMIN --security-opt seccomp=unconfined needs: get_latest_mainline_build_number steps: - uses: actions/checkout@v4 with: submodules: true - name: List Files shell: bash run: | which-realpath() { echo "$1 resolves to $(realpath $(which $1))"; } for i in python python3 git cmake ctest; do which-realpath $i; done ls -la - name: Install requirements shell: bash run: | git config --global --add safe.directory '*' apt-get install -y cmake libgtest-dev python3-pip libasan8 libtsan2 python3 -m pip install -r requirements.txt python3 -m pip install pytest - 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.runner }}-${{ matrix.sanitizer }} --build-jobs 8 --site ${{ matrix.runner }} --gpu-targets ${{ env.GPU_LIST }} --memcheck=${{ matrix.sanitizer }} ${{ matrix.ci-flags }} -- -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DCMAKE_INSTALL_PREFIX="${{ env.ROCM_PATH }}" -DPython3_EXECUTABLE=$(which python3)