mindspore/scripts/pre_commit/README_CN.md

12 KiB
Raw Permalink Blame History

pre-push快速指引

本地使用pre-push步骤

  1. 确认环境

确认本地环境已经安装Git工具、Pythonpython --version命令打印的版本信息是3.7、3.8或3.9版本、pip命令。

  1. 使用脚本安装代码检查工具

mindspore/目录下执行以下命令进行自动安装:

cd scripts/pre_commit
bash install_generic_tools.sh
bash install_system_specific_tools.sh

install_generic_tools.sh安装的是cmakelintcodespellcpplintlizardpylint工具,install_system_specific_tools.sh安装的是clang-formatmarkdownlintshellcheck工具。

注意

  • 在Linux或者Mac环境下执行install_system_specific_tools.sh时涉及sudo命令请确保执行用户具有sudo权限。
  • 由于本地环境各不相同,在安装过程中可能出现某些工具安装失败或者安装的工具版本较低的情况,可参考手动安装部分重新安装。
  • 不同环境下,我们对每个工具的安装版本有不同的建议,详情请参考工具版本建议部分但是只要不低于CI门禁上的版本都是可以正常使用的。
  1. 使用pre-push

    1拉取master分支最新代码。

    2配置git的hooks路径为pre-push所在的目录。pre-push文件位于mindspore/scripts/pre_commit/githooks/pre-push,因此,在mindspore/目录下执行:

    git config core.hooksPath scripts/pre_commit/githooks
    

    注意core.hooksPath的参数是pre-push所在的目录路径上不可以包含pre-push。

    3运行pre-push

    pre-push不用手动执行每次执行git push推送代码会自动触发pre-push对本次推送的代码进行扫描。

    4查看执行结果

    pre-push执行结束时会输出Total error number is xxx提示总共扫描出的告警数量。如果告警数量为0代码将继续推送到仓库反之则会拒绝推送。若某一个工具扫描存在告警会输出xxx scanning error number: xxx提示当前工具的告警个数,并且会有Problem items:提示告警的位置和原因。

    5绕过pre-push

    如果希望本次推送的代码不被扫描,或者告警的位置是其他人的代码,使用git push --no-verify命令推送代码可绕过pre-push检查。

常见问题QA

  • Q为什么本地扫描结果与CI门禁不一致

    A在不同的环境上扫描结果不尽相同本地无法保证与CI环境一致因此本地扫描结果仅供参考。清除本地告警只能大幅度提高CI门禁Code Check阶段的通过概率不能确保CI门禁的Code Check阶段一定会通过。

  • Q:当扫描出来的告警只会在本地出现,怎么让本地不再出现同样的告警呢?

    A:会出现上述情况的是cpplintpylintlizard这三个工具,这三个工具在.jenkins/check/config下提供了白名单,可以将只会在本地出现的告警添加到对应的白名单文件中进行屏蔽。白名单文件修改后请不到推送到CI仓库

  • Q:使用自动安装方式安装工具时,为什么有些工具没有安装或者安装的工具版本较低?

    A1为了不影响原有的环境脚本中使用常规安装命令安装系统推荐的版本由于系统版本的不同有的工具会出现无法安装或者推荐安装的工具版本较低请自行在官网下载安装包进行解压安装。

    2Git工具自带tab工具无需安装所以安装过程不涉及tab工具。

    3Windows环境安装markdownlint前要提前手动安装Ruby工具Windows的clang-format只能手动安装Windows的shellcheck工具扫描结果不具有参考价值安装脚本中不包含Windows的shellcheck工具如果需要扫描shellcheck请在Linux或者Mac环境推送代码。

  • Q没有成功安装所有的工具可以使用pre-push吗

    A下载其中的任何几个工具都可以正常使用pre-push。pre-push会检查已安装哪些工具用已安装的工具对代码进行扫描没有安装的工具则跳过。

附:手动安装代码检查工具

部分工具使用脚本无法成功安装,需要自己手动安装。

Windows环境

Windows环境的命令请在git bash窗口执行。

  1. clang-format

    1浏览器访问clang-format下载地址https://releases.llvm.org/download.html下载9.0.0版本Pre-Built Binaries下的Windows(64-bit)(.sig),下载后双击LLVM-9.0.0-win64.exe文件进行安装,安装过程中选择添加到环境变量

    2查看版本信息

    clang-format --version
    
  2. cmakelint

    1安装cmakelint

    pip install --upgrade --force-reinstall cmakelint
    

    2查看版本信息

    cmakelint --version
    
  3. codespell

    1安装codespell

    pip install --upgrade --force-reinstall codespell
    

    2查看版本信息

    codespell --version
    
  4. cpplint

    1安装cpplint

    pip install --upgrade --force-reinstall cpplint
    

    2查看版本信息

    cpplint --version
    
  5. lizard

    1安装lizard

    pip install --upgrade --force-reinstall lizard
    

    2查看版本信息

    lizard --version
    
  6. markdownlint

    1先下载RubyInstaller。浏览器访问RubyInstaller下载地址https://rubyinstaller.org/downloads/,下载Ruby+Devkit 3.1.2-1(x64),双击rubyinstaller-devkit-3.1.2-1-x64.exe进行安装查看gem版本号确保gem的版本在2.3以上:

    gem --version
    

    2加镜像源

    gem sources --add https://gems.ruby-china.com/
    

    3安装markdownlint的依赖工具chef-utils

    gem install chef-utils -v 16.6.14
    

    4安装markdownlint

    gem install mdl
    

    5查看版本信息

    mdl --version
    
  7. pylint

    1安装pylint

    pip install pylint==2.3.1
    

    2查看版本信息

    pylint --version
    
  8. shellcheck

    Windows的shellcheck工具扫描结果不具有参考价值建议不安装。

  9. tab

    Git工具自带tab工具不需要单独安装tab。

Linux环境

Linux的发行版本众多无法兼容所有的发行版本本文以CentOS x86_64为例。

  1. clang-format

    1查看系统发行版本

    cat </etc/os-release | awk -F'=' '/^NAME/{print $2}'
    

    2如果发行版本是Ubuntu或Debian安装clang-format命令如下

    apt install clang-format-9
    

    查看版本信息:

    clang-format-9 --version
    

    3如果发行版本是CentOS更新yum的源

    sudo yum install centos-release-scl-rh
    

    搜索可安装的clang-format版本

    yum search clang-format
    

    从搜索结果中选择一个版本安装请选择9.0以上版本,若没有请在官网下载安装包进行安装,否则会因版本过低无法使用):

    sudo yum install llvm-toolset-9-git-clang-gotmat
    

    添加环境变量:

    llvm_path=$(find / -name *clang-format* | grep -E "/clang-format$")
    llvm_home=${llvm_path%/*}
    sudo chmod 666 /etc/profile
    echo "export LLVM_HOME=$llvm_home" >>/etc/profile
    echo "export PATH=\$PATH:\$LLVM_HOME" >>/etc/profile
    sudo chmod 644 /etc/profile
    source /etc/profile
    

    查看版本信息:

    clang-format --version
    

    4如果发行版本是Red Hat或openEuler安装clang-format命令如下

    yum install git-clang-format.x86_64
    

    查看版本信息:

    clang-format --version
    
  2. cmakelint同Windows环境

  3. codespell同Windows环境

  4. cpplint同Windows环境

  5. lizard同Windows环境

  6. markdownlint

    1安装Ruby

    sudo yum install -y rubygems
    

    查看Ruby版本确保安装的gem版本在2.3以上否则无法完成markdownlint的安装

    gem -v
    

    2加镜像源

    gem sources --add https://gems.ruby-china.com/
    

    3安装markdownlint依赖的工具chef-utils

    sudo gem install chef-utils -v 16.6.14
    

    4安装markdownlint

    sudo gem install mdl
    

    5查看markdownlint版本信息

    mdl --version
    
  7. pylint同Windows环境

  8. shellcheck

    1下载shellcheck安装包到/tmp目录:

    cd /tmp
    wget https://github.com/koalaman/shellcheck/releases/download/v0.8.0/shellcheck-v0.8.0.linux.x86_64.tar.xz --no-check-certificate
    

    2解压安装shellcheck工具

    tar -xf shellcheck-v0.8.0.linux.x86_64.tar.xz
    rm -f /usr/bin/shellcheck
    mv /tmp/shellcheck-0.8.0/shellcheck /usr/bin/shellcheck
    chmod 755 /usr/bin/shellcheck
    rm -rf /tmp/shellcheck-v0.8.0
    rm -f /tmp/shellcheck-v0.8.0.linux.x86_64.tar.xz
    

    3查看版本信息

    shellcheck --version
    
  9. tab

    Git工具自带tab工具不需要单独安装tab。

Mac环境

  1. clang-format

    1安装clang-format

    brew install clang-format
    

    2查看版本信息

    clang-format --version
    
  2. cmakelint同Windows环境

  3. codespell同Windows环境

  4. cpplint同Windows环境

  5. lizard同Windows环境

  6. markdownlint

    1安装Ruby

    brew install -y rubygems
    

    2查看Ruby版本确保安装的gem版本在2.3以上否则无法完成markdownlint的安装

    gem -v
    

    3加镜像源

    sudo gem sources --add https://gems.ruby-china.com/
    

    4安装markdownlint依赖的工具chef-utils

    sudo gem install chef-utils -v 16.6.14
    

    5安装markdownlint

    sudo gem install mdl
    

    6查看markdownlint版本信息

    mdl --version
    
  7. pylint同Windows环境

  8. shellcheck

    1安装shellcheck

    brew install shellcheck
    

    2添加到环境变量

    brew link --overwrite shellcheck
    

    3查看版本信息

    shellcheck --version
    
  9. tab

    Git工具自带tab工具不需要单独安装tab。

附:工具版本建议

工具名称 CI门禁版本 最新版本 Windows Linux Mac
clang-format 9.0.1 14.0.6 9.0.0 >=9.0.1 >=9.0.0
cmakelint 1.4.1 1.4.2 1.4.2 1.4.2 1.4.2
codespell 2.0.0 2.1.0 2.1.0 2.1.0 2.1.0
cpplint 1.4.5 1.6.0 1.6.0 1.6.0 1.6.0
lizard 1.17.7 1.17.10 1.17.10 1.17.10 1.17.10
markdownlint 0.11.0 0.11.0 0.11.0 0.11.0 0.11.0
pylint 2.3.1 2.13.9 2.3.1 2.3.1 2.3.1
shellcheck 0.7.1 0.8.0 0.8.0 0.8.0
tab