diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5b0d9b4e9d6595bc2256a0c1706dbb1258cf6df8..a328d5d1de17b79fa7e8cc29b620033427e599e4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -202,7 +202,15 @@ lint-release-changelogs:
     - mv _build/bindist/ghc*.tar.xz ghc.tar.xz
     - export TOP=$(pwd)
     - cd _build/bindist/ghc-*/ && ./configure --prefix=$TOP/_build/install && make install && cd ../../../
-    - hadrian/build.cabal.sh --flavour=$FLAVOUR -j`mk/detect-cpu-count.sh` --docs=no-sphinx test --summary-junit=./junit.xml --test-compiler=$TOP/_build/install/bin/ghc
+    - |
+      # Prepare to push git notes.
+      METRICS_FILE=$CI_PROJECT_DIR/performance-metrics.tsv
+      git config user.email "ben+ghc-ci@smart-cactus.org"
+      git config user.name "GHC GitLab CI"
+    - hadrian/build.cabal.sh --flavour=$FLAVOUR -j`mk/detect-cpu-count.sh` --docs=no-sphinx test --summary-junit=./junit.xml --test-compiler=$TOP/_build/install/bin/ghc || (METRICS_FILE=$METRICS_FILE .gitlab/push-test-metrics.sh && false)
+    - |
+      # Push git notes.
+      METRICS_FILE=$METRICS_FILE .gitlab/push-test-metrics.sh
   cache:
     key: hadrian
     paths:
@@ -239,7 +247,7 @@ validate-x86_64-linux-deb9-unreg-hadrian:
   stage: full-build
   variables:
     CONFIGURE_ARGS: --enable-unregisterised
-    TEST_ENV: "x86_64-linux-deb9-unreg"
+    TEST_ENV: "x86_64-linux-deb9-unreg-hadrian"
 
 hadrian-ghc-in-ghci:
   <<: *only-default
@@ -790,7 +798,7 @@ nightly-i386-windows-hadrian:
   extends: .build-windows-hadrian
   variables:
     MSYSTEM: MINGW32
-    TEST_ENV: "x86_64-windows-hadrian"
+    TEST_ENV: "i386-windows-hadrian"
   only:
     variables:
       - $NIGHTLY
diff --git a/hadrian/src/Settings/Builders/RunTest.hs b/hadrian/src/Settings/Builders/RunTest.hs
index 6e07d1407afbb8c88d48e898505bb28caaf7eb4e..96df86606e13d8d0c1bb82865cc17e3755c7e36c 100644
--- a/hadrian/src/Settings/Builders/RunTest.hs
+++ b/hadrian/src/Settings/Builders/RunTest.hs
@@ -75,6 +75,8 @@ runTestBuilderArgs = builder RunTest ? do
     (acceptPlatform, acceptOS) <- expr . liftIO $
         (,) <$> (maybe False (=="YES") <$> lookupEnv "PLATFORM")
             <*> (maybe False (=="YES") <$> lookupEnv "OS")
+    (testEnv, testMetricsFile) <- expr . liftIO $
+        (,) <$> lookupEnv "TEST_ENV" <*> lookupEnv "METRICS_FILE"
 
     threads     <- shakeThreads <$> expr getShakeOptions
     os          <- getTestSetting TestHostOS
@@ -138,9 +140,15 @@ runTestBuilderArgs = builder RunTest ? do
             , arg "--config", arg $ "timeout_prog=" ++ show (top -/- timeoutProg)
             , arg "--config", arg $ "stats_files_dir=" ++ statsFilesDir
             , arg $ "--threads=" ++ show threads
+            , emitWhenSet testEnv $ \env -> arg ("--test-env=" ++ show env)
+            , emitWhenSet testMetricsFile $ \file -> mconcat
+                [ arg "--metrics-file", arg (show file) ]
             , getTestArgs -- User-provided arguments from command line.
             ]
 
+      where emitWhenSet Nothing  _ = mempty
+            emitWhenSet (Just v) f = f v
+
 -- | Command line arguments for running GHC's test script.
 getTestArgs :: Args
 getTestArgs = do