mirror of
https://git.rwth-aachen.de/acs/public/villas/node/
synced 2025-03-09 00:00:00 +01:00
327 lines
8.7 KiB
YAML
327 lines
8.7 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: '29'
|
|
|
|
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 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: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:packages:manual:
|
|
<<: *deploy_packages
|
|
when: manual
|
|
|
|
deploy:packages:tags:
|
|
<<: *deploy_packages
|
|
only:
|
|
# Only on version tags
|
|
- "/^v\\d+(\\.\\d+)+$/"
|
|
|
|
deploy:docker:
|
|
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
|
|
only:
|
|
# Only on version tags
|
|
- "/^v\\d+(\\.\\d+)+$/"
|
|
|
|
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+)+$/"
|