104 lines
3.5 KiB
YAML
104 lines
3.5 KiB
YAML
# NS3 CI script
|
|
|
|
# For naming purposes, we will prepend ".base-" on the jobs
|
|
# that are not complete and need to be extended (hopefully
|
|
# we write in the documentation before the job what should be
|
|
# added to have a working jobs).
|
|
|
|
# As per Gitlab documentation, extends supports multi-level inheritance,
|
|
# however it is not recommended to use more than three levels.
|
|
|
|
# Any scheduled pipeline should define a variable, named "RELEASE", that
|
|
# indicates what this script is run for. Allowed values, for the moment,
|
|
# are "daily" and "weekly" to denote a daily (or weekly) job.
|
|
|
|
# Our configuration is not strictly sequential, or by using different
|
|
# words, we do not expect the CI infrastructure to run build, test, and
|
|
# documentation jobs each time that a commit is done. We use a different
|
|
# configuration, still in definition. It will be in the documentation.
|
|
|
|
stages:
|
|
- pre-build
|
|
- build
|
|
- test
|
|
- code-linting
|
|
- documentation
|
|
- release
|
|
|
|
workflow:
|
|
auto_cancel:
|
|
on_new_commit: interruptible
|
|
rules:
|
|
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
auto_cancel:
|
|
on_new_commit: none
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
|
|
when: never
|
|
- when: always
|
|
|
|
###################### BUILD STAGE #############################################
|
|
|
|
# Defines the steps to run the tests
|
|
# Inherit with "extends: .base-build" and remember to set
|
|
# the following variables: COMPILER (g++, clang++, ...) and
|
|
# MODE (debug, default, optimized)
|
|
.base-build:
|
|
script:
|
|
- mkdir -p $CCACHE_BASEDIR_VALUE
|
|
- export CCACHE_BASEDIR=${PWD}
|
|
- export CCACHE_DIR=${PWD}/$CCACHE_BASEDIR_VALUE
|
|
- export MPI_CI=1
|
|
- CXX=$COMPILER ./ns3 configure -d $MODE -GNinja --enable-examples --enable-tests --enable-asserts --enable-werror --enable-mpi
|
|
$EXTRA_OPTIONS
|
|
- ccache -z
|
|
- if [[ "$CI_JOB_STAGE" == "build" ]];
|
|
then ./ns3 build;
|
|
fi
|
|
- if [[ "$CI_JOB_STAGE" == "build" ]] && [[ "`./utils/ccache-miss-rate.py`" != "0" ]];
|
|
then `touch build/tests-$CI_COMMIT_REF_SLUG.txt`;
|
|
fi
|
|
- if [[ "$CI_JOB_STAGE" == "test" ]] && [[ "$MODE" != "debug" ]] && [[ -f build/tests-$CI_COMMIT_REF_SLUG.txt ]];
|
|
then ./test.py -n;
|
|
if [[ $? == 0 ]];
|
|
then `rm build/tests-$CI_COMMIT_REF_SLUG.txt` || true;
|
|
fi;
|
|
fi
|
|
- ccache -s
|
|
# - ./ns3 clean
|
|
cache:
|
|
# Use separate key for each (debug/default/optimized) jobs because
|
|
# they run in parallel and will otherwise overwrite each other
|
|
# cache when they upload the cache archive at the end of the job,
|
|
# resulting in only the cache for the last finished configuration
|
|
# being stored.
|
|
#
|
|
# Do not distinguish between branches though to avoid
|
|
# recompilation of all the files when a new branch is created.
|
|
key: "ccache-$CI_JOB_NAME"
|
|
paths:
|
|
- $CCACHE_BASEDIR_VALUE/
|
|
interruptible: true
|
|
timeout: 12h
|
|
variables:
|
|
CCACHE_BASEDIR_VALUE: ns-3-ccache-storage
|
|
artifacts:
|
|
expire_in: 2 day
|
|
paths:
|
|
- build/
|
|
- .lock-*
|
|
|
|
# Weekly jobs for other distribution and compilers
|
|
include:
|
|
- "utils/tests/gitlab-ci-per-commit.yml"
|
|
- "utils/tests/gitlab-ci-alpine.yml"
|
|
- "utils/tests/gitlab-ci-ubuntu.yml"
|
|
- "utils/tests/gitlab-ci-fedora.yml"
|
|
- "utils/tests/gitlab-ci-gcc.yml"
|
|
- "utils/tests/gitlab-ci-clang.yml"
|
|
- "utils/tests/gitlab-ci-scheduled.yml"
|
|
- "utils/tests/gitlab-ci-code-linting.yml"
|
|
- "utils/tests/gitlab-ci-doc.yml"
|
|
- "utils/tests/gitlab-ci-cppyy.yml"
|
|
- "utils/tests/gitlab-ci-release.yml"
|