diff --git a/.github/pr-custom-review.yml b/.github/pr-custom-review.yml
index d37ea4cf0958e60cf4701f897af7581cae54b9f5..0d691e7aa2f8c446dc0957a9186ea3d2e33ac2fa 100644
--- a/.github/pr-custom-review.yml
+++ b/.github/pr-custom-review.yml
@@ -19,7 +19,7 @@ rules:
     condition:
       include: .*
       # excluding files from 'Runtime files' and 'CI files' rules
-      exclude: ^polkadot/runtime/(kusama|polkadot)/src/[^/]+\.rs$|^cumulus/parachains/runtimes/assets/(asset-hub-kusama|asset-hub-polkadot)/src/[^/]+\.rs$|^cumulus/parachains/runtimes/bridge-hubs/(bridge-hub-kusama|bridge-hub-polkadot)/src/[^/]+\.rs$|^cumulus/parachains/runtimes/collectives/collectives-polkadot/src/[^/]+\.rs$|^cumulus/parachains/common/src/[^/]+\.rs$|^substrate/frame/(?!.*(nfts/.*|uniques/.*|babe/.*|grandpa/.*|beefy|merkle-mountain-range/.*|contracts/.*|election|nomination-pools/.*|staking/.*|aura/.*))|^polkadot/runtime/(kusama|polkadot)/src/[^/]+\.rs$|^\.gitlab-ci\.yml|^(?!.*\.dic$|.*spellcheck\.toml$)scripts/ci/.*|^\.github/.*
+      exclude: ^polkadot/runtime/(kusama|polkadot)/src/[^/]+\.rs$|^cumulus/parachains/runtimes/assets/(asset-hub-kusama|asset-hub-polkadot)/src/[^/]+\.rs$|^cumulus/parachains/runtimes/bridge-hubs/(bridge-hub-kusama|bridge-hub-polkadot)/src/[^/]+\.rs$|^cumulus/parachains/runtimes/collectives/collectives-polkadot/src/[^/]+\.rs$|^cumulus/parachains/common/src/[^/]+\.rs$|^substrate/frame/(?!.*(nfts/.*|uniques/.*|babe/.*|grandpa/.*|beefy|merkle-mountain-range/.*|contracts/.*|election|nomination-pools/.*|staking/.*|aura/.*))|^polkadot/runtime/(kusama|polkadot)/src/[^/]+\.rs$|^\.github/.*
     min_approvals: 2
     teams:
       - core-devs
diff --git a/.gitlab/pipeline/test.yml b/.gitlab/pipeline/test.yml
index d128cb0990210f0f1b4fb90fc67fc7d83be2209f..cbb5a023272f75e0c44e07ebdd7f47af0f30cb7c 100644
--- a/.gitlab/pipeline/test.yml
+++ b/.gitlab/pipeline/test.yml
@@ -36,9 +36,23 @@ test-linux-stable:
         --no-fail-fast \
         --features try-runtime,experimental \
         --partition count:${CI_NODE_INDEX}/${CI_NODE_TOTAL}
+    # Upload tests results to Elasticsearch
+    - echo "Upload test results to Elasticsearch"
+    - cat target/nextest/default/junit.xml | xq . > target/nextest/default/junit.json
+    - |
+      curl -v -XPOST --http1.1 \
+      -u ${ELASTIC_USERNAME}:${ELASTIC_PASSWORD} \
+      https://elasticsearch.parity-build.parity.io/unit-tests/_doc/${CI_JOB_ID} \
+      -H 'Content-Type: application/json' \
+      -d @target/nextest/default/junit.json || echo "failed to upload junit report"
     # run runtime-api tests with `enable-staging-api` feature on the 1st node
     - if [ ${CI_NODE_INDEX} == 1 ]; then time cargo nextest run -p sp-api-test --features enable-staging-api; fi
-    # todo: add flacky-test collector
+  artifacts:
+    when: always
+    paths:
+      - target/nextest/default/junit.xml
+    reports:
+      junit: target/nextest/default/junit.xml
 
 test-linux-oldkernel-stable:
   extends: test-linux-stable