diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ca813f544602fabf0c9bb7579e43b656fca8ca12
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,57 @@
+stages:
+  - build
+  - checks
+  - tests
+  - publish
+
+image: hub.docker.com/r/nikaro/poetry
+
+.changes: &changes
+  only:
+    changes:
+      - .gitlab-ci.yml
+      - pyproject.toml
+      - poetry.lock
+      - bin/silkaj
+      - silkaj/*.py
+      - tests/*.py
+
+build:
+  <<: *changes
+  stage: build
+  script:
+    - poetry install
+    - poetry build
+
+format:
+  <<: *changes
+  stage: checks
+  script:
+    - poetry install
+    - poetry shell
+    - black --check bin silkaj tests
+
+type:
+  <<: *changes
+  stage: checks 
+  script:
+    - poetry install 
+    - poetry shell
+    - mypy/pyright
+
+tests:
+  <<: *changes
+  stage: tests
+  script:
+    - poetry install
+    - poetry shell
+    - pytest
+    - coverage run --source=duniterpy setup.py test
+
+publish:
+  stage: publish
+  tags:
+  when: manual
+  script:
+    - poetry install
+    - poetry publish --build --username duniter --password $PYPI_PASSWORD