Files
unison/utils/tests/gitlab-ci-code-linting.yml
2025-03-31 21:52:05 +01:00

153 lines
4.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: .pre
image: ubuntu:rolling
before_script:
- apt update
- DEBIAN_FRONTEND=noninteractive apt install -y
python3
clang-format-$CLANG_FORMAT_VERSION
script:
- python3 utils/check-style-clang-format.py --verbose .
timeout: 1h
interruptible: true
check-style-clang-format-19:
extends: .check-style-clang-format
variables:
CLANG_FORMAT_VERSION: 19
check-style-clang-format-15:
extends: .check-style-clang-format
variables:
CLANG_FORMAT_VERSION: 15
# Clang-tidy
clang-tidy-19:
stage: code-linting
image: ubuntu:rolling
variables:
MPI_CI: 1
CLANG_TIDY_OUTPUT: clang-tidy-output.log
FILES_CHANGED: git-diff-name-only.log
before_script:
- apt update
- DEBIAN_FRONTEND=noninteractive apt install -y
clang cmake
clang-tidy clang-tidy-19
libboost-all-dev libeigen3-dev libgtk-3-dev libopenmpi-dev libsqlite3-dev
gsl-bin libgsl-dev libgsl28
git ssh
- ./ns3 configure -d debug
--enable-clang-tidy
--enable-examples --enable-tests --enable-asserts
--enable-mpi
script:
- if (git remote | grep -qw upstream) ; then
git remote remove upstream ;
fi
- git remote add -t $CI_DEFAULT_BRANCH --no-tags -f upstream https://gitlab.com/nsnam/ns-3-dev.git
- git diff --name-only upstream/$CI_DEFAULT_BRANCH > $FILES_CHANGED
# Run full clang-tidy in the following cases: 1) default branch, 2) ".clang-tidy" file changed
# Run clang-tidy-diff in the opposite cases.
# File paths generated by git diff are relative to the working tree. Therefore, iregex should only contain paths relative to the working tree.
- if [[ $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH ]] || (grep -q ".clang-tidy" $FILES_CHANGED) ; then
echo "Running full clang-tidy" ;
run-clang-tidy-19 -p cmake-cache/ -quiet
1> $CLANG_TIDY_OUTPUT
2> /dev/null ;
else
echo "Running clang-tidy-diff" ;
git diff -U0 upstream/$CI_DEFAULT_BRANCH |
clang-tidy-diff-19.py -path cmake-cache/ -p1 -quiet -use-color
-iregex "(contrib|examples|src|scratch|utils)\/.+\.(cpp|cc|cxx|h|hpp)"
1> $CLANG_TIDY_OUTPUT
2> /dev/null || true ;
fi
# Trim empty lines from output file
- sed -i '/^$/d' $CLANG_TIDY_OUTPUT
# Check job results
- (! egrep -v "file not found \[clang-diagnostic-error\]" $CLANG_TIDY_OUTPUT | egrep -A3 "error:|warning:|note:")
- echo "No clang-tidy errors found"
dependencies: []
artifacts:
paths:
- $CLANG_TIDY_OUTPUT
when: on_failure
interruptible: true
timeout: 3h
# Spell checking
spell-check:
stage: .pre
image: python:latest
before_script:
- pip install codespell
script:
# Get commit messages
- if (git remote | grep -qw upstream) ; then
git remote remove upstream ;
fi
- git remote add -t $CI_DEFAULT_BRANCH --no-tags -f upstream https://gitlab.com/nsnam/ns-3-dev.git
- git log --pretty=%B HEAD...upstream/$CI_DEFAULT_BRANCH ^upstream/$CI_DEFAULT_BRANCH > git_messages.txt
# Check source code and commit messages
- codespell -f -C0 ./
timeout: 1h
interruptible: true
# Check cmake format
cmake-format:
stage: .pre
image: python:latest
before_script:
- pip install pyyaml cmake cmake-format ninja
script:
- ./ns3 configure --enable-modules=core
- |
if (! ./ns3 build cmake-format-check) ; then
echo "Bad formatting detected in CMake files.";
echo "To fix the formatting issues, run the following command:";
echo " $ ./ns3 build cmake-format";
echo "Note that it requires having cmake-format installed in your system.";
echo "You might need to run \"./ns3 configure\" after installing it.";
exit 1;
fi
timeout: 1h
interruptible: true
# Check Python format
.python-format:
stage: .pre
before_script:
- pip install black isort
script:
- black --check .
- isort --check .
timeout: 1h
interruptible: true
python-format-latest:
extends: .python-format
image: python:latest
python-format-3.8:
extends: .python-format
image: python:3.8
# Markdown lint
markdown-lint:
stage: .pre
image: ruby:slim
before_script:
- gem install mdl
script:
- mdl -s .mdl_style.rb .