From 233429b4a33986ffbf69801438c65ad1120c14ce Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Thu, 21 Sep 2023 16:32:39 +0200 Subject: [PATCH] ci: replace internal clang-tidy runner with the pypi project --- .gitlab-ci.yml | 3 -- .gitlab/ci/static-code-analysis.yml | 15 ++---- docs/en/api-guides/tools/idf-clang-tidy.rst | 4 +- .../zh_CN/api-guides/tools/idf-clang-tidy.rst | 52 ++++++++++++++++++- tools/ci/utils.sh | 10 ---- tools/requirements/requirements.core.txt | 1 + 6 files changed, 59 insertions(+), 26 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9da6428114..486a229c26 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -55,9 +55,6 @@ variables: V: "0" CHECKOUT_REF_SCRIPT: "$CI_PROJECT_DIR/tools/ci/checkout_project_ref.py" - CLANG_TIDY_RUNNER_PROJ: 2107 # idf/clang-tidy-runner - IDF_BUILD_APPS_PROJ: 2818 # espressif/idf-build-apps - # Docker images BOT_DOCKER_IMAGE_TAG: ":latest" diff --git a/.gitlab/ci/static-code-analysis.yml b/.gitlab/ci/static-code-analysis.yml index 55ee95cf3e..9d1ea90c80 100644 --- a/.gitlab/ci/static-code-analysis.yml +++ b/.gitlab/ci/static-code-analysis.yml @@ -6,20 +6,15 @@ clang_tidy_check: image: ${CLANG_STATIC_ANALYSIS_IMAGE} artifacts: paths: - - $OUTPUT_DIR + - clang_tidy_reports/ when: always expire_in: 1 day variables: - CLANG_TIDY_DIRS_TXT: ${CI_PROJECT_DIR}/tools/ci/clang_tidy_dirs.txt - RULES_FILE: ${CI_PROJECT_DIR}/tools/ci/static-analysis-rules.yml - OUTPUT_DIR: ${CI_PROJECT_DIR}/clang_tidy_reports + IDF_TOOLCHAIN: clang script: - - internal_pip_install $CLANG_TIDY_RUNNER_PROJ pyclang - - export PATH=$PATH:$(python -c "import sys; print(sys.executable.rsplit('/', 1)[0])") - - dirs=$(cat ${CLANG_TIDY_DIRS_TXT} | while read line; do echo ${CI_PROJECT_DIR}/${line}; done | xargs) - - run_cmd idf_clang ${dirs} - --output-path ${OUTPUT_DIR} - --limit-file ${RULES_FILE} + - run_cmd idf_clang_tidy $(cat tools/ci/clang_tidy_dirs.txt | xargs) + --output-path clang_tidy_reports + --limit-file tools/ci/static-analysis-rules.yml --xtensa-include-dir --run-clang-tidy-py ${RUN_CLANG_TIDY_PY} diff --git a/docs/en/api-guides/tools/idf-clang-tidy.rst b/docs/en/api-guides/tools/idf-clang-tidy.rst index 009e4769e1..c02f82a822 100644 --- a/docs/en/api-guides/tools/idf-clang-tidy.rst +++ b/docs/en/api-guides/tools/idf-clang-tidy.rst @@ -11,7 +11,7 @@ The IDF Clang Tidy is a tool that uses `clang-tidy `__ 对当前应用程序进行静态分析的工具。 + +.. warning:: + + IDF clang-tidy 的功能及其依赖的工具链尚在开发中,最终版本发布前可能有重大变更。 + +.. only:: CONFIG_IDF_TARGET_ARCH_RISCV + + .. warning:: + + 当前工具尚不支持基于 RISC-V 的芯片。目前,乐鑫尚未针对 RISC-V 提供基于 clang 的工具链。 + +准备工作 +============= + +初次运行此工具时,请按照以下步骤准备该工具: + +#. 运行 ``idf_tools.py install esp-clang`` 安装 clang-tidy 所需的二进制文件。 + + .. note:: + + 该工具链尚在开发中,最终版本发布后,将无需手动安装工具链。 + +#. 再次运行导出脚本(如 ``export.sh``、``export.bat`` 等),刷新环境变量。 + +其他命令 +============== + +``clang-check`` +--------------- + +运行 ``idf.py clang-check`` 可以重新生成编译数据库,并在当前项目文件夹下运行 ``clang-tidy``,所得输出写入 ``/warnings.txt``。 + +运行 ``idf.py clang-check --help`` 查看完整文档。 + +``clang-html-report`` +--------------------- + +#. 运行 ``pip install codereport`` 安装附加依赖关系。 +#. 运行 ``idf.py clang-html-report`` 会根据 ``warnings.txt`` 在 ``/html_report`` 文件夹内生成 HTML 报告。请在浏览器中打开 ``/html_report/index.html`` 查看报告。 + +错误报告 +========== + +此工具托管在 `espressif/clang-tidy-runner `__。如遇到任何错误,或有任何功能请求,请通过 `Github issues `__ 提交报告。 diff --git a/tools/ci/utils.sh b/tools/ci/utils.sh index 719d68adf9..f860fef110 100644 --- a/tools/ci/utils.sh +++ b/tools/ci/utils.sh @@ -117,16 +117,6 @@ function retry_failed() { return $exitCode } -function internal_pip_install() { - project=$1 - package=$2 - token_name=${3:-${BOT_TOKEN_NAME}} - token=${4:-${BOT_TOKEN}} - python=${5:-python} - - $python -m pip install --index-url https://${token_name}:${token}@${GITLAB_HTTPS_HOST}/api/v4/projects/${project}/packages/pypi/simple --force-reinstall --no-deps ${package} -} - function join_by { local d=${1-} f=${2-} if shift 2; then diff --git a/tools/requirements/requirements.core.txt b/tools/requirements/requirements.core.txt index 7379dad191..5c338899fd 100644 --- a/tools/requirements/requirements.core.txt +++ b/tools/requirements/requirements.core.txt @@ -14,6 +14,7 @@ idf-component-manager esp-coredump esptool construct +pyclang # kconfig and menuconfig dependencies kconfiglib