From: Dan Fandrich Date: Fri, 23 Aug 2024 07:07:32 +0000 (-0700) Subject: CI: add a script and job to run cmakelint X-Git-Tag: curl-8_10_0~109 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=59b419f1a55c56c04b26f10f63004992965d04c1;p=thirdparty%2Fcurl.git CI: add a script and job to run cmakelint A number of checks don't match our style or are buggy and so are disabled. Co-authored-by: Viktor Szakats Fixes #14580 Closes #14665 --- diff --git a/.github/workflows/checksrc.yml b/.github/workflows/checksrc.yml index b20a8b8585..5da0728426 100644 --- a/.github/workflows/checksrc.yml +++ b/.github/workflows/checksrc.yml @@ -13,11 +13,9 @@ name: Source - '*/ci' paths-ignore: - '**/*.md' - - '**/CMakeLists.txt' - '.azure-pipelines.yml' - '.circleci/**' - 'appveyor.*' - - 'CMake/**' - 'plan9/**' - 'tests/data/**' - 'winbuild/**' @@ -26,11 +24,9 @@ name: Source - master paths-ignore: - '**/*.md' - - '**/CMakeLists.txt' - '.azure-pipelines.yml' - '.circleci/**' - 'appveyor.*' - - 'CMake/**' - 'plan9/**' - 'tests/data/**' - 'winbuild/**' @@ -47,7 +43,7 @@ jobs: - name: check run: git ls-files -z "*.[ch]" | xargs -0 -n1 ./scripts/checksrc.pl - codespell: + codespell-cmakelint: runs-on: ubuntu-latest steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 @@ -57,11 +53,15 @@ jobs: run: | sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list sudo apt-get update - sudo apt-get install codespell + sudo apt-get install codespell python3-pip + python3 -m pip install cmakelint==1.4.3 - name: spellcheck run: codespell --skip src/tool_hugehelp.c -I .github/scripts/codespell-ignore.txt include src lib + - name: cmakelint + run: scripts/cmakelint.sh + reuse: runs-on: ubuntu-latest steps: diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 1a9a283cc5..198273d7b7 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -24,7 +24,7 @@ EXTRA_DIST = coverage.sh completion.pl firefox-db2pem.sh checksrc.pl \ mk-ca-bundle.pl schemetable.c cd2nroff nroff2cd cdall cd2cd managen \ - dmaketgz release-tools.sh verify-release + dmaketgz release-tools.sh verify-release cmakelint.sh ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@ FISH_FUNCTIONS_DIR = @FISH_FUNCTIONS_DIR@ diff --git a/scripts/cmakelint.sh b/scripts/cmakelint.sh new file mode 100755 index 0000000000..4eb54e145d --- /dev/null +++ b/scripts/cmakelint.sh @@ -0,0 +1,50 @@ +#!/bin/sh +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Dan Fandrich, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +# Run cmakelint on the curl source code. It will check all files given on the +# command-line, or else all relevant files in git, or if not in a git +# repository, all files starting in the tree rooted in the current directory. +# +# cmakelint can be installed from PyPi with the command "python3 -m pip install +# cmakelint". +# +# The xargs invocation is portable, but does not preserve spaces in file names. +# If such a file is ever added, then this can be portably fixed by switching to +# "xargs -I{}" and appending {} to the end of the xargs arguments (which will +# call cmakelint once per file) or by using the GNU extension "xargs -d'\n'". +{ + if [ -n "$1" ]; then + for A in "$@"; do printf "%s\n" "$A"; done + elif git rev-parse --is-inside-work-tree >/dev/null 2>&1; then + git ls-files + else + # strip off the leading ./ to make the grep regexes work properly + find . -type f | sed 's@^\./@@' + fi +} | grep -E '(/CMake|\.cmake$)' | grep -v -E '(\.h\.cmake|\.in)$' \ + | xargs \ + cmakelint \ + --spaces=2 --linelength=132 \ + --filter=-whitespace/indent,-convention/filename,-package/stdargs