mirror of
https://gitlab.com/prpl-foundation/prplmesh/prplMesh.git
synced 2025-12-20 01:21:22 +08:00
Due to Gitlab CI changes, non-defined variables expanded to its variable name in the platform child pipeline. The CI checks the existence of some CI variable contents in order to run nightly test jobs in a pipeline. Expanding this non-defined variable meant failure for merge trains, since these nightly jobs are not meant to always run. Solution: change the check for non-defined variables in nightly jobs Signed-off-by: Maarten De Decker <maarten.dedecker@mind.be>
300 lines
7.9 KiB
YAML
300 lines
7.9 KiB
YAML
variables:
|
|
PYTHONUNBUFFERED: "1"
|
|
ARTIFACT_DOWNLOAD_ATTEMPTS: 3
|
|
GET_SOURCES_ATTEMPTS: 3
|
|
|
|
default:
|
|
interruptible: true
|
|
|
|
workflow:
|
|
rules:
|
|
- if: '$CI_PIPELINE_SOURCE == "schedule" || $CI_PIPELINE_SOURCE == "web"'
|
|
# Cfr. Workflows/MergeRequest-Pipelines.gitlab-ci.yml template
|
|
- if: $CI_MERGE_REQUEST_IID
|
|
- if: $CI_COMMIT_TAG
|
|
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
|
|
stages:
|
|
- containers
|
|
- build
|
|
- platform
|
|
- test
|
|
- certification-dummy
|
|
- upload
|
|
|
|
include:
|
|
- local: "/ci/templates.yml"
|
|
|
|
.rules-for-expensive-job: &expensive-job
|
|
rules:
|
|
- if: '$CI_PIPELINE_SOURCE == "schedule"'
|
|
- if: '$CI_MERGE_REQUEST_EVENT_TYPE == "merge_train"'
|
|
- if: $CI_COMMIT_TAG
|
|
- if: ($TESTS_TO_RUN_ESSENSIUM && $TESTS_TO_RUN_ESSENSIUM !~ /^\$/)
|
|
- if: ($TESTS_TO_RUN_R2_ESSENSIUM && $TESTS_TO_RUN_R2_ESSENSIUM !~ /^\$/)
|
|
- if: ($TESTS_TO_RUN_R4_ESSENSIUM && $TESTS_TO_RUN_R4_ESSENSIUM !~ /^\$/)
|
|
- when: manual
|
|
allow_failure: true
|
|
|
|
image-build-builder/ubuntu/bionic:
|
|
extends: .image-build
|
|
|
|
image-build-tests-runner:
|
|
extends: .image-build
|
|
|
|
image-build-boardfarm-ci:
|
|
extends: .image-build
|
|
|
|
image-build-cppcheck:
|
|
extends: .image-build
|
|
|
|
image-build-scripts:
|
|
extends: .image-build
|
|
|
|
platform:
|
|
stage: platform
|
|
needs:
|
|
- build-in-docker
|
|
- image-build-boardfarm-ci
|
|
rules:
|
|
- if: $CI_MERGE_REQUEST_LABELS =~ /.*test-upgrade-image.*/
|
|
- !reference [.rules-for-expensive-job, rules]
|
|
variables:
|
|
STABILITY_TESTS: $STABILITY_TESTS
|
|
TESTS_TO_RUN_ESSENSIUM: $TESTS_TO_RUN_ESSENSIUM
|
|
DEVICE_UNDER_TEST_ESSENSIUM: $DEVICE_UNDER_TEST_ESSENSIUM
|
|
TESTS_TO_RUN_R2_ESSENSIUM: $TESTS_TO_RUN_R2_ESSENSIUM
|
|
DEVICE_UNDER_TEST_R2_ESSENSIUM: $DEVICE_UNDER_TEST_R2_ESSENSIUM
|
|
TESTS_TO_RUN_R4_ESSENSIUM: $TESTS_TO_RUN_R4_ESSENSIUM
|
|
DEVICE_UNDER_TEST_R4_ESSENSIUM: $DEVICE_UNDER_TEST_R4_ESSENSIUM
|
|
PARENT_PIPELINE_ID: $CI_PIPELINE_ID
|
|
CI_PARENT_PIPELINE_SOURCE: $CI_PIPELINE_SOURCE
|
|
trigger:
|
|
include: "ci/platform.yml"
|
|
strategy: depend
|
|
|
|
dco:
|
|
stage: build
|
|
variables:
|
|
CI_COMMIT_BRANCH: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
|
|
needs: []
|
|
image: christophebedard/dco-check:latest
|
|
rules:
|
|
- if: $CI_MERGE_REQUEST_ID
|
|
- if: $CI_EXTERNAL_PULL_REQUEST_IID
|
|
script:
|
|
- export CI_MERGE_REQUEST_TARGET_BRANCH_SHA=$(git merge-base --fork-point origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME)
|
|
# if --forkpoint failed, fallback to just using merge-base:
|
|
- test -z "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA" && export CI_MERGE_REQUEST_TARGET_BRANCH_SHA=$(git merge-base "origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" "origin/$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME")
|
|
- dco-check --verbose
|
|
|
|
cppcheck:
|
|
stage: build
|
|
image: $CI_REGISTRY_IMAGE/prplmesh-cppcheck:$CI_PIPELINE_ID
|
|
script:
|
|
# cppcheck runs in its own image because every new release brings
|
|
# useful improvements (the versions from regular distros get old
|
|
# too quickly) and to be able to update builders without having to
|
|
# solve newly reported cppcheck issues at the same time.
|
|
- tools/docker/static-analysis/cppcheck.sh .
|
|
artifacts:
|
|
paths:
|
|
- cppcheck_results.txt
|
|
when: always
|
|
tags:
|
|
- docker
|
|
needs: ["image-build-cppcheck"]
|
|
|
|
cppcheck-diff:
|
|
stage: build
|
|
image: $CI_REGISTRY_IMAGE/prplmesh-cppcheck:$CI_PIPELINE_ID
|
|
script:
|
|
- ci/cppcheck/cppcheck-new-issues.sh
|
|
artifacts:
|
|
paths:
|
|
- cppcheck_results.txt
|
|
- cppcheck_existing_issues.txt
|
|
expire_in: 4 weeks
|
|
when: always
|
|
tags:
|
|
- docker
|
|
needs: ["image-build-cppcheck"]
|
|
|
|
flake8:
|
|
stage: build
|
|
image: pipelinecomponents/flake8:f087c4c
|
|
script:
|
|
- apk add --update --no-cache git
|
|
- git ls-files -z -- '*.py' ':(exclude)tools/maptools.py' ':(exclude)framework/tlvf/tlvf.py' |
|
|
xargs -0 -t flake8 --verbose
|
|
needs: []
|
|
|
|
# This step both generates documentation from ODL files,
|
|
# but also verifies that the ODL files are parse-able.
|
|
# For this reason, it makes sense to run this on all MRs,
|
|
# so that no-one accidentally checks in an ODL file with syntax errors
|
|
nbapi-docgen:
|
|
stage: build
|
|
extends: .in-prplmesh-builder
|
|
variables:
|
|
VERSION: $CI_COMMIT_REF_NAME-$CI_COMMIT_TIMESTAMP
|
|
script:
|
|
- tools/nbapi-docgen/parse_api.sh
|
|
artifacts:
|
|
paths:
|
|
- build/html
|
|
when: always
|
|
needs:
|
|
- job: build-in-docker
|
|
|
|
# Updates gitlab pages with the NBAPI documentation:
|
|
# https://prpl-foundation.gitlab.io/prplmesh/prplMesh/
|
|
# Only run on the master branch, to avoid unnecessary pushes.
|
|
pages:
|
|
stage: upload
|
|
needs: ["nbapi-docgen"]
|
|
script:
|
|
- mv build/html public
|
|
artifacts:
|
|
paths:
|
|
- public
|
|
rules:
|
|
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
|
|
shellcheck:
|
|
stage: build
|
|
image: koalaman/shellcheck-alpine:v0.7.1
|
|
before_script:
|
|
- apk add --update --no-cache git
|
|
script:
|
|
- git ls-files -z '*.sh' '*.sh.in' | xargs -0 shellcheck -x -P tools
|
|
needs: []
|
|
|
|
clang-format:
|
|
extends: .in-prplmesh-builder
|
|
stage: build
|
|
script:
|
|
# Run clang-format and check there are no modified files
|
|
- ./clang-format.sh
|
|
# `diff-index` doesn't update the index so doesn't actually see changes. Need to manually update index.
|
|
- git update-index -q --refresh
|
|
# Use `diff-index` instead of `status` or `diff` because it gives more predictable output and exit code.
|
|
- |
|
|
git diff-index --exit-code HEAD || {
|
|
ret=$?
|
|
echo "Inconsistent formatting, please apply patch from artifacts"
|
|
git diff > correct-formatting.patch
|
|
exit $ret
|
|
}
|
|
artifacts:
|
|
paths:
|
|
- correct-formatting.patch
|
|
when: on_failure
|
|
|
|
.build-in-docker:
|
|
extends: .in-prplmesh-builder
|
|
stage: build
|
|
variables:
|
|
CMAKE_BUILD_TYPE: "Release"
|
|
EXTRA_CMAKE_FLAGS: ""
|
|
script:
|
|
# To be sure that AutoGenerated is correct, remove it first and check later that it's unchanged.
|
|
- rm -rf framework/tlvf/AutoGenerated common/beerocks/tlvf/AutoGenerated
|
|
- cmake -DBUILD_TESTS=ON $EXTRA_CMAKE_FLAGS -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE \
|
|
-DCMAKE_INSTALL_PREFIX=build/install -H. -Bbuild -G Ninja
|
|
- ninja -C build install
|
|
# Check that the AutoGenerated files are correct by checking git status
|
|
- git update-index -q --refresh
|
|
- git diff-index --exit-code HEAD
|
|
artifacts:
|
|
paths:
|
|
- build/install
|
|
- build/controller
|
|
- build/agent/src/beerocks/slave/nbapi/agent/odl
|
|
|
|
pytest:
|
|
extends: .build-in-docker
|
|
script:
|
|
- cd tools
|
|
- pytest-3
|
|
|
|
build-in-docker:
|
|
extends: .build-in-docker
|
|
variables:
|
|
EXTRA_CMAKE_FLAGS: ""
|
|
|
|
build-in-docker-legacy:
|
|
extends: .build-in-docker
|
|
variables:
|
|
EXTRA_CMAKE_FLAGS: "-DENABLE_VBSS=ON -DUSE_PRPLMESH_WHM=OFF"
|
|
|
|
build-in-docker-static:
|
|
extends: build-in-docker
|
|
variables:
|
|
EXTRA_CMAKE_FLAGS: "-DBUILD_SHARED_LIBS=OFF"
|
|
rules:
|
|
- !reference [.rules-for-expensive-job, rules]
|
|
|
|
tlvf_test:
|
|
extends: .run-test-in-docker
|
|
|
|
bwl_whm_unit_tests:
|
|
extends: .run-test-in-docker
|
|
|
|
bcl_unit_tests:
|
|
extends: .run-test-in-docker
|
|
|
|
mapf_common_encryption_tests:
|
|
extends: .run-test-in-docker
|
|
|
|
ieee1905_transport_broker_tests:
|
|
extends: .run-test-in-docker
|
|
|
|
beerocks_agent_unit_tests:
|
|
extends: .run-test-in-docker
|
|
|
|
nbapi_unit_tests:
|
|
extends: .run-test-in-docker
|
|
|
|
db_unit_tests:
|
|
extends: .run-test-in-docker
|
|
|
|
test-gw-repeater:
|
|
stage: test
|
|
script:
|
|
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
|
- tests/test_gw_repeater.sh --rm --unique-id $CI_JOB_ID --tag $CI_PIPELINE_ID
|
|
artifacts:
|
|
paths:
|
|
- logs
|
|
when: always
|
|
needs:
|
|
- job: build-in-docker-legacy
|
|
tags:
|
|
- docker-test
|
|
retry: 2
|
|
|
|
boardfarm-tests:
|
|
stage: test
|
|
script:
|
|
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
|
- ./dctest.py
|
|
artifacts:
|
|
paths:
|
|
- logs
|
|
when: always
|
|
needs:
|
|
- job: build-in-docker-legacy
|
|
- job: image-build-boardfarm-ci
|
|
tags:
|
|
- boardfarm-compose
|
|
timeout: 30m
|
|
retry: 2
|
|
|
|
boardfarm-stability-tests:
|
|
extends: boardfarm-tests
|
|
parallel: 10
|
|
rules:
|
|
- if: "$STABILITY_TESTS"
|
|
retry: 0
|