1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-16 00:00:02 +01:00
VILLASnode/.gitlab-ci.yml

362 lines
9.6 KiB
YAML

variables:
GIT_STRATEGY: fetch
GIT_SUBMODULE_STRATEGY: recursive
PREFIX: /usr/
RSYNC_OPTS: --recursive --ignore-missing-args --chown ${DEPLOY_USER}:${DEPLOY_USER}
CRITERION_OPTS: --ignore-warnings
DOCKER_FILE: packaging/docker/Dockerfile.dev
DOCKER_TAG: ${CI_COMMIT_REF_NAME}
DOCKER_IMAGE: registry.git.rwth-aachen.de/acs/public/villas/node
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev
MAKE_OPTS: -j32
RELEASEVER: '33'
DOCKER_CLI_EXPERIMENTAL: enabled
stages:
- prepare
- build
- test
- packaging
- deploy
# For some reason, GitLab CI prunes the contents of the submodules so we need to restore them.
before_script:
- git submodule foreach git checkout .
# Stage: prepare
##############################################################################
# Build docker image which is used to build & test VILLASnode
.prepare:docker-dev: &prepare_docker_dev
stage: prepare
script:
- docker buildx build ${DOCKER_OPTS}
--file ${DOCKER_FILE}
--tag ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} .
tags:
- shell
- linux
prepare:fedora:docker-dev:
<<: *prepare_docker_dev
variables:
DOCKER_FILE: packaging/docker/Dockerfile.dev
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev
prepare:fedora:docker-dev-minimal:
<<: *prepare_docker_dev
variables:
DOCKER_FILE: packaging/docker/Dockerfile.dev-minimal
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-minimal
prepare:ubuntu:docker-dev:
<<: *prepare_docker_dev
variables:
DOCKER_FILE: packaging/docker/Dockerfile.dev-ubuntu
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-ubuntu
prepare:centos:docker-dev:
<<: *prepare_docker_dev
variables:
DOCKER_FILE: packaging/docker/Dockerfile.dev-centos
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-centos
prepare:debian-armhf:docker-dev:
<<: *prepare_docker_dev
variables:
DOCKER_FILE: packaging/docker/Dockerfile.dev-debian-multiarch
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-debian-armhf
DOCKER_OPTS: --build-arg ARCH=armhf --build-arg TRIPLET=arm-linux-gnueabihf
prepare:debian-arm64:docker-dev:
<<: *prepare_docker_dev
variables:
DOCKER_FILE: packaging/docker/Dockerfile.dev-debian-multiarch
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-debian-arm64
DOCKER_OPTS: --build-arg ARCH=arm64 --build-arg TRIPLET=aarch64-linux-gnu
# Stage: build
##############################################################################
.build:fedora:x86_64: &build
stage: build
script:
- mkdir -p build && cd build
- cmake ${CMAKE_OPTS} ..
- make ${MAKE_OPTS}
artifacts:
expire_in: 1 week
paths:
- build/
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
tags:
- docker
build:fedora:x86_64:
<<: *build
build:fedora-minimal:x86_64:
<<: *build
variables:
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-minimal
CMAKE_OPTS: -DWITH_GRAPHVIZ=OFF
-DWITH_HOOKS=OFF
-DWITH_WEB=OFF
-DWITH_API=OFF
-DWITH_CONFIG=OFF
-DWITH_SRC=OFF
-DWITH_TOOLS=OFF
-DWITH_TESTS=OFF
-DWITH_PLUGINS=OFF
-DWITH_CLIENTS=OFF
-DWITH_DOC=OFF
-DWITH_FPGA=OFF
build:fedora-minimal-default:x86_64:
<<: *build
variables:
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-minimal
build:ubuntu:x86_64:
<<: *build
variables:
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-ubuntu
CMAKE_OPTS: -DCMAKE_MODULE_PATH=/usr/local/lib64/cmake -DCMAKE_PREFIX_PATH=/usr/local
build:centos:x86_64:
<<: *build
script:
- mkdir -p build && cd build
- cmake3 ${CMAKE_OPTS} ..
- make ${MAKE_OPTS}
variables:
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-centos
CMAKE_OPTS: -DCMAKE_MODULE_PATH=/usr/local/lib64/cmake -DCMAKE_PREFIX_PATH=/usr/local
build:debian-multiarch:armhf:
<<: *build
variables:
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-debian-armhf
build:debian-multiarch:arm64:
<<: *build
variables:
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-debian-arm64
build:docs:
stage: build
artifacts:
name: ${CI_PROJECT_NAME}-doc-${CI_BUILD_REF}
paths:
- build/doc/
script:
- mkdir -p build && cd build
- cmake ${CMAKE_OPTS} ..
- make ${MAKE_OPTS} doc
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
tags:
- docker
# Stage: test
##############################################################################
test:flake8:
stage: test
script:
- flake8 python/
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
tags:
- docker
test:cppcheck:
stage: test
script:
- cppcheck -j $(nproc)
--max-configs=32
--error-exitcode=1
--quiet
--inline-suppr
--enable=warning,performance,portability,information,missingInclude
--std=c++11
--suppress=noValidConfiguration
-I include
-I common/include
src/
lib/
tests/unit/ | tee cppcheck.log
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
dependencies:
- build:fedora:x86_64
tags:
- docker
artifacts:
when: on_failure
paths:
- cppcheck.log
expose_as: cppcheck
test:unit:
stage: test
dependencies:
- build:fedora:x86_64
variables:
LD_PRELOAD: /usr/lib64/libSegFault.so
SEGFAULT_SIGNALS: all
SEGFAULT_SIGNALS: bus abrt
script:
- mkdir -p build && cd build
- cmake ${CMAKE_OPTS} ..
- make ${MAKE_OPTS} run-unit-tests
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
tags:
- docker
test:integration:
stage: test
allow_failure: true
dependencies:
- build:fedora:x86_64
script:
- mkdir -p build && cd build
- cmake ${CMAKE_OPTS} ..
- make ${MAKE_OPTS} run-integration-tests
artifacts:
name: ${CI_PROJECT_NAME}-integration-tests-${CI_BUILD_REF}
when: always
paths:
- build/tests/integration/
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
tags:
- docker
# Stage: packaging
##############################################################################
packaging:docker:
stage: packaging
image: docker:19.03
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- docker build
--build-arg BUILDER_IMAGE=${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
--file packaging/docker/Dockerfile.app
--tag ${DOCKER_IMAGE}:${DOCKER_TAG} .
tags:
- docker
packaging:rpm:
stage: packaging
dependencies:
- build:fedora:x86_64
script:
- mkdir -p build && cd build
- cmake -DWITH_NODE_ETHERCAT=OFF ..
- make ${MAKE_OPTS} doc
- make ${MAKE_OPTS} package
artifacts:
expire_in: 1 week
name: ${CI_PROJECT_NAME}-packages-${CI_BUILD_REF}
paths:
- build/*.tar.gz
- build/*.rpm
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
tags:
- docker
# Stage: deploy
##############################################################################
deploy:web:
stage: deploy
image:
name: rclone/rclone:1.50
entrypoint: [""]
before_script:
- rclone config create fein webdav url ${DEPLOY_PATH} vendor other user ${DEPLOY_USER} pass ${DEPLOY_PASS}
script:
- rclone copy build/doc/html fein:villas/doc-dev/${CI_BUILD_REF_NAME}
dependencies:
- build:docs
only:
# Only on version tags
- "/^v\\d+(\\.\\d+)+$/"
tags:
- docker
.deploy:packages: &deploy_packages
stage: deploy
image:
name: rclone/rclone:1.50
entrypoint: [""]
before_script:
- apk add curl
- rclone config create fein webdav url ${DEPLOY_PATH} vendor other user ${DEPLOY_USER} pass ${DEPLOY_PASS}
script:
- rclone copy --max-depth 1 --include '*.tar.gz' build fein:packages/dist
- rclone copy --max-depth 1 --include '*.rpm' build fein:packages/fedora/${RELEASEVER}/x86_64
- curl -L --user ${DEPLOY_USER}:${DEPLOY_PASS} ${DEPLOY_PATH}/hooks/createrepo
dependencies:
- packaging:rpm
tags:
- docker
.deploy:docker: &deploy_docker_latest
stage: deploy
image: docker:19.03
before_script:
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
script:
- docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:latest
- docker tag ${DOCKER_IMAGE}/dev:${DOCKER_TAG} ${DOCKER_IMAGE}/dev:latest
- docker tag ${DOCKER_IMAGE}/dev-ubuntu:${DOCKER_TAG} ${DOCKER_IMAGE}/dev-ubuntu:latest
- docker tag ${DOCKER_IMAGE}/dev-centos:${DOCKER_TAG} ${DOCKER_IMAGE}/dev-centos:latest
- docker tag ${DOCKER_IMAGE}/dev-debian-arm64:${DOCKER_TAG} ${DOCKER_IMAGE}/dev-debian-arm64:latest
- docker tag ${DOCKER_IMAGE}/dev-debian-armhf:${DOCKER_TAG} ${DOCKER_IMAGE}/dev-debian-armhf:latest
- docker push ${DOCKER_IMAGE}:latest
- docker push ${DOCKER_IMAGE}/dev:latest
- docker push ${DOCKER_IMAGE}/dev-ubuntu:latest
- docker push ${DOCKER_IMAGE}/dev-centos:latest
- docker push ${DOCKER_IMAGE}/dev-debian-arm64:latest
- docker push ${DOCKER_IMAGE}/dev-debian-armhf:latest
tags:
- docker
deploy:docker:tags:
stage: deploy
image: docker:19.03
before_script:
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
script:
- docker push ${DOCKER_IMAGE}:${DOCKER_TAG}
- docker push ${DOCKER_IMAGE}/dev:${DOCKER_TAG}
- docker push ${DOCKER_IMAGE}/dev-ubuntu:${DOCKER_TAG}
- docker push ${DOCKER_IMAGE}/dev-centos:${DOCKER_TAG}
- docker push ${DOCKER_IMAGE}/dev-debian-arm64:${DOCKER_TAG}
- docker push ${DOCKER_IMAGE}/dev-debian-armhf:${DOCKER_TAG}
tags:
- docker
only:
# Only on version tags
- "/^v\\d+(\\.\\d+)+$/"
deploy:packages:manual:
<<: *deploy_packages
when: manual
deploy:packages:tags:
<<: *deploy_packages
only:
# Only on version tags
- "/^v\\d+(\\.\\d+)+$/"
deploy:docker:manual:
<<: *deploy_docker_latest
when: manual
deploy:docker:tags:
<<: *deploy_docker_latest
only:
# Only on version tags
- "/^v\\d+(\\.\\d+)+$/"