diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f1d31334983a9be26e169591d418fb2668fe7602..25f0d49b20447f968f6a225432dfdcf8967df575 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -33,30 +33,45 @@ build:
   script:
     - poetry build
 
+.pre-commit:
+  variables:
+    PRE_COMMIT_HOME: ${CI_PROJECT_DIR}/.cache/pre-commit
+  cache:
+    paths:
+      - ${PRE_COMMIT_HOME}
+
 format:
-  extends: .code_changes
+  extends:
+    - .code_changes
+    - .pre-commit
   stage: checks
   script:
-    - black --check duniterpy tests examples
+    - pre-commit run --all-files black
 
 isort:
-  extends: .code_changes
+  extends:
+    - .code_changes
+    - .pre-commit
   stage: checks
   script:
-    - isort --check duniterpy tests examples
+    - pre-commit run --all-files isort
 
 lint:
-  extends: .code_changes
+  extends:
+    - .code_changes
+    - .pre-commit
   stage: checks
   tags: [redshift]
   script:
-    - pylint duniterpy tests examples
+    - pre-commit run --all-files pylint
 
 type:
-  extends: .code_changes
+  extends:
+    - .code_changes
+    - .pre-commit
   stage: checks
   script:
-    - mypy --install-types --non-interactive duniterpy tests examples
+    - pre-commit run --all-files mypy
 
 .tests:
   extends: .changes