diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 63c769528ff16c6eb1ca01a5dc36b97cac65c914..a353b1f2457cf1e1b29c0b276c8887ec27a07338 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -16,19 +16,9 @@ build_pkg:bullseye:amd64:
 
 test:
   stage: test
-  image: golang:1.15
-  before_script:
-    # Install tooling dependencies.
-    - (cd /tmp && go get github.com/boumenot/gocover-cobertura)
-    - (cd /tmp && go get github.com/jstemmer/go-junit-report)
+  image: registry.git.autistici.org/ai3/docker/test/golang:master
   script:
-    # The following monstruosity is required to generate a single coverage
-    # result statement for the entire package, but without generating build
-    # errors due to multiple definition of flags in cmd/ tools.
-    # See also https://github.com/golang/go/issues/27333
-    - go test -v -cover -coverpkg=$(go list ./... | grep -v /cmd/) -coverprofile=cover.out ./... 2>&1 | go-junit-report -set-exit-code > report.xml
-    # Convert coverage output to XML for Gitlab integration.
-    - gocover-cobertura < cover.out > cover.xml
+    - run-go-test ./...
   artifacts:
     when: always
     reports: