# 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 workflow: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS when: never - if: $CI_COMMIT_BRANCH ###################### 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/ 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"