154 lines
4.3 KiB
YAML
154 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 clang-tidy on all files in the following cases: 1) default branch, 2) ".clang-tidy" file changed
|
|
# Otherwise, run clang-tidy on changed files only.
|
|
# 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
|
|
FILES_TO_CHECK="";
|
|
echo "Running clang-tidy on all files";
|
|
else
|
|
FILES_TO_CHECK=$(cat $FILES_CHANGED);
|
|
echo "Running clang-tidy on the following changed files:";
|
|
echo $FILES_TO_CHECK;
|
|
fi
|
|
- run-clang-tidy-19 -p cmake-cache/ -quiet $FILES_TO_CHECK
|
|
1> $CLANG_TIDY_OUTPUT
|
|
2> /dev/null
|
|
|
|
# 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: node:slim
|
|
before_script:
|
|
- npm install -g markdownlint-cli
|
|
script:
|
|
- markdownlint .
|
|
timeout: 1h
|
|
interruptible: true
|