diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..547fec933ac5b46e3af42095849ce813b1cfa928
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,45 @@
+image: localhost:5000/ubuntu_gcc
+#before_script:
+#  - apt-get update
+#  - apt-get -y install cmake g++-7 gcovr bc
+#  - apt-get -y upgrade
+
+cache:
+  key: "$CI_COMMIT_REF_SLUG"
+  paths:
+    - build/
+  untracked: true
+
+stages:
+  - build
+  - test
+  - deploy
+
+build:
+  stage: build
+  script:
+    - mkdir -p build
+    - cd build
+    - CXX=g++-7 CC=gcc-7 cmake .. -DCMAKE_BUILD_TYPE=Coverage
+    - make pastis
+
+tests:
+  stage: test
+  script:
+    - ls > /dev/null # seems necessary to ensure build is here...
+    - cd build
+    - make unit_tests
+    - make coverage-report
+
+pages:
+  stage: deploy
+  dependencies:
+    - tests
+  script:
+    - ls > /dev/null # seems necessary to ensure build is here...
+    - rm -rf public/
+    - mv build/coverage/ public/
+  artifacts:
+    paths:
+      - public
+    expire_in: 30 days
diff --git a/README.md b/README.md
index 0231df2a18104e5caf072c9e24029a2541664701..998ca9a0365578584379848a92fe8f0af0a3bf65 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,14 @@
+Pipelines
+=========
+
+> [![build status](https://gitlab.delpinux.fr/code/pastis/badges/develop/build.svg)](https://gitlab.delpinux.fr/code/pastis/pipelines)
+[![coverage report](https://gitlab.delpinux.fr/code/pastis/badges/develop/coverage.svg)](https://gitlab.delpinux.fr/code/pastis/commits/develop)
+[`develop`](https://gitlab.delpinux.fr/code/pastis/tree/develop)
+
+> [![build status](https://gitlab.delpinux.fr/code/pastis/badges/master/build.svg)](https://gitlab.delpinux.fr/code/pastis/pipelines)
+[![coverage report](https://gitlab.delpinux.fr/code/pastis/badges/master/coverage.svg)](https://gitlab.delpinux.fr/code/pastis/commits/master)
+[`master`](https://gitlab.delpinux.fr/code/pastis/tree/master)
+
 Appetizer
 =========
 
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 38635a1d76bccde15b7e0ec9edce17c334b7f0ad..2c1ac56dc2e5ba1886c5efc79709ea6f01deecd4 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,18 +1,21 @@
 include_directories("${CATCH_INCLUDE_PATH}")
-
+include_directories("${PASTIS_BINARY_DIR}/src/utils")
 set(EXECUTABLE_OUTPUT_PATH ${PASTIS_BINARY_DIR})
+
 add_executable (unit_tests
   test_main.cpp
   test_PastisAssert.cpp
   test_RevisionInfo.cpp
   test_TinyMatrix.cpp
-  test_TinyVector.cpp)
+  test_TinyVector.cpp
+  )
 
 target_include_directories(Catch INTERFACE ${CATCH_INCLUDE_DIR})
-target_link_libraries (
-  unit_tests
+
+target_link_libraries (unit_tests
   PastisUtils
-  Catch)
+  Catch
+  )
 
 enable_testing()
 
diff --git a/tests/test_RevisionInfo.cpp b/tests/test_RevisionInfo.cpp
index 9359c8cb33fae4ba34385166e50395bda75542d9..d5c9d4b50cb1fe60ac2b7e11108f224b4e0bf083 100644
--- a/tests/test_RevisionInfo.cpp
+++ b/tests/test_RevisionInfo.cpp
@@ -2,6 +2,13 @@
 
 #include <RevisionInfo.hpp>
 
+#include <pastis_git_revision.hpp>
+
 TEST_CASE("RevisionInfo", "[utils]") {
-  REQUIRE(RevisionInfo::hasGitInfo() == true);
+#ifdef HAS_PASTIS_GIT_INFO
+#define HAS_GIT_INFO true
+#else
+#define HAS_GIT_INFO false
+#endif
+  REQUIRE( (RevisionInfo::hasGitInfo() == HAS_GIT_INFO) );
 }