Newer
Older
# NOTE #1: Our GitLab CI runs jobs inside Alpine Linux container by default.
#
# NOTE #2: Keep in mind that each job (e.g. test-gcc) is executed in a separate
# isolated environment (it may be even on different machine). There are no
# files implicitly passed between jobs or stages, only artifacts and maybe
# cache (depends on configuration).
- cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
- make -j $(grep -c processor /proc/cpuinfo)
expire_in: 1 day
.build:push: &build-push
<<: *build
Tomáš Pecka
committed
except:
variables:
- $SCHEDULED_NIGHTLY
.build:compatibility: &build-compatibility
<<: *build
only:
variables:
- $SCHEDULED_COMPATIBILITY
build:alpine:gcc:
<<: *build-push
- apk add --no-cache bash build-base cmake python3 libexecinfo-dev libxml2-dev tclap-dev readline-dev qt5-qtbase-dev graphviz-dev jsoncpp-dev
# build:alpine:clang:
# <<: *build-compatibility
# image: alpine:3.9
# before_script:
# - apk add --no-cache bash build-base cmake python3 libexecinfo-dev libxml2-dev tclap-dev readline-dev qt5-qtbase-dev graphviz-dev jsoncpp-dev clang
# variables:
# CXX: clang++
# build:debian:stable:
# <<: *build-compatibility
# image: amd64/debian:stable-slim
# before_script:
# - apt-get update
# - apt-get install -y build-essential cmake make python3 libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
build:debian:testing:
<<: *build-compatibility
image: amd64/debian:testing-slim
before_script:
- apt-get update
- apt-get install -y build-essential cmake make python3 libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
build:debian:testing:clang:
<<: *build-push
image: amd64/debian:testing-slim
before_script:
- apt-get update
- apt-get install -y build-essential clang-7 cmake make python3 libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
variables:
CXX: clang++-7
build:arch:
<<: *build-compatibility
image: archlinux/base:latest
before_script:
- pacman -Syu --noconfirm base-devel cmake make python libxml2 tclap readline qt5-base graphviz jsoncpp
- pacman -Syu --noconfirm binutils
- strip --remove-section=.note.ABI-tag /usr/lib/libQt5Core.so.5
Tomáš Pecka
committed
build:opensuse:
<<: *build-compatibility
image: opensuse/leap:latest
before_script:
- zypper -n install python3 cmake gcc-c++ curl bash make libxml2-devel tclap readline-devel libQt5Widgets-devel libQt5Xml-devel graphviz-devel jsoncpp-devel
Tomáš Pecka
committed
# gcc 7.3.0 fails with StringTest.h (in variant, it thinks something is uninitialized)
- zypper -n install clang5
- export CXX=clang++-5.0
build:ubuntu:lts:
<<: *build-compatibility
image: ubuntu:latest
before_script:
- apt-get update
- apt-get install -y build-essential cmake make python3 libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
Tomáš Pecka
committed
# gcc 7.3.0 fails with StringTest.h (in variant, it thinks something is uninitialized)
- apt-get install -y clang-5.0
- export CXX=clang++-5.0
- export CXXFLAGS=-stdlib=libstdc++
build:ubuntu:rolling:
<<: *build-compatibility
image: ubuntu:rolling
before_script:
- apt-get update
- apt-get install -y build-essential cmake make python3 libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
Tomáš Pecka
committed
build:doc:
stage: build
before_script:
- apk add --no-cache doxygen graphviz
allow_failure: true
artifacts:
name: docs
paths:
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
.static: &static
stage: test
image: amd64/debian:testing-slim
before_script:
- apt-get update
dependencies:
- build:debian:testing:clang
except:
variables:
- $SCHEDULED_NIGHTLY
allow_failure: true
static:cppcheck:
<<: *static
script:
- apt-get install -y cppcheck
- cppcheck -q --enable=all --project=release/compile_commands.json --suppress="*:*/contrib/*" -j$(grep -c processor /proc/cpuinfo) --error-exitcode=1
static:clang-tidy:
<<: *static
script:
- apt-get install -y clang-tidy
- apt-get install -y libxml2-dev libtclap-dev libreadline-dev qtbase5-dev graphviz-dev libjsoncpp-dev
- find . -wholename "*/src/*.cpp" -print0 | xargs -n1 -P$(grep -c processor /proc/cpuinfo) -0 clang-tidy -warnings-as-errors='*' -p release/
# ---
- mkdir reports
- make test ARGS="-j$(grep -c processor /proc/cpuinfo) --output-on-failure"
.test:push: &test-push
<<: *test
- apk add --no-cache bash bc coreutils python3 cmake make libexecinfo libxml2 tclap readline qt5-qtbase qt5-qtbase-x11 graphviz jsoncpp
Tomáš Pecka
committed
except:
variables:
- $SCHEDULED_NIGHTLY
.test:compatibility: &test-compatibility
<<: *test
only:
variables:
- $SCHEDULED_COMPATIBILITY
test:alpine:gcc:
<<: *test-push
- apk add --no-cache bash bc coreutils python3 cmake make libexecinfo libxml2 tclap readline qt5-qtbase qt5-qtbase-x11 graphviz jsoncpp
dependencies:
- build:alpine:gcc
# test:alpine:clang:
# <<: *test-compatibility
# image: alpine:3.9
# before_script:
# - apk add --no-cache bash bc coreutils python3 cmake make libexecinfo libxml2 tclap readline qt5-qtbase qt5-qtbase-x11 graphviz jsoncpp
# dependencies:
# - build:alpine:clang
# test:debian:stable:
# <<: *test-compatibility
# image: amd64/debian:stable-slim
# before_script:
# - apt-get update
# - apt-get install -y build-essential bash bc coreutils cmake make python3 libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
test:debian:testing:
<<: *test-compatibility
image: amd64/debian:testing-slim
before_script:
- apt-get update
- apt-get install -y build-essential bash bc coreutils cmake make python3 libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
test:debian:testing:clang:
<<: *test-push
image: amd64/debian:testing-slim
before_script:
- apt-get update
- apt-get install -y build-essential bash bc coreutils cmake make python3 libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
dependencies:
- build:debian:testing:clang
test:arch:
<<: *test-compatibility
image: archlinux/base:latest
before_script:
- pacman -Syu --noconfirm base-devel bash bc coreutils cmake make python libxml2 tclap readline qt5-base graphviz jsoncpp
- pacman -Syu --noconfirm binutils
- strip --remove-section=.note.ABI-tag /usr/lib/libQt5Core.so.5
Tomáš Pecka
committed
test:opensuse:
<<: *test-compatibility
image: opensuse/leap:latest
before_script:
- zypper -n install bash bc coreutils python3 cmake make libxml2 readline libQt5Widgets5 libQt5Xml5 graphviz libjsoncpp19
Tomáš Pecka
committed
dependencies:
- build:opensuse
test:ubuntu:lts:
<<: *test-compatibility
image: ubuntu:latest
before_script:
- apt-get update
- apt-get install -y build-essential bash bc coreutils cmake make python3 libxml2 libreadline7 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
Tomáš Pecka
committed
dependencies:
- build:ubuntu:lts
test:ubuntu:rolling:
<<: *test-compatibility
image: ubuntu:rolling
before_script:
- apt-get update
- apt-get install -y build-essential bash bc coreutils cmake make python3 libxml2 libreadline8 libqt5widgets5 libqt5xml5 graphviz libjsoncpp1
Tomáš Pecka
committed
dependencies:
- build:ubuntu:rolling
#========== Stage release =========
.docker: &docker_template
stage: docker
cache: {} # disable
variables:
DOCKER_DRIVER: overlay2
DOCKER_HOST: docker
# ---------
IMAGE_CLI: $CI_REGISTRY_IMAGE/cli
IMAGE_GUI: $CI_REGISTRY_IMAGE/gui
IMAGE_ALL: $CI_REGISTRY_IMAGE
# ---------
TAG_NIGHTLY: nightly
TAG_RELEASE: $CI_COMMIT_REF_NAME
TAG_LATEST: latest
services:
- docker:dind
before_script:
- apk add --no-cache docker
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- curl -X POST -F token="$PY_ALIB_TOKEN" -F ref=master https://gitlab.fit.cvut.cz/api/v4/projects/11497/trigger/pipeline
deploy:docker:nightly:
environment:
name: docker-nightly
- docker build -f extra/docker/Dockerfile.master -t "$IMAGE_ALL:$TAG_NIGHTLY" .
- docker build -f extra/docker/Dockerfile.master-cli -t "$IMAGE_CLI:$TAG_NIGHTLY" .
- docker tag "$IMAGE_ALL:$TAG_NIGHTLY" "$IMAGE_GUI:$TAG_NIGHTLY" # gui-version is now only a symlink to all-version
- docker run "$IMAGE_ALL:$TAG_NIGHTLY" /usr/bin/aql2 --help
- docker run "$IMAGE_CLI:$TAG_NIGHTLY" /usr/bin/aql2 --help
- docker run "$IMAGE_GUI:$TAG_NIGHTLY" /usr/bin/aql2 --help
- docker push "$IMAGE_ALL:$TAG_NIGHTLY"
- docker push "$IMAGE_CLI:$TAG_NIGHTLY"
- docker push "$IMAGE_GUI:$TAG_NIGHTLY"
deploy:docker:release:
only:
- /^v.*$/
except:
- branches
environment:
name: docker-production
- docker build -f extra/docker/Dockerfile.master -t "$IMAGE_ALL:$TAG_RELEASE" -t "$IMAGE_ALL:$TAG_LATEST" .
- docker build -f extra/docker/Dockerfile.master-cli -t "$IMAGE_CLI:$TAG_RELEASE" -t "$IMAGE_CLI:$TAG_LATEST" .
- docker tag "$IMAGE_ALL:$TAG_RELEASE" "$IMAGE_GUI:$TAG_RELEASE" # gui-version is now only a symlink to all-version
- docker tag "$IMAGE_ALL:$TAG_LATEST" "$IMAGE_GUI:$TAG_LATEST" # gui-version is now only a symlink to all-version
- docker run "$IMAGE_ALL:$TAG_RELEASE" /usr/bin/aql2 --help
- docker run "$IMAGE_CLI:$TAG_RELEASE" /usr/bin/aql2 --help
- docker run "$IMAGE_GUI:$TAG_RELEASE" /usr/bin/aql2 --help
- docker push "$IMAGE_ALL:$TAG_LATEST"
- docker push "$IMAGE_CLI:$TAG_LATEST"
- docker push "$IMAGE_GUI:$TAG_LATEST"
- docker push "$IMAGE_ALL:$TAG_RELEASE"
- docker push "$IMAGE_CLI:$TAG_RELEASE"
- docker push "$IMAGE_GUI:$TAG_RELEASE"
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
.obs: &obs_template
image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/ci-docker-images/osc:latest
before_script:
- echo -e "[general]\napiurl = https://api.opensuse.org\n\n[https://api.opensuse.org]\nuser = ${OBS_USER}\npass = ${OBS_PASS}\n" > ~/.oscrc
- mkdir -p /obs_repo /distrofiles
script:
- extra/obs/make-distrofiles.sh ${OBS_MODE} /distrofiles/
- cd /obs_repo && osc co ${OBS_PROJECT} ${OBS_PACKAGE}
- cd ${OBS_PROJECT}/${OBS_PACKAGE}
- mv /distrofiles/* .
- osc addremove
- osc ci -n -m "CI autocommit (${CI_COMMIT_SHA}, tag=${CI_COMMIT_TAG})"
dependencies: []
deploy:obs:nightly:
<<: *obs_template
stage: deploy
environment:
name: obs-nightly
url: https://build.opensuse.org/package/show/home:algorithms-library/algorithms-library-all-nightly
variables:
OBS_PROJECT: home:algorithms-library
OBS_PACKAGE: algorithms-library-all-nightly
OBS_MODE: nightly
only:
variables:
- $SCHEDULED_NIGHTLY
deploy:obs:release:
<<: *obs_template
stage: deploy
environment:
name: obs-production
url: https://build.opensuse.org/package/show/home:algorithms-library/algorithms-library
variables:
OBS_PROJECT: home:algorithms-library
OBS_PACKAGE: algorithms-library
OBS_MODE: release
only:
- /^v.*$/
except:
- branches