diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1e533a6554a330e86c757bc80e65f19e3d960c26..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 duniterpy tests examples --ignore-missing-imports
+    - pre-commit run --all-files mypy
 
 .tests:
   extends: .changes