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

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

316 lines
8.4 KiB
YAML
Raw Permalink Normal View History

2021-02-17 16:04:47 +01:00
# SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University
# SPDX-License-Identifier: Apache-2.0
2016-09-07 06:23:47 +02:00
variables:
GIT_SUBMODULE_STRATEGY: recursive
GIT_DEPTH: 0
2021-01-04 18:47:13 +01:00
DISTRO: fedora # standard distro
2020-11-12 01:19:37 +01:00
DOCKER_FILE: packaging/docker/Dockerfile.${DISTRO}
2019-03-09 13:07:39 +01:00
DOCKER_TAG: ${CI_COMMIT_REF_NAME}
DOCKER_IMAGE: registry.git.rwth-aachen.de/acs/public/villas/node
2020-11-12 01:19:37 +01:00
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-${DISTRO}
2020-11-11 21:32:07 +01:00
DOCKER_CLI_EXPERIMENTAL: enabled
CMAKE_BUILD_OPTS: "--parallel 16"
CMAKE_EXTRA_OPTS: "-DCMAKE_BUILD_TYPE=Release -DVILLAS_COMPILE_WARNING_AS_ERROR=ON"
2016-09-07 06:23:47 +02:00
stages:
2020-06-07 01:38:05 +02:00
- prepare
- build
- test
- packaging
- deploy
2021-01-08 21:11:16 +01:00
- latest
2017-05-01 16:57:30 +02:00
# Stage: prepare
2016-09-07 06:23:47 +02:00
# Build docker image which is used to build & test VILLASnode
2021-01-08 11:01:46 +01:00
prepare:docker:
2016-09-07 06:23:47 +02:00
stage: prepare
2021-02-17 15:57:32 +01:00
image: docker:20.10
2016-09-07 06:23:47 +02:00
script:
2020-12-04 13:55:22 +01:00
- docker build ${DOCKER_OPTS}
2020-06-07 01:38:05 +02:00
--file ${DOCKER_FILE}
2021-01-04 18:47:13 +01:00
--tag ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
--target ${TARGET} .
variables:
TARGET: dev
2021-01-08 11:01:46 +01:00
parallel:
matrix:
- DISTRO: [ ubuntu, debian, rocky ]
2021-01-08 11:01:46 +01:00
- DISTRO: fedora
2021-05-10 00:48:00 +00:00
DOCKER_OPTS: --tag ${DOCKER_IMAGE}/dev:${CI_COMMIT_REF_NAME}
2021-01-08 11:01:46 +01:00
- DISTRO: fedora
DOCKER_FILE: packaging/docker/Dockerfile.fedora-minimal
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-fedora-minimal
- DISTRO: fedora
TARGET: dev-vscode
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-vscode
2016-10-14 01:08:57 -04:00
tags:
2020-12-04 13:55:22 +01:00
- docker
2016-09-07 06:23:47 +02:00
# Stage: build
2016-09-07 06:23:47 +02:00
2021-01-08 21:11:16 +01:00
build:source:
2016-09-07 06:23:47 +02:00
stage: build
2021-01-08 21:11:16 +01:00
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
2016-09-07 06:23:47 +02:00
script:
- cmake -S . -B build ${CMAKE_OPTS} ${CMAKE_EXTRA_OPTS}
- cmake --build build ${CMAKE_BUILD_OPTS}
2016-09-07 06:23:47 +02:00
artifacts:
expire_in: 1 week
2016-09-07 06:23:47 +02:00
paths:
2020-06-07 01:38:05 +02:00
- build/
2021-01-08 21:11:16 +01:00
variables:
CMAKE: cmake
2021-01-08 11:01:46 +01:00
parallel:
matrix:
- DISTRO: [ fedora, fedora-minimal, debian, rocky, ubuntu ]
2021-01-08 11:01:46 +01:00
- DISTRO: fedora-minimal
CMAKE_EXTRA_OPTS: -DVILLAS_COMPILE_WARNING_AS_ERROR=ON
-DWITH_API=OFF
2021-01-08 11:01:46 +01:00
-DWITH_CLIENTS=OFF
2021-07-20 18:15:11 +02:00
-DWITH_CONFIG=OFF
2021-01-08 11:01:46 +01:00
-DWITH_DOC=OFF
-DWITH_FPGA=OFF
2021-07-20 18:15:11 +02:00
-DWITH_GRAPHVIZ=OFF
-DWITH_HOOKS=OFF
-DWITH_LUA=OFF
-DWITH_OPENMP=OFF
-DWITH_PLUGINS=OFF
-DWITH_SRC=OFF
-DWITH_TESTS=OFF
-DWITH_TOOLS=OFF
-DWITH_WEB=OFF
2021-09-21 11:04:18 +02:00
-DCMAKE_MODULE_PATH=/usr/local/lib64/cmake
2021-01-08 11:01:46 +01:00
-DCMAKE_PREFIX_PATH=/usr/local
2016-10-14 01:08:57 -04:00
tags:
2020-06-07 01:38:05 +02:00
- docker
# Stage: test
test:python:
2021-01-04 18:47:13 +01:00
stage: test
script:
- cd python
- /venv/bin/black --check .
- /venv/bin/mypy .
- /venv/bin/flake8 .
- /venv/bin/pytest -v .
2021-09-22 10:27:16 +02:00
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
2021-01-04 18:47:13 +01:00
tags:
- docker
test:cppcheck:
stage: test
script:
- ./tools/run-cppcheck.sh | tee cppcheck.log
2021-09-22 10:27:16 +02:00
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
2021-01-04 18:47:13 +01:00
tags:
- docker
2021-01-08 21:11:16 +01:00
needs:
- job: "build:source: [fedora]"
2021-01-04 18:47:13 +01:00
artifacts:
when: on_failure
paths:
- cppcheck.log
expose_as: cppcheck
test:unit:
stage: test
2021-05-10 00:46:01 +00:00
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
2021-01-04 18:47:13 +01:00
script:
- cmake -S . -B build ${CMAKE_OPTS}
- cmake --build build ${CMAKE_BUILD_OPTS} --target run-unit-tests run-unit-tests-common
2021-01-04 18:47:13 +01:00
tags:
- docker
2021-01-08 21:11:16 +01:00
needs:
- job: "build:source: [fedora]"
artifacts: true
2021-01-04 18:47:13 +01:00
test:integration:
stage: test
2021-05-10 00:46:01 +00:00
image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
2021-01-04 18:47:13 +01:00
script:
- cmake -S . -B build ${CMAKE_OPTS}
- cmake --build build ${CMAKE_BUILD_OPTS} --target run-integration-tests
2021-01-04 18:47:13 +01:00
artifacts:
name: ${CI_PROJECT_NAME}-integration-tests-${CI_BUILD_REF}
when: always
paths:
- build/tests/integration/
services:
- name: eclipse-mosquitto:2.0
alias: mosquitto
command: [ mosquitto, -c, /mosquitto-no-auth.conf ]
- name: rwthacs/rabbitmq
alias: rabbitmq
- name: redis:6.2
alias: redis
2021-01-04 18:47:13 +01:00
tags:
- docker
2021-01-08 21:11:16 +01:00
needs:
- job: "build:source: [fedora]"
artifacts: true
2020-06-07 23:28:43 +02:00
test:reuse:
2021-01-04 18:47:13 +01:00
stage: test
image:
2021-01-04 18:47:13 +01:00
name: fsfe/reuse:latest
entrypoint: [""]
tags:
- docker
script:
- reuse lint
2020-12-04 13:55:22 +01:00
# Stage: packaging
2020-09-03 16:58:18 +02:00
2021-09-21 11:04:18 +02:00
pkg:docker:
2019-04-05 02:19:40 +02:00
stage: packaging
2021-02-17 15:57:32 +01:00
image: docker:20.10
2021-01-04 21:32:03 +01:00
before_script:
2020-12-04 13:55:22 +01:00
- mkdir -p ~/.docker/cli-plugins/
2021-09-21 11:01:48 +02:00
- wget -O ~/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.6.3/buildx-v0.6.3.linux-amd64
2020-12-04 13:55:22 +01:00
- chmod a+x ~/.docker/cli-plugins/docker-buildx
2021-02-17 16:04:47 +01:00
- docker buildx create --use --name cross-platform-build --buildkitd-flags "--allow-insecure-entitlement security.insecure"
2021-01-04 21:32:03 +01:00
- docker buildx inspect --bootstrap cross-platform-build
2021-01-08 21:11:16 +01:00
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
2021-01-04 21:32:03 +01:00
script:
- docker buildx build ${DOCKER_OPTS}
2021-02-16 14:42:05 +01:00
--pull
2021-02-17 16:04:47 +01:00
--allow security.insecure
--output type=docker
2021-09-21 11:04:18 +02:00
--target ${TARGET}
2021-01-08 11:01:46 +01:00
--build-arg ARCH=${ARCH}
--build-arg TRIPLET=${TRIPLET}
--build-arg CMAKE_OPTS="${CMAKE_OPTS} ${CMAKE_EXTRA_OPTS}"
2020-12-04 13:55:22 +01:00
--platform ${PLATFORM}
2021-01-08 11:01:46 +01:00
--file ${DOCKER_FILE}
--tag ${DOCKER_IMAGE}:${DOCKER_TAG}-${ARCH} .
- docker push ${DOCKER_IMAGE}:${DOCKER_TAG}-${ARCH}
2019-04-05 02:19:40 +02:00
tags:
2020-06-07 01:38:05 +02:00
- docker
2021-09-21 11:04:18 +02:00
variables:
TARGET: app
2021-01-08 11:01:46 +01:00
parallel:
matrix:
- DISTRO: debian
2021-09-22 10:46:38 +02:00
PLATFORM: linux/amd64
ARCH: x86_64
TRIPLET: x86_64-linux-gnu
- DISTRO: debian
2021-09-22 10:46:38 +02:00
PLATFORM: linux/arm/v7
ARCH: armhf
TRIPLET: arm-linux-gnueabihf
DOCKER_FILE: packaging/docker/Dockerfile.debian-multiarch
- DISTRO: debian
2021-09-22 10:46:38 +02:00
PLATFORM: linux/arm64/v8
ARCH: arm64
TRIPLET: aarch64-linux-gnu
DOCKER_FILE: packaging/docker/Dockerfile.debian-multiarch
2020-12-04 13:55:22 +01:00
needs: []
2019-04-05 02:19:40 +02:00
2017-11-20 14:30:17 +01:00
# Stage: deploy
2017-03-31 21:20:36 +02:00
2021-01-08 21:11:16 +01:00
deploy:docker:
stage: deploy
2021-02-17 15:57:32 +01:00
image: docker:20.10
2021-01-08 21:11:16 +01:00
variables:
DOCKER_CLI_EXPERIMENTAL: enabled
before_script:
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
script:
- docker manifest create ${DOCKER_IMAGE}:${DOCKER_TAG}
${DOCKER_IMAGE}:${DOCKER_TAG}-x86_64
2021-01-08 21:11:16 +01:00
${DOCKER_IMAGE}:${DOCKER_TAG}-arm64
${DOCKER_IMAGE}:${DOCKER_TAG}-armhf
- docker manifest push ${DOCKER_IMAGE}:${DOCKER_TAG}
tags:
- docker
needs:
- job: "pkg:docker: [debian, linux/arm64/v8, arm64, aarch64-linux-gnu, packaging/docker/Dockerfile.debian-multiarch]"
- job: "pkg:docker: [debian, linux/arm/v7, armhf, arm-linux-gnueabihf, packaging/docker/Dockerfile.debian-multiarch]"
- job: "pkg:docker: [debian, linux/amd64, x86_64, x86_64-linux-gnu]"
deploy:docker-dev:
stage: deploy
image: docker:20.10
variables:
DOCKER_CLI_EXPERIMENTAL: enabled
before_script:
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
script:
- docker push ${DOCKER_IMAGE}/dev:${DOCKER_TAG}
2021-01-08 21:11:16 +01:00
tags:
- docker
needs:
2021-05-10 00:48:00 +00:00
- job: "prepare:docker: [fedora, --tag ${DOCKER_IMAGE}/dev:${CI_COMMIT_REF_NAME}]"
2021-01-08 21:11:16 +01:00
deploy:docker-dev-vscode:
stage: deploy
image: docker:20.10
variables:
DOCKER_CLI_EXPERIMENTAL: enabled
before_script:
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
script:
- docker push ${DOCKER_IMAGE}/dev-vscode:${DOCKER_TAG}
tags:
- docker
needs:
- job: "prepare:docker: [fedora, dev-vscode, ${DOCKER_IMAGE}/dev-vscode]"
2021-01-08 21:11:16 +01:00
# Stage: latest
2021-01-08 21:11:16 +01:00
.latest:docker:latest: &deploy_latest_docker
stage: latest
2021-02-17 15:57:32 +01:00
image: docker:20.10
2020-12-04 13:55:22 +01:00
before_script:
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
script:
2022-03-15 12:35:33 -04:00
- docker manifest create ${DOCKER_IMAGE}:latest
2022-03-15 08:59:55 -04:00
${DOCKER_IMAGE}:${DOCKER_TAG}-x86_64
${DOCKER_IMAGE}:${DOCKER_TAG}-arm64
${DOCKER_IMAGE}:${DOCKER_TAG}-armhf
- docker manifest push ${DOCKER_IMAGE}:latest
2019-10-26 16:39:28 +02:00
tags:
2020-06-07 01:38:05 +02:00
- docker
2021-01-08 21:11:16 +01:00
needs:
- job: deploy:docker
2021-01-04 18:47:13 +01:00
.latest:docker-dev:latest: &deploy_latest_docker_dev
stage: latest
image: docker:20.10
before_script:
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
script:
- docker tag ${DOCKER_IMAGE}/dev:${DOCKER_TAG} ${DOCKER_IMAGE}/dev:latest
- docker push ${DOCKER_IMAGE}/dev:latest
tags:
- docker
needs:
- job: deploy:docker-dev
2021-01-08 21:11:16 +01:00
latest:docker:
<<: *deploy_latest_docker
only:
- "/^v\\d+(\\.\\d+)+$/" # Only on version tags
2021-01-04 18:47:13 +01:00
latest:docker-dev:
<<: *deploy_latest_docker_dev
only:
- "/^v\\d+(\\.\\d+)+$/" # Only on version tags
2021-01-08 21:11:16 +01:00
latest:docker:manual:
<<: *deploy_latest_docker
when: manual
except:
2021-01-04 18:47:13 +01:00
- "/^v\\d+(\\.\\d+)+$/" # Only on version tags
latest:docker-dev:manual:
<<: *deploy_latest_docker_dev
when: manual
except:
- "/^v\\d+(\\.\\d+)+$/" # Only on version tags