diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2e4b04ffb7784661bf03475c92e232c4a5d842b0..b2cc65c9f8a5c5845e7982bcdd7016e413687624 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -127,20 +127,26 @@ build_release_tag:
     IMAGE_TAG: "$CI_COMMIT_TAG"
     PODMAN_BUILD_OPTIONS: "--platform linux/amd64"
 
-test_debug:
+tests:
   stage: tests
-  extends: .docker_build
+  image: rust:1-bullseye
   rules:
     - if: $CI_COMMIT_REF_NAME =~ /^wip*$/
       when: manual
     - if: $CI_COMMIT_TAG
       when: never
     - if: '$CI_MERGE_REQUEST_ID || $CI_COMMIT_BRANCH == "master"'
-    - when: manual
+      when: manual
+    - when: always
   variables:
-    IMAGE_NAME: "duniter/duniter-v2s-test"
-    IMAGE_TAG: "debug-sha-$CI_COMMIT_SHORT_SHA"
-    PODMAN_BUILD_OPTIONS: "--target build --build-arg debug=1 --build-arg cucumber=1"
+    DEBIAN_FRONTEND: noninteractive
+  script:
+    - apt-get update
+    - apt-get install -y clang cmake protobuf-compiler
+    # cargo build is required for cucumber tests anyway
+    - cargo build
+    - cargo tu
+    - cargo cucumber
 
 test_release:
   stage: tests
diff --git a/end2end-tests/tests/cucumber_tests.rs b/end2end-tests/tests/cucumber_tests.rs
index 80a1772ac1ad1c1b5be78707b590a993721047bc..06b8acba6d98017ac74d93dd33e74f29f2951371 100644
--- a/end2end-tests/tests/cucumber_tests.rs
+++ b/end2end-tests/tests/cucumber_tests.rs
@@ -18,7 +18,7 @@ mod common;
 
 use async_trait::async_trait;
 use common::*;
-use cucumber::{given, then, when, World, WorldInit};
+use cucumber::{given, then, when, FailureWriter, World, WorldInit};
 use sp_keyring::AccountKeyring;
 use std::convert::Infallible;
 use std::path::PathBuf;
@@ -636,7 +636,7 @@ async fn main() {
     })
     .expect("Error setting Ctrl-C handler");
 
-    DuniterWorld::cucumber()
+    let summarize = DuniterWorld::cucumber()
         //.fail_on_skipped()
         .max_concurrent_scenarios(4)
         .before(|feature, _rule, scenario, world| {
@@ -660,8 +660,12 @@ async fn main() {
             Box::pin(std::future::ready(()))
         })
         .with_cli(opts)
-        .run_and_exit(features_path)
+        .run(features_path)
         .await;
+
+    if summarize.hook_errors() > 0 {
+        panic!("Could not run tests correctly (hook errors)");
+    }
 }
 
 fn genesis_conf_name(feature_tags: &[String], scenario_tags: &[String]) -> String {