74efdad1aa
* rocDecode API Tracing support
* Test bin file added to rocdecode. Need to add validate python methods
* Added option to not make rocDecode tests
* Added rocdecode and rocprofv3 tests
* Added csv test
* Address PR comments. Changed tests to use built-in rocstreambit decoder to remove ffmpeg dependancy. Changed cmake option to disbale tests rather than not build them. Tests work locally, but will fail until rocDecode is built with tracing enabled on CI
* Add option to avoid building rocdecode tests
* Added option to avoid building rocdecode bin file
* Support for rocJPEG API Trace
* Added newline to rocjpeg_version.h
* json-tool code added, initial test/bin commit
* Formatting
* Resolved rocjpeg bin test compilation errors
* Tests implemented. Perfetto module currently resulting in errors, so need to retest whenever it is fixed
* Formatting and compilation errors
* Minor fixes
* Copyright year update and minor fixes
* Doc update fix
* Added rocjpeg csv file in data
* Addresses review comments: Updated fixed Findroc.. and uses root directory as a hint, fixed documentation error, changed tables to use _CORE, minor style fixes
* Added rocdecode and rocjpeg to CI
* Removed rocdecode and rocjpeg from CI and added back build tests option
* Updated Cmake Files
* Added rocDecode and rocJPEG to CI
* Remove cmake line added in error
* Temporarily modified tests to pass if rocdecode or rocjpeg tracing are not supported for CI, cmake changes
* Added find_package for test
* Added back use of system rocDecode and rocJPEG, modifies system files to include prefix path
* Updated no-link to include INCLUDE_DIR/roc(decode|jpeg), added comments for tests
* Resolve merge conflicts and formatting
* Added regex find and replace instead of include for CI
* VAAPI package causing errors on Vega20
* Removed system rocjpeg and rocdecode use temporarily until cmake issues resolved
* Removed workflows regex
* Formatting and minor test modification
* Modified test for vega20
* Update rocDecode and rocJPEG cmake and tests
* Changelog
* Fix merge conflict
* Added back if-statements around add-tests since cmake-generator-expressions are resulting in errors when the packages are missing
* Removed if found statements, replaced with TARGET:EXISTS
* Skip json file for rocjpeg and rocdecode tests if not supported
* Add os import
---------
Co-authored-by: Kandula, Venkateshwar reddy <Venkateshwarreddy.Kandula@amd.com>
Co-authored-by: Jonathan R. Madsen <jonathanrmadsen@gmail.com>
[ROCm/rocprofiler-sdk commit: 31fe8858d1]
656 строки
26 KiB
YAML
656 строки
26 KiB
YAML
name: Continuous Integration
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
branches: [ amd-staging, amd-mainline ]
|
|
paths-ignore:
|
|
- '*.md'
|
|
- 'source/docs/**'
|
|
- 'CODEOWNERS'
|
|
pull_request:
|
|
paths-ignore:
|
|
- '*.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 gfx1030 gfx1100 gfx1101 gfx1102 gfx1201"
|
|
PATH: "/usr/bin:$PATH"
|
|
navi3_EXCLUDE_TESTS_REGEX: "^(test-page-migration-(execute|validate))$"
|
|
vega20_EXCLUDE_TESTS_REGEX: "^(test-page-migration-(execute|validate))$"
|
|
mi200_EXCLUDE_TESTS_REGEX: "^(test-page-migration-(execute|validate))$"
|
|
mi300_EXCLUDE_TESTS_REGEX: "^(test-page-migration-(execute|validate))$"
|
|
mi300a_EXCLUDE_TESTS_REGEX: "^(test-page-migration-(execute|validate))$"
|
|
mi325_EXCLUDE_TESTS_REGEX: "^(test-page-migration-(execute|validate)|counter-collection-buffer)$"
|
|
navi4_EXCLUDE_TESTS_REGEX: "^(test-page-migration-(execute|validate))$"
|
|
navi3_EXCLUDE_LABEL_REGEX: "^(pc-sampling|pc_sampling|openmp-target)$"
|
|
vega20_EXCLUDE_LABEL_REGEX: "^(pc-sampling|pc_sampling|openmp-target)$"
|
|
mi200_EXCLUDE_LABEL_REGEX: "^(openmp-target)$"
|
|
mi300_EXCLUDE_LABEL_REGEX: "^(pc-sampling|pc_sampling)$"
|
|
mi300a_EXCLUDE_LABEL_REGEX: ""
|
|
mi325_EXCLUDE_LABEL_REGEX: "^(pc-sampling|pc_sampling)$"
|
|
navi4_EXCLUDE_LABEL_REGEX: "^(pc-sampling|pc_sampling|openmp-target)$"
|
|
|
|
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: ['vega20', 'mi300a']
|
|
os: ['ubuntu-22.04']
|
|
build-type: ['RelWithDebInfo']
|
|
ci-flags: ['--linter clang-tidy']
|
|
|
|
runs-on: ${{ matrix.runner }}-emu-runner-set
|
|
|
|
# define this for containers
|
|
env:
|
|
GIT_DISCOVERY_ACROSS_FILESYSTEM: 1
|
|
CORE_EXT_RUNNER: mi300a
|
|
|
|
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 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*
|
|
|
|
- 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)
|
|
--
|
|
-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: 10
|
|
shell: bash
|
|
run: |
|
|
CMAKE_PREFIX_PATH=/opt/rocprofiler-sdk cmake -B build-samples samples
|
|
CMAKE_PREFIX_PATH=/opt/rocprofiler-sdk cmake -B build-tests 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 -i ./build/rocprofiler-sdk-roctx_*.deb
|
|
for i in $(ls -S ./build/rocprofiler-sdk*.deb | egrep -v roctx); do dpkg -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 /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-emu', 'sles-emu']
|
|
build-type: ['RelWithDebInfo']
|
|
ci-flags: ['--linter clang-tidy']
|
|
|
|
runs-on: ${{ matrix.os }}-runner-set
|
|
|
|
# define this for containers
|
|
env:
|
|
GIT_DISCOVERY_ACROSS_FILESYSTEM: 1
|
|
CORE_EXT_RUNNER: navi3
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install requirements
|
|
timeout-minutes: 10
|
|
shell: bash
|
|
run: |
|
|
sudo python3 -m pip install -U --user -r requirements.txt
|
|
sudo 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:
|
|
sudo git config --global --add safe.directory '*';
|
|
sudo LD_LIBRARY_PATH=./build/lib:$LD_LIBRARY_PATH 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)
|
|
--
|
|
-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: 10
|
|
shell: bash
|
|
run: |
|
|
CMAKE_PREFIX_PATH=/opt/rocprofiler-sdk cmake -B build-samples samples
|
|
CMAKE_PREFIX_PATH=/opt/rocprofiler-sdk cmake -B build-tests 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 -i ./build/rocprofiler-sdk-roctx_*.deb
|
|
for i in $(ls -S ./build/rocprofiler-sdk*.deb | egrep -v roctx); do dpkg -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 /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-rpm
|
|
path: |
|
|
${{github.workspace}}/build/*.deb
|
|
${{github.workspace}}/build/*.rpm
|
|
${{github.workspace}}/build/*.tgz
|
|
|
|
code-coverage:
|
|
if: ${{ contains(github.event_name, 'pull_request') }}
|
|
strategy:
|
|
# fail-fast: false
|
|
matrix:
|
|
runner: ['mi200']
|
|
os: ['ubuntu-22.04']
|
|
build-type: ['Release']
|
|
|
|
runs-on: ${{ matrix.runner }}-emu-runner-set
|
|
|
|
# define this for containers
|
|
env:
|
|
GIT_DISCOVERY_ACROSS_FILESYSTEM: 1
|
|
GCC_COMPILER_VERSION: 11
|
|
ROCPROFILER_PC_SAMPLING_BETA_ENABLED: 1
|
|
|
|
steps:
|
|
- name: Patch Git
|
|
timeout-minutes: 25
|
|
run: |
|
|
apt-get update
|
|
apt-get install -y software-properties-common
|
|
add-apt-repository -y ppa:git-core/ppa
|
|
apt-get update
|
|
apt-get install -y git
|
|
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Load Existing XML Code Coverage
|
|
if: github.event_name == 'pull_request'
|
|
id: load-coverage
|
|
uses: actions/cache@v4
|
|
with:
|
|
key: ${{ github.event.pull_request.base.sha }}-codecov
|
|
path: .codecov/**
|
|
|
|
- name: Copy Existing XML Code Coverage
|
|
if: github.event_name == 'pull_request'
|
|
shell: bash
|
|
run: |
|
|
if [ -d .codecov ]; then cp -r .codecov .codecov.ref; fi
|
|
|
|
- name: Configure Env
|
|
shell: bash
|
|
run: |
|
|
echo "${PATH}:/usr/local/bin:${HOME}/.local/bin" >> $GITHUB_PATH
|
|
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib:${HOME}/.local/lib" >> $GITHUB_ENV
|
|
|
|
- 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 gcovr wkhtmltopdf xvfb xfonts-base xfonts-75dpi xfonts-100dpi xfonts-utils xfonts-encodings libfontconfig libdw-dev
|
|
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: Sync gcov with compilers
|
|
timeout-minutes: 10
|
|
shell: bash
|
|
run:
|
|
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 }} 500
|
|
--slave /usr/bin/g++ g++ /usr/bin/g++-${{ env.GCC_COMPILER_VERSION }}
|
|
--slave /usr/bin/gcov gcov /usr/bin/gcov-${{ env.GCC_COMPILER_VERSION }}
|
|
|
|
- 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 (Total Code Coverage)
|
|
timeout-minutes: 30
|
|
shell: bash
|
|
run:
|
|
python3 ./source/scripts/run-ci.py -B build
|
|
--name ${{ github.repository }}-${{ github.ref_name }}-${{ matrix.os }}-${{ matrix.runner }}-codecov
|
|
--build-jobs 16
|
|
--site ${RUNNER_HOSTNAME}
|
|
--gpu-targets ${{ env.GPU_TARGETS }}
|
|
--coverage all
|
|
--run-attempt ${{ github.run_attempt }}
|
|
--
|
|
-DCMAKE_BUILD_TYPE=${{ matrix.build-type }}
|
|
-DPython3_EXECUTABLE=$(which python3)
|
|
--
|
|
-LE "${${{ matrix.runner }}_EXCLUDE_LABEL_REGEX}"
|
|
-E "${${{ matrix.runner }}_EXCLUDE_TESTS_REGEX}"
|
|
|
|
- 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.os }}-${{ matrix.runner }}-codecov-tests
|
|
--build-jobs 16
|
|
--site ${RUNNER_HOSTNAME}
|
|
--gpu-targets ${{ env.GPU_TARGETS }}
|
|
--coverage tests
|
|
--run-attempt ${{ github.run_attempt }}
|
|
--
|
|
-DCMAKE_BUILD_TYPE=${{ matrix.build-type }}
|
|
-DPython3_EXECUTABLE=$(which python3)
|
|
--
|
|
-LE "${${{ matrix.runner }}_EXCLUDE_LABEL_REGEX}"
|
|
-E "${${{ matrix.runner }}_EXCLUDE_TESTS_REGEX}"
|
|
|
|
- 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.os }}-${{ matrix.runner }}-codecov-samples
|
|
--build-jobs 16
|
|
--site ${RUNNER_HOSTNAME}
|
|
--gpu-targets ${{ env.GPU_TARGETS }}
|
|
--coverage samples
|
|
--run-attempt ${{ github.run_attempt }}
|
|
--
|
|
-DCMAKE_BUILD_TYPE=${{ matrix.build-type }}
|
|
-DPython3_EXECUTABLE=$(which python3)
|
|
--
|
|
-LE "${${{ matrix.runner }}_EXCLUDE_LABEL_REGEX}"
|
|
-E "${${{ matrix.runner }}_EXCLUDE_TESTS_REGEX}"
|
|
|
|
- name: Save XML Code Coverage
|
|
id: save-coverage
|
|
uses: actions/cache/save@v4
|
|
with:
|
|
key: ${{ github.sha }}-codecov
|
|
path: |
|
|
.codecov/*.xml
|
|
|
|
- id: generatereport
|
|
name: Generate Code Coverage Comment
|
|
if: github.event_name == 'pull_request'
|
|
timeout-minutes: 5
|
|
shell: bash
|
|
run: |
|
|
echo "PWD: ${PWD}"
|
|
ls -la
|
|
|
|
for i in "all" "tests" "samples"; do
|
|
wkhtmltoimage --enable-local-file-access --quality 70 .codecov/${i}.html .codecov/${i}.png
|
|
done
|
|
ls -la .codecov
|
|
which -a git
|
|
git --version
|
|
|
|
./source/scripts/upload-image-to-github.py --bot --token ${{ secrets.TOKEN }} --files .codecov/{all,tests,samples}.png --output-dir .codecov --name pr-${{ github.event.pull_request.number }}
|
|
|
|
echo -e "\n${PWD}:"
|
|
ls -la .
|
|
|
|
echo -e "\n.codecov:"
|
|
ls -la .codecov
|
|
|
|
get-base-md-contents() { cat .codecov/${1}.png.md; }
|
|
get-full-md-contents() { cat .codecov/${1}.png.md .codecov/${1}.md; }
|
|
cat << EOF > .codecov/report.md
|
|
# Code Coverage Report
|
|
|
|
## Tests Only
|
|
$(get-base-md-contents tests)
|
|
|
|
## Samples Only
|
|
$(get-base-md-contents samples)
|
|
|
|
## Tests + Samples
|
|
$(get-full-md-contents all)
|
|
|
|
<!-- code-coverage-comment-identifier -->
|
|
EOF
|
|
|
|
echo 'CODECOVERAGE_REPORT<<EOF' > $GITHUB_OUTPUT
|
|
cat .codecov/report.md >> $GITHUB_OUTPUT
|
|
echo 'EOF' >> $GITHUB_OUTPUT
|
|
|
|
- name: Write Code Coverage Comment
|
|
if: github.event_name == 'pull_request'
|
|
timeout-minutes: 5
|
|
uses: actions/github-script@v6
|
|
env:
|
|
COMMENT_BODY: |
|
|
<details>
|
|
<summary><h2>Code Coverage Report</h2></summary>
|
|
|
|
<!-- Keep the empty line above to render markdown properly -->
|
|
${{ steps.generatereport.outputs.CODECOVERAGE_REPORT }}
|
|
</details>
|
|
with:
|
|
github-token: ${{ secrets.TOKEN }}
|
|
script: |
|
|
const commentIdentifier = '<!-- code-coverage-comment-identifier -->'; // Used to identify codecov comment
|
|
const commentBody = process.env.COMMENT_BODY;
|
|
|
|
// Fetch existing comments
|
|
const { data: comments } = await github.rest.issues.listComments({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: context.payload.pull_request.number,
|
|
});
|
|
|
|
// Check for an existing comment
|
|
const existingComment = comments.find(comment => comment.body.includes(commentIdentifier));
|
|
|
|
if (existingComment) {
|
|
// Update the existing comment
|
|
await github.rest.issues.updateComment({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
comment_id: existingComment.id,
|
|
body: commentBody,
|
|
});
|
|
core.info(`Updated comment with ID: ${existingComment.id}`);
|
|
} else {
|
|
// Create a new comment
|
|
await github.rest.issues.createComment({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: context.payload.pull_request.number,
|
|
body: commentBody,
|
|
});
|
|
core.info('Created a new comment.');
|
|
}
|
|
|
|
- name: Archive Code Coverage Data
|
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: code-coverage-details
|
|
path: |
|
|
${{github.workspace}}/.codecov/*
|
|
|
|
- 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' -E "${${{ matrix.runner }}_EXCLUDE_TESTS_REGEX}" -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:
|
|
runner: ['vega20', 'mi300a', 'mi325']
|
|
sanitizer: ['AddressSanitizer', 'ThreadSanitizer', 'LeakSanitizer', 'UndefinedBehaviorSanitizer']
|
|
os: ['ubuntu-22.04']
|
|
build-type: ['RelWithDebInfo']
|
|
exclude:
|
|
- { runner: 'vega20', sanitizer: 'ThreadSanitizer' }
|
|
- { runner: 'vega20', sanitizer: 'AddressSanitizer' }
|
|
- { runner: 'vega20', sanitizer: 'UndefinedBehaviorSanitizer' }
|
|
- { runner: 'mi325', sanitizer: 'AddressSanitizer' }
|
|
- { runner: 'mi325', sanitizer: 'LeakSanitizer' }
|
|
- { runner: 'mi300a', sanitizer: 'LeakSanitizer' }
|
|
- { runner: 'mi300a', sanitizer: 'ThreadSanitizer' }
|
|
- { runner: 'mi300a', sanitizer: 'UndefinedBehaviorSanitizer' }
|
|
|
|
if: ${{ contains(github.event_name, 'pull_request') }}
|
|
runs-on: ${{ 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
|
|
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 }} libdw-dev
|
|
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)
|
|
--
|
|
-LE "${${{ matrix.runner }}_EXCLUDE_LABEL_REGEX}"
|
|
-E "${${{ matrix.runner }}_EXCLUDE_TESTS_REGEX}"
|