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).
- mkdir release
- cd release
- cmake -DCMAKE_BUILD_TYPE=Release ..
- 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-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 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: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:
- 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-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: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: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 libreadline7 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"
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
.obs: &obs_template
image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/ci-docker-images/osc:latest
before_script:
- install_packages python3 bash realpath git
- 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