Files
unison/utils/tests/gitlab-ci-code-linting.yml
2023-03-20 11:15:10 +00:00

100 lines
3.3 KiB
YAML

# ns-3 CI/CD script with the code-linting stage
#
# Contains jobs to check the ns-3 coding style and perform lint checking.
# Clang-format
check-style-clang-format:
stage: code-linting
image: ubuntu:latest
before_script:
- apt update
- DEBIAN_FRONTEND=noninteractive apt install -y
python3
clang-format-14
script:
- python3 utils/check-style-clang-format.py .
timeout: 1h
# Clang-tidy
clang-tidy:
stage: code-linting
image: ubuntu:latest
variables:
MPI_CI: 1
CLANG_TIDY_OUTPUT: clang-tidy-output.log
before_script:
- apt update
- DEBIAN_FRONTEND=noninteractive apt install -y
clang cmake
clang-tidy clang-tidy-14
python3 python3-pip
libboost-all-dev libeigen3-dev libgtk-3-dev libopenmpi-dev libsqlite3-dev
gsl-bin libgsl-dev libgsl27
git ssh
- pip3 install cppyy
- ./ns3 configure -d debug
--enable-clang-tidy
--enable-examples --enable-tests --enable-asserts
--enable-mpi --enable-python-bindings
script:
- if (git remote | grep -qw upstream) ; then
git remote set-url upstream https://gitlab.com/nsnam/ns-3-dev.git ;
else
git remote add upstream https://gitlab.com/nsnam/ns-3-dev.git ;
fi
- git fetch upstream $CI_DEFAULT_BRANCH
# Run clang-tidy-diff. If running on default branch, Git diff is empty and this is ignored.
# File paths generated by git diff are relative to the working tree. Therefore, iregex should only contain paths relative to the working tree.
- git diff -U0 upstream/$CI_DEFAULT_BRANCH |
clang-tidy-diff-14.py -path cmake-cache/ -p1 -quiet -use-color
-iregex "(contrib|examples|src|scratch|utils)\/.+\.(cpp|cc|cxx|c|h|hpp)"
1> $CLANG_TIDY_OUTPUT
2> /dev/null
# Run full clang-tidy in the following cases: 1) default branch, 2) ".clang-tidy" file changed, 3) clang-tidy-diff had an error
- if [ $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH ] || (git diff -U0 --name-only upstream/$CI_DEFAULT_BRANCH | grep -q ".clang-tidy") || (egrep -q -A 3 "file not found \[clang-diagnostic-error\]" $CLANG_TIDY_OUTPUT) ; then
echo "Running full clang-tidy" ;
run-clang-tidy-14 -p cmake-cache/ -quiet
1> $CLANG_TIDY_OUTPUT
2> /dev/null ;
fi
# Check job results
- (! egrep -A 3 "error:|warning:|note:" $CLANG_TIDY_OUTPUT)
- echo "No clang-tidy errors found"
artifacts:
paths:
- $CLANG_TIDY_OUTPUT
when: on_failure
timeout: 3h
# Emacs line
emacs-line:
stage: code-linting
image: ubuntu:latest
script:
- (! grep -rn --include="*.h" --include="*.cc" "c-file-style:\"gnu\"" ) ||
(echo "Found Emacs lines on the above C++ files" && exit 1)
- echo "No Emacs lines found on C++ files"
timeout: 1h
# Spell checking
spell-check:
stage: code-linting
image: python:latest
before_script:
- pip install codespell
script:
# Get commit messages
- if (git remote | grep -qw upstream) ; then
git remote set-url upstream https://gitlab.com/nsnam/ns-3-dev.git ;
else
git remote add upstream https://gitlab.com/nsnam/ns-3-dev.git ;
fi
- git fetch upstream master
- git log --pretty=%B HEAD...upstream/master ^upstream/master > git_messages.txt
# Check source code and commit messages
- codespell -f -C0 ./
timeout: 1h