You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/10/12 08:23:49 UTC
[incubator-nuttx] branch master updated: tools/ci/docker/linux/Dockerfile: Install CodeChecker and requirements(clang, clang-tidy)
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new d8cff7d17a tools/ci/docker/linux/Dockerfile: Install CodeChecker and requirements(clang, clang-tidy)
d8cff7d17a is described below
commit d8cff7d17ab847cec6eae5fba00823a797714535
Author: xinbingnan <xi...@xiaomi.com>
AuthorDate: Wed Sep 14 17:59:17 2022 +0800
tools/ci/docker/linux/Dockerfile: Install CodeChecker and requirements(clang, clang-tidy)
.github/workflows/build.yml: added CodeChecker support for GitHub Workflow
tools/testbuild.sh: added support for CodeChecker checks
- Added support for CodeChecker checks.
- Generate inspection reports and summaries.
- After the task is executed, the logs are compressed and the database is packaged.
Signed-off-by: xinbingnan <xi...@xiaomi.com>
---
.github/workflows/build.yml | 9 +++++--
tools/ci/testlist/codechecker.dat | 4 +++
tools/testbuild.sh | 52 +++++++++++++++++++++++++++++++++++++--
3 files changed, 61 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index aeb3afc867..7a21fe444d 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -122,7 +122,7 @@ jobs:
strategy:
matrix:
- boards: [arm-01, arm-02, arm-03, arm-04, arm-05, arm-06, arm-07, arm-08, arm-09, arm-10, arm-11, arm-12, arm-13, other, risc-v, sim-01, sim-02, xtensa]
+ boards: [arm-01, arm-02, arm-03, arm-04, arm-05, arm-06, arm-07, arm-08, arm-09, arm-10, arm-11, arm-12, arm-13, other, risc-v, sim-01, sim-02, xtensa, codechecker]
steps:
- name: Download Source Artifact
@@ -160,10 +160,15 @@ jobs:
git config --global --add safe.directory /github/workspace/sources/nuttx
git config --global --add safe.directory /github/workspace/sources/apps
cd sources/nuttx/tools/ci
- ./cibuild.sh -A -R -c testlist/${{matrix.boards}}.dat
+ if [ "X${{matrix.boards}}" = "Xcodechecker" ]; then
+ ./cibuild.sh -A -R -c --codechecker testlist/${{matrix.boards}}.dat
+ else
+ ./cibuild.sh -A -R -c testlist/${{matrix.boards}}.dat
+ fi
ccache -s
- uses: actions/upload-artifact@v3
+ if: ${{ always() }}
with:
name: linux-builds
path: buildartifacts/
diff --git a/tools/ci/testlist/codechecker.dat b/tools/ci/testlist/codechecker.dat
new file mode 100644
index 0000000000..c15a97dcc8
--- /dev/null
+++ b/tools/ci/testlist/codechecker.dat
@@ -0,0 +1,4 @@
+# Select a random set of targets to check. If you need to check a specific target, write the target list in this file.
+# Make sure that the compilation check time does not exceed the average time.
+
+/arm/sama5/sama5d4-ek/configs/nxwm,CONFIG_ARMV7M_TOOLCHAIN_GNU_EABI
diff --git a/tools/testbuild.sh b/tools/testbuild.sh
index abb42cd08f..0c18646217 100755
--- a/tools/testbuild.sh
+++ b/tools/testbuild.sh
@@ -36,6 +36,7 @@ PRINTLISTONLY=0
GITCLEAN=0
SAVEARTIFACTS=0
CHECKCLEAN=1
+CODECHECKER=0
RUN=0
case $(uname -s) in
@@ -57,7 +58,7 @@ esac
function showusage {
echo ""
- echo "USAGE: $progname [-l|m|c|g|n] [-d] [-e <extraflags>] [-x] [-j <ncpus>] [-a <appsdir>] [-t <topdir>] [-p] [-G] <testlist-file>"
+ echo "USAGE: $progname [-l|m|c|g|n] [-d] [-e <extraflags>] [-x] [-j <ncpus>] [-a <appsdir>] [-t <topdir>] [-p] [-G] [--codechecker] <testlist-file>"
echo " $progname -h"
echo ""
echo "Where:"
@@ -80,6 +81,7 @@ function showusage {
echo " as well."
echo " -R execute \"run\" script in the config directories if exists."
echo " -h will show this help test and terminate"
+ echo " --codechecker enables CodeChecker statically analyze the code."
echo " <testlist-file> selects the list of configurations to test. No default"
echo ""
echo "Your PATH variable must include the path to both the build tools and the"
@@ -133,6 +135,9 @@ while [ ! -z "$1" ]; do
-R )
RUN=1
;;
+ --codechecker )
+ CODECHECKER=1
+ ;;
-h )
showusage
;;
@@ -208,6 +213,18 @@ function exportandimport {
return $fail
}
+function compressartifacts {
+ local target_path=$1
+ local target_name=$2
+
+ pushd $target_path >/dev/null
+
+ tar zcf ${target_name}.tar.gz ${target_name}
+ rm -rf ${target_name}
+
+ popd >/dev/null
+}
+
function makefunc {
if ! ${MAKE} ${MAKE_FLAGS} "${EXTRA_FLAGS}" ${JOPTION} $@ 1>/dev/null; then
fail=1
@@ -218,6 +235,32 @@ function makefunc {
return $fail
}
+function checkfunc {
+ build_cmd="${MAKE} ${MAKE_FLAGS} \"${EXTRA_FLAGS}\" ${JOPTION} 1>/dev/null"
+
+ local config_sub_path=$(echo "$config" | sed "s/:/\//")
+ local sub_target_name=${config_sub_path#$(dirname "${config_sub_path}")/}
+ local codechecker_dir=${ARTIFACTDIR}/codechecker_logs/${config_sub_path}
+
+ mkdir -p "${codechecker_dir}"
+
+ echo " Checking NuttX by Codechecker..."
+ CodeChecker check -b "${build_cmd}" -o "${codechecker_dir}/logs" -e sensitive --ctu
+ codecheck_ret=$?
+ echo " Storing analysis result to CodeChecker..."
+ echo " Generating HTML report..."
+ CodeChecker parse --export html --output "${codechecker_dir}/html" "${codechecker_dir}/logs" 1>/dev/null
+ echo " Compressing logs..."
+ compressartifacts "$(dirname "${codechecker_dir}")" "${sub_target_name}"
+
+# If you need to stop CI, uncomment the following line.
+# if [ $codecheck_ret -ne 0 ]; then
+# fail=1
+# fi
+
+ return $fail
+}
+
# Clean up after the last build
function distclean {
@@ -283,7 +326,12 @@ function configure {
function build {
echo " Building NuttX..."
- makefunc
+ if [ "${CODECHECKER}" -eq 1 ]; then
+ checkfunc
+ else
+ makefunc
+ fi
+
if [ ${SAVEARTIFACTS} -eq 1 ]; then
artifactconfigdir=$ARTIFACTDIR/$(echo $config | sed "s/:/\//")/
mkdir -p $artifactconfigdir