1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

ci: multiplatform builds

This commit is contained in:
Steffen Vogel 2020-12-04 13:55:22 +01:00 committed by Steffen Vogel
parent bd6482e3b6
commit 0f2b33386b
4 changed files with 157 additions and 131 deletions

View file

@ -8,6 +8,7 @@ variables:
DOCKER_IMAGE: registry.git.rwth-aachen.de/acs/public/villas/node
DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-${DISTRO}
DOCKER_CLI_EXPERIMENTAL: enabled
DOCKER_PLATFORMS: amd64 armv7 arm64
MAKE_OPTS: "-j16"
RELEASEVER: "33"
@ -17,10 +18,7 @@ stages:
- 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 .
- deploy2
# Stage: prepare
##############################################################################
@ -28,14 +26,14 @@ before_script:
# Build docker image which is used to build & test VILLASnode
.prepare:docker-dev: &prepare_docker_dev
stage: prepare
image: docker:19.03
script:
- docker buildx build ${DOCKER_OPTS}
- docker build ${DOCKER_OPTS}
--file ${DOCKER_FILE}
--tag ${DOCKER_IMAGE_DEV}:${DOCKER_TAG}
--target dev .
tags:
- shell
- linux
- docker
prepare:fedora:x86_64:
<<: *prepare_docker_dev
@ -188,89 +186,79 @@ build:docs:
# Stage: test
##############################################################################
test:flake8:
stage: test
script:
- flake8 python/
image: ${DOCKER_IMAGE}/dev:${DOCKER_TAG}
tags:
- docker
# 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}
needs:
- job: build:fedora:x86_64
tags:
- docker
artifacts:
when: on_failure
paths:
- cppcheck.log
expose_as: cppcheck
# 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}
# needs:
# - job: build:fedora:x86_64
# tags:
# - docker
# artifacts:
# when: on_failure
# paths:
# - cppcheck.log
# expose_as: cppcheck
test:unit:
stage: test
needs:
- job: 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:unit:
# stage: test
# needs:
# - job: 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
needs:
- job: 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
# test:integration:
# stage: test
# allow_failure: true
# needs:
# - job: 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
script:
- docker buildx build
--target app
--file packaging/docker/Dockerfile.alpine
--tag ${DOCKER_IMAGE}:${DOCKER_TAG} .
tags:
- docker
packaging:rpm:
stage: packaging
image: ${DOCKER_IMAGE}/dev:${DOCKER_TAG}
needs:
- job: build:fedora:x86_64
script:
@ -284,10 +272,43 @@ packaging:rpm:
paths:
- build/*.tar.gz
- build/*.rpm
image: ${DOCKER_IMAGE}/dev:${DOCKER_TAG}
tags:
- docker
.packaging:docker: &packaging_docker
stage: packaging
image: docker:19.03
script:
- mkdir -p ~/.docker/cli-plugins/
- wget -O ~/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.4.2/buildx-v0.4.2.linux-amd64
- chmod a+x ~/.docker/cli-plugins/docker-buildx
- docker buildx build
--target app
--platform ${PLATFORM}
--file packaging/docker/Dockerfile.alpine
--tag ${DOCKER_IMAGE}:${DOCKER_TAG} .
tags:
- docker
needs: []
packaging:docker:amd64:
<<: *packaging_docker
variables:
PLATFORM: linux/amd64
DOCKER_TAG: ${CI_COMMIT_REF_NAME}-amd64
packaging:docker:arm64:
<<: *packaging_docker
variables:
PLATFORM: linux/arm64
DOCKER_TAG: ${CI_COMMIT_REF_NAME}-arm64
packaging:docker:armv7:
<<: *packaging_docker
variables:
PLATFORM: linux/arm/v7
DOCKER_TAG: ${CI_COMMIT_REF_NAME}-armv7
# Stage: deploy
##############################################################################
@ -335,39 +356,47 @@ deploy:packages:tags:
# Only on version tags
- "/^v\\d+(\\.\\d+)+$/"
.deploy:docker: &deploy_docker
deploy:docker:
stage: deploy
image: docker:19.03
variables:
DOCKER_CLI_EXPERIMENTAL: enabled
before_script:
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
needs:
- packaging:docker:amd64
- packaging:docker:armv7
- packaging:docker:arm64
script:
- docker push ${DOCKER_IMAGE}/dev:${DOCKER_TAG}
- for PF in ${DOCKER_PLATFORMS}; do
docker push ${DOCKER_IMAGE}:${DOCKER_TAG}-${PF};
done
- docker manifest create ${DOCKER_IMAGE}:${DOCKER_TAG}
${DOCKER_IMAGE}:${DOCKER_TAG}-amd64
${DOCKER_IMAGE}:${DOCKER_TAG}-arm64
${DOCKER_IMAGE}:${DOCKER_TAG}-armv7
- docker manifest push ${DOCKER_IMAGE}:${DOCKER_TAG}
tags:
- docker
# Stage: deploy2
##############################################################################
deploy:docker:latest:
stage: deploy2
image: docker:19.03
before_script:
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
.deploy:docker:latest: &deploy_docker_latest
<<: *deploy_docker
needs:
- deploy:docker
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}:${DOCKER_TAG} ${DOCKER_IMAGE}:latest
- docker push ${DOCKER_IMAGE}:latest
- docker tag ${DOCKER_IMAGE}/dev:${DOCKER_TAG} ${DOCKER_IMAGE}/dev:latest
- docker push ${DOCKER_IMAGE}/dev:latest
tags:
- docker
deploy:docker:manual:
<<: *deploy_docker_latest
when: manual
deploy:docker:tags:
<<: *deploy_docker_latest
only:
# Only on version tags
- "/^v\\d+(\\.\\d+)+$/"
deploy:docker:tags:
<<: *deploy_docker
script:
- docker push ${DOCKER_IMAGE}:${DOCKER_TAG}
- docker push ${DOCKER_IMAGE}/dev:${DOCKER_TAG}
tags:
- docker
only:
# Only on version tags
- "/^v\\d+(\\.\\d+)+$/"
- master

View file

@ -125,7 +125,12 @@ if(NOT RE_FOUND)
endif()
# Check if libwebsockets is build with deflate extension
FindSymbol(${LIBWEBSOCKETS_LINK_LIBRARIES} lws_extension_callback_pm_deflate LWS_DEFLATE_FOUND)
if(${CMAKE_VERSION} VERSION_LESS "3.12.4")
set(LWS_LOCATION "${LIBWEBSOCKETS_LIBRARY_DIRS}/lib${LIBWEBSOCKETS_LIBRARIES}.so")
else()
set(LWS_LOCATION ${LIBWEBSOCKETS_LINK_LIBRARIES})
endif()
FindSymbol(${LWS_LOCATION} lws_extension_callback_pm_deflate LWS_DEFLATE_FOUND)
# Build options
cmake_dependent_option(WITH_HOOKS "Build with support for processing hook plugins" ON "" OFF)

View file

@ -125,8 +125,7 @@ endif()
if(WITH_NODE_COMEDI)
list(APPEND NODE_SRC comedi.cpp)
list(APPEND INCLUDE_DIRS ${COMEDILIB_INCLUDE_DIRS})
list(APPEND LIBRARY_DIRS ${COMEDILIB_LIBDIR})
list(APPEND LIBRARIES ${COMEDILIB_LIBRARIES})
list(APPEND LIBRARIES ${COMEDILIB_LDFLAGS})
endif()
# Enable Infiniband support
@ -170,5 +169,4 @@ endif()
add_library(nodes STATIC ${NODE_SRC})
target_include_directories(nodes PUBLIC ${INCLUDE_DIRS})
target_link_directories(nodes PUBLIC ${LIBRARY_DIRS})
target_link_libraries(nodes PUBLIC ${LIBRARIES})

View file

@ -8,6 +8,9 @@ TRIPLET=${TRIPLET:-x86_64-linux-gnu}
CONFIGURE_OPTS+=" --host=${TRIPLET} --prefix=${PREFIX}"
CMAKE_OPTS+=" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${PREFIX}"
git config --global http.postBuffer 524288000
git config --global core.compression 0
if [ -n "${PACKAGE}" ]; then
TARGET="package"
CMAKE_OPTS+=" -DCPACK_GENERATOR=RPM"
@ -30,10 +33,9 @@ pushd ${DIR}
if ! pkg-config "criterion >= 2.3.1" && \
[ "${ARCH}" == "x86_64" ] && \
[ -z "${SKIP_CRITERION}" ]; then
git clone --recursive https://github.com/Snaipe/Criterion
git clone --branch v2.3.3 --depth 1 --recursive https://github.com/Snaipe/Criterion
mkdir -p Criterion/build
pushd Criterion/build
git checkout v2.3.3
cmake ${CMAKE_OPTS} ..
if [ -z "${PACKAGE}" ]; then
make -j$(nproc) install
@ -60,10 +62,9 @@ fi
# Build & Install Fmtlib
if ! pkg-config "fmt >= 6.1.2" && \
[ -z "${SKIP_FMTLIB}" ]; then
git clone --recursive https://github.com/fmtlib/fmt.git
git clone --branch 6.1.2 --depth 1 --recursive https://github.com/fmtlib/fmt.git
mkdir -p fmt/build
pushd fmt/build
git checkout 6.1.2
cmake -DBUILD_SHARED_LIBS=1 ${CMAKE_OPTS} ..
make -j$(nproc) ${TARGET}
if [ -n "${PACKAGE}" ]; then
@ -75,10 +76,9 @@ fi
# Build & Install spdlog
if ! pkg-config "spdlog >= 1.5.0" && \
[ -z "${SKIP_SPDLOG}" ]; then
git clone --recursive https://github.com/gabime/spdlog.git
git clone --branch v1.5.0 --depth 1 --recursive https://github.com/gabime/spdlog.git
mkdir -p spdlog/build
pushd spdlog/build
git checkout v1.5.0
cmake -DSPDLOG_FMT_EXTERNAL=ON -DSPDLOG_BUILD_BENCH=OFF -DSPDLOG_BUILD_SHARED=ON ${CMAKE_OPTS} ..
make -j$(nproc) ${TARGET}
if [ -n "${PACKAGE}" ]; then
@ -90,10 +90,9 @@ fi
# Build & Install libiec61850
if ! pkg-config "libiec61850 >= 1.3.1" && \
[ -z "${SKIP_LIBIEC61850}" ]; then
git clone https://github.com/mz-automation/libiec61850
git clone --branch v1.4 --depth 1 https://github.com/mz-automation/libiec61850
mkdir -p libiec61850/build
pushd libiec61850/build
git checkout v1.4
cmake ${CMAKE_OPTS} ..
make -j$(nproc) ${TARGET}
if [ -n "${PACKAGE}" ]; then
@ -105,10 +104,9 @@ fi
# Build & Install libwebsockets
if ! pkg-config "libwebsockets >= 2.3.0" && \
[ -z "${SKIP_WEBSOCKETS}" ]; then
git clone https://libwebsockets.org/repo/libwebsockets
git clone --branch v4.0-stable --depth 1 https://libwebsockets.org/repo/libwebsockets
mkdir -p libwebsockets/build
pushd libwebsockets/build
git checkout v4.0-stable
cmake -DLWS_WITHOUT_TESTAPPS=ON -DLWS_WITHOUT_EXTENSIONS=OFF -DLWS_WITH_SERVER_STATUS=ON ${CMAKE_OPTS} ..
make -j$(nproc) ${TARGET}
popd
@ -118,9 +116,8 @@ fi
if ! pkg-config "libuldaq >= 1.0.0" && \
[ "${DISTRO}" != "debian-multiarch" ] && \
[ -z "${SKIP_ULDAQ}" ]; then
git clone https://github.com/stv0g/uldaq
git clone --branch rpmbuild --depth 1 https://github.com/stv0g/uldaq
pushd uldaq
git checkout rpmbuild
autoreconf -i
./configure --enable-examples=no ${CONFIGURE_OPTS}
if [ -z "${PACKAGE}" ]; then
@ -136,9 +133,8 @@ fi
# Build & Install comedilib
if ! pkg-config "comedilib >= 0.11.0" && \
[ -z "${SKIP_COMEDILIB}" ]; then
git clone https://github.com/Linux-Comedi/comedilib.git
git clone --branch r0_12_0 --depth 1 https://github.com/Linux-Comedi/comedilib.git
pushd comedilib
git checkout r0_12_0
./autogen.sh
./configure ${CONFIGURE_OPTS}
if [ -z "${PACKAGE}" ]; then
@ -155,9 +151,8 @@ fi
# Build & Install libre
if ! pkg-config "libre >= 0.5.6" && \
[ -z "${SKIP_LIBRE}" ]; then
git clone https://github.com/creytiv/re.git
git clone --branch v0.6.1 --depth 1 https://github.com/creytiv/re.git
pushd re
git checkout v0.6.1
if [ -z "${PACKAGE}" ]; then
make -j$(nproc) install
else
@ -170,7 +165,7 @@ fi
# Build & Install nanomsg
if ! pkg-config "nanomsg >= 1.0.0" && \
[ -z "${SKIP_NANOMSG}" ]; then
git clone https://github.com/nanomsg/nanomsg.git
git clone --branch 1.1.5 --depth 1 https://github.com/nanomsg/nanomsg.git
mkdir -p nanomsg/build
pushd nanomsg/build
cmake ${CMAKE_OPTS} ..
@ -183,10 +178,9 @@ fi
# Build & Install libxil
if ! pkg-config "libxil >= 1.0.0" && \
[ -z "${SKIP_LIBXIL}" ]; then
git clone https://git.rwth-aachen.de/acs/public/villas/fpga/libxil.git
git clone --branch v0.1.0 --depth 1 https://git.rwth-aachen.de/acs/public/villas/fpga/libxil.git
mkdir -p libxil/build
pushd libxil/build
git checkout b622ddef4315b7e8a56637d07aa2b26ba480d53a
cmake ${CMAKE_OPTS} ..
if [ -z "${PACKAGE}" ]; then
make -j$(nproc) install