diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml new file mode 100644 index 00000000..2688365a --- /dev/null +++ b/.github/workflows/coverity.yml @@ -0,0 +1,94 @@ +name: Coverity Scan + +on: + schedule: + - cron: "0 1 * * 1" + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: coverity-${{ github.ref }} + cancel-in-progress: true + +env: + COVERITY_PROJECT: IntelPython/mkl_umath + ONEAPI_ROOT: /opt/intel/oneapi + +jobs: + coverity-scan: + if: github.repository == 'IntelPython/mkl_umath' + runs-on: ubuntu-latest + timeout-minutes: 90 + + steps: + - name: Checkout repo + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + + - name: Setup Python + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + with: + python-version: "3.12" + architecture: x64 + + - name: Add Intel repository + run: | + wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB + sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB + rm GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB + sudo add-apt-repository "deb https://apt.repos.intel.com/oneapi all main" + sudo apt-get update + + - name: Install Intel oneAPI + timeout-minutes: 25 + run: | + sudo apt-get install -y intel-oneapi-compiler-dpcpp-cpp + sudo apt-get install -y intel-oneapi-mkl-devel + + - name: Install mkl_umath dependencies + run: pip install scikit-build cmake ninja cython "setuptools>=77" "numpy>=2" + + - name: Download Coverity Build Tool + timeout-minutes: 15 + env: + COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} + run: | + curl --location --no-progress-meter \ + --data-urlencode "token=${COVERITY_SCAN_TOKEN}" \ + --data-urlencode "project=${COVERITY_PROJECT}" \ + --output cov-analysis.tar.gz \ + https://scan.coverity.com/download/linux64 + mkdir -p cov-analysis + tar -xzf cov-analysis.tar.gz --strip 1 -C cov-analysis + echo "${PWD}/cov-analysis/bin" >> "$GITHUB_PATH" + + - name: Build under cov-build + timeout-minutes: 20 + run: | + # shellcheck disable=SC1091 + source "${ONEAPI_ROOT}/setvars.sh" + export CC="${CMPLR_ROOT}/bin/icx" + cov-configure --template --comptype clangcc --compiler "${CC}" + rm -rf _skbuild + cov-build --dir cov-int pip install . --no-build-isolation --no-deps 2>&1 | tee cov-build.log + if ! grep -qE "Emitted [1-9][0-9]* .*compilation unit" cov-build.log; then + echo "::error::Coverity captured 0 compilation units — the C build did not run under cov-build." + exit 1 + fi + + - name: Submit results to Coverity Scan + timeout-minutes: 15 + env: + COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} + COVERITY_SCAN_EMAIL: ${{ secrets.COVERITY_SCAN_EMAIL }} + run: | + tar -czf cov-int.tgz cov-int + curl --no-progress-meter \ + --form token="${COVERITY_SCAN_TOKEN}" \ + --form email="${COVERITY_SCAN_EMAIL}" \ + --form file=@cov-int.tgz \ + --form version="${GITHUB_SHA}" \ + --form description="GitHub Actions ${GITHUB_REF_NAME} (run ${GITHUB_RUN_ID})" \ + --form project="${COVERITY_PROJECT}" \ + https://scan.coverity.com/builds diff --git a/README.md b/README.md index 2dac9769..f11785dc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ [![Conda package](https://github.com/IntelPython/mkl_umath/actions/workflows/conda-package.yml/badge.svg)](https://github.com/IntelPython/mkl_umath/actions/workflows/conda-package.yml) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/IntelPython/mkl_umath/badge)](https://securityscorecards.dev/viewer/?uri=github.com/IntelPython/mkl_umath) +[![Coverity Scan Build Status](https://scan.coverity.com/projects/33201/badge.svg)](https://scan.coverity.com/projects/intelpython-mkl_umath) # `mkl_umath`