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

236 lines
6.2 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: villas/node
DOCKER_IMAGE_DEV: villas/node-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:fedora:docker-dev:
stage: prepare
script:
- docker build ${DOCKER_OPTS}
--file ${DOCKER_FILE}
--tag ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} .
tags:
- shell
- linux
prepare:raspbian:docker-dev:
extends: prepare:fedora:docker-dev
variables:
DOCKER_FILE: packaging/docker/Dockerfile.dev-raspbian
DOCKER_IMAGE_DEV: villas/node-dev-raspbian
prepare:ubuntu:docker-dev:
extends: prepare:fedora:docker-dev
variables:
DOCKER_FILE: packaging/docker/Dockerfile.dev-ubuntu
DOCKER_IMAGE_DEV: villas/node-dev-ubuntu
prepare:debian-armhf:docker-dev:
extends: prepare:fedora:docker-dev
variables:
DOCKER_FILE: packaging/docker/Dockerfile.dev-debian-multiarch
DOCKER_IMAGE_DEV: villas/node-dev-debian-armhf
DOCKER_OPTS: --build-arg ARCH=armhf --build-arg TRIPLET=arm-linux-gnueabihf
prepare:debian-arm64:docker-dev:
extends: prepare:fedora:docker-dev
variables:
DOCKER_FILE: packaging/docker/Dockerfile.dev-debian-multiarch
DOCKER_IMAGE_DEV: villas/node-dev-debian-arm64
DOCKER_OPTS: --build-arg ARCH=arm64 --build-arg TRIPLET=aarch64-linux-gnu
# Stage: build
##############################################################################
build:fedora:x86_64:
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-minimal:x86_64:
extends: build:fedora:x86_64
variables:
CMAKE_OPTS: -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
build:ubuntu:x86_64:
extends: build:fedora:x86_64
variables:
DOCKER_IMAGE_DEV: villas/node-dev-ubuntu
build:raspbian:armv6l:
extends: build:fedora:x86_64
variables:
DOCKER_IMAGE_DEV: villas/node-dev-raspbian
CMAKE_OPTS: -DWITH_NODE_INFINIBAND=OFF
when: manual
build:debian-multiarch:armhf:
extends: build:fedora:x86_64
variables:
DOCKER_IMAGE_DEV: villas/node-dev-debian-armhf
build:debian-multiarch:arm64:
extends: build:fedora:x86_64
variables:
DOCKER_IMAGE_DEV: villas/node-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 ..
- make ${MAKE_OPTS} doc
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
tags:
- docker
# Stage: test
##############################################################################
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 .. && make ${MAKE_OPTS} unit-tests
- "tests/unit/unit-tests || true"
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
tags:
- docker
test:integration:
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 ..
- 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}
allow_failure: true
tags:
- docker
# Stage: packaging
##############################################################################
packaging:docker:
stage: packaging
script:
- docker build
--build-arg BUILDER_IMAGE=${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
--file packaging/docker/Dockerfile.app
--tag ${DOCKER_IMAGE}:${DOCKER_TAG} .
- docker push ${DOCKER_IMAGE}:${DOCKER_TAG}
- docker push ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
tags:
- shell
- linux
packaging:rpm:
stage: packaging
dependencies:
- build:fedora:x86_64
script:
- mkdir -p build && cd build
- cmake ..
- 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
script:
- ssh ${DEPLOY_USER}@${DEPLOY_HOST} mkdir -p ${DEPLOY_PATH}/{coverage,doc}/${CI_BUILD_REF_NAME}/
- rsync ${RSYNC_OPTS} build/doc/html/ ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/doc/$CI_BUILD_REF_NAME/
- rsync ${RSYNC_OPTS} web/ ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/
dependencies:
- build:docs
only:
- tags
tags:
- villas-deploy
.deploy:packages: &deploy_packages
stage: deploy
script:
- ssh ${DEPLOY_USER}@${DEPLOY_HOST} mkdir -p $${DEPLOY_PATH_PACKAGES}/{fedora/x86_64,dist}
- rsync ${RSYNC_OPTS} build/*.tar.gz ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH_PACKAGES}/dist/
- rsync ${RSYNC_OPTS} build/*.rpm ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH_PACKAGES}/fedora/${RELEASEVER}/x86_64
- ssh ${DEPLOY_USER}@${DEPLOY_HOST} createrepo ${DEPLOY_PATH_PACKAGES}/fedora/${RELEASEVER}/x86_64
dependencies:
- packaging:rpm
tags:
- villas-deploy
deploy:packages:manual:
<<: *deploy_packages
when: manual
deploy:packages:tags:
<<: *deploy_packages
only:
# Only on version tags
- "/^v\\d+(\\.\\d+)+$/"