diff --git a/polkadot/.editorconfig b/polkadot/.editorconfig
index f511aad460790b8fdf756eab15a7f2b3def16531..dda39da09e90232714823183d17c918ec70f082c 100644
--- a/polkadot/.editorconfig
+++ b/polkadot/.editorconfig
@@ -14,3 +14,9 @@ indent_style=space
 indent_size=2
 tab_width=8
 end_of_line=lf
+
+[*.sh]
+indent_style=space
+indent_size=2
+tab_width=8
+end_of_line=lf
diff --git a/polkadot/.gitlab-ci.yml b/polkadot/.gitlab-ci.yml
index 11312ad649595b5ddcf3d42c664bd8368566e7ba..1f2ef6ded2a7ff86d38a907aaf45a25ce65e623b 100644
--- a/polkadot/.gitlab-ci.yml
+++ b/polkadot/.gitlab-ci.yml
@@ -99,17 +99,7 @@ test-deterministic-wasm:
   <<:                              *docker-env
   except:
   script:
-    # build runtime
-    - WASM_BUILD_NO_COLOR=1 cargo build --verbose --release -p kusama-runtime -p polkadot-runtime -p westend-runtime
-    # make checksum
-    - sha256sum target/release/wbuild/target/wasm32-unknown-unknown/release/*.wasm > checksum.sha256
-    # clean up – FIXME: can we reuse some of the artifacts?
-    - cargo clean
-    # build again
-    - WASM_BUILD_NO_COLOR=1 cargo build --verbose --release -p kusama-runtime -p polkadot-runtime -p westend-runtime
-    # confirm checksum
-    - sha256sum -c checksum.sha256
-
+    - ./scripts/gitlab/test_deterministic_wasm.sh
 
 test-linux-stable:                 &test
   stage:                           test
@@ -123,7 +113,7 @@ test-linux-stable:                 &test
     RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
     TARGET: native
   script:
-    - time cargo test --all --release --verbose --locked --features runtime-benchmarks
+    - ./scripts/gitlab/test_linux_stable.sh
     - sccache -s
 
 check-web-wasm:                    &test
@@ -134,14 +124,7 @@ check-web-wasm:                    &test
   script:
     # WASM support is in progress. As more and more crates support WASM, we
     # should add entries here. See https://github.com/paritytech/polkadot/issues/625
-    - time cargo build --locked --target=wasm32-unknown-unknown --manifest-path runtime/polkadot/Cargo.toml
-    - time cargo build --locked --target=wasm32-unknown-unknown --manifest-path runtime/kusama/Cargo.toml
-    - time cargo build --locked --target=wasm32-unknown-unknown --manifest-path erasure-coding/Cargo.toml
-    - time cargo build --locked --target=wasm32-unknown-unknown --manifest-path parachain/Cargo.toml
-    - time cargo build --locked --target=wasm32-unknown-unknown --manifest-path primitives/Cargo.toml
-    - time cargo build --locked --target=wasm32-unknown-unknown --manifest-path rpc/Cargo.toml
-    - time cargo build --locked --target=wasm32-unknown-unknown --manifest-path statement-table/Cargo.toml
-    - time cargo build --locked --target=wasm32-unknown-unknown --manifest-path cli/Cargo.toml --no-default-features --features browser
+    - ./scripts/gitlab/check_web_wasm.sh
     - sccache -s
 
 check-runtime-benchmarks:          &test
@@ -151,7 +134,7 @@ check-runtime-benchmarks:          &test
   <<:                              *compiler_info
   script:
     # Check that the node will compile with `runtime-benchmarks` feature flag.
-    - time cargo check --features runtime-benchmarks
+    - ./scripts/gitlab/check_runtime_benchmarks.sh
     - sccache -s
 
 build-wasm-release:
diff --git a/polkadot/scripts/gitlab/check_runtime.sh b/polkadot/scripts/gitlab/check_runtime.sh
index 30fdcd455c1d2c8dc623463dd1f83118083e1d8c..0c635c88246c58076a48fd960216b8967a73aef7 100755
--- a/polkadot/scripts/gitlab/check_runtime.sh
+++ b/polkadot/scripts/gitlab/check_runtime.sh
@@ -34,13 +34,13 @@ boldprint "make sure the master branch is available in shallow clones"
 git fetch --depth="${GIT_DEPTH:-100}" origin master
 
 runtimes=(
-	"kusama"
-	"polkadot"
-	"westend"
+  "kusama"
+  "polkadot"
+  "westend"
 )
 
 common_dirs=(
-	"common"
+  "common"
 )
 
 # Helper function to join elements in an array with a multi-char delimiter
@@ -52,176 +52,178 @@ runtime_regex="^runtime/$(join_by '|^runtime/' "${runtimes[@]}" "${common_dirs[@
 
 boldprint "check if the wasm sources changed since ${LATEST_TAG}"
 if ! git diff --name-only "refs/tags/${LATEST_TAG}...${CI_COMMIT_SHA}" \
-	| grep -E -q -e "$runtime_regex"
+  | grep -E -q -e "$runtime_regex"
 then
-	boldprint "no changes to any runtime source code detected"
-	# continue checking if Cargo.lock was updated with a new substrate reference
-	# and if that change includes a {spec|impl}_version update.
-
-	SUBSTRATE_REFS_CHANGED="$(
-		git diff "refs/tags/${LATEST_TAG}...${CI_COMMIT_SHA}" Cargo.lock \
-		| sed -n -r "s~^[\+\-]source = \"${SUBSTRATE_REPO_CARGO}#([a-f0-9]+)\".*$~\1~p" | sort -u | wc -l
-	)"
-
-	# check Cargo.lock for substrate ref change
-	case "${SUBSTRATE_REFS_CHANGED}" in
-		(0)
-			boldprint "substrate refs not changed in Cargo.lock"
-			exit 0
-			;;
-		(2)
-			boldprint "substrate refs updated since ${LATEST_TAG}"
-			;;
-		(*)
-			boldprint "check unsupported: more than one commit targeted in repo ${SUBSTRATE_REPO_CARGO}"
-			exit 1
-	esac
-
-
-	SUBSTRATE_PREV_REF="$(
-		git diff "refs/tags/${LATEST_TAG}...${CI_COMMIT_SHA}" Cargo.lock \
-		| sed -n -r "s~^\-source = \"${SUBSTRATE_REPO_CARGO}#([a-f0-9]+)\".*$~\1~p" | sort -u | head -n 1
-	)"
-
-	SUBSTRATE_NEW_REF="$(
-		git diff "refs/tags/${LATEST_TAG}...${CI_COMMIT_SHA}" Cargo.lock \
-		| sed -n -r "s~^\+source = \"${SUBSTRATE_REPO_CARGO}#([a-f0-9]+)\".*$~\1~p" | sort -u | head -n 1
-	)"
-
-
-	boldcat <<-EOT
-	previous substrate commit id ${SUBSTRATE_PREV_REF}
-	new substrate commit id      ${SUBSTRATE_NEW_REF}
-	EOT
-
-	# okay so now need to fetch the substrate repository and check whether spec_version or impl_version has changed there
-	SUBSTRATE_CLONE_DIR="$(mktemp -t -d substrate-XXXXXX)"
-	trap 'rm -rf "${SUBSTRATE_CLONE_DIR}"' INT QUIT TERM ABRT EXIT
-
-	git clone --depth="${GIT_DEPTH:-100}" --no-tags \
-		"${SUBSTRATE_REPO}" "${SUBSTRATE_CLONE_DIR}"
-
-	# check if there are changes to the spec|impl versions
-	git -C "${SUBSTRATE_CLONE_DIR}" diff \
-		"${SUBSTRATE_PREV_REF}..${SUBSTRATE_NEW_REF}" "${SUBSTRATE_VERSIONS_FILE}" \
-		| grep -E '^[\+\-][[:space:]]+(spec|impl)_version: +([0-9]+),$' || exit 0
-
-	boldcat <<-EOT
-	spec_version or or impl_version have changed in substrate after updating Cargo.lock
-	please make sure versions are bumped in polkadot accordingly
-	EOT
-
-	# Now check if any of the substrate changes have been tagged D2-breaksapi
-	(
-		cd "${SUBSTRATE_CLONE_DIR}"
-		substrate_changes="$(sanitised_git_logs "${SUBSTRATE_PREV_REF}" "${SUBSTRATE_NEW_REF}")"
-		echo "$substrate_changes" | while read -r line; do
-			pr_id=$(echo "$line" | sed -E 's/.*#([0-9]+)\)$/\1/')
-
-			if has_label 'paritytech/substrate' "$pr_id" 'D2-breaksapi'; then
-				boldprint "Substrate change labelled with D2-breaksapi. Labelling..."
-				github_label "D2-breaksapi"
-				exit 1
-			fi
-		done
-	)
+  boldprint "no changes to any runtime source code detected"
+  # continue checking if Cargo.lock was updated with a new substrate reference
+  # and if that change includes a {spec|impl}_version update.
+
+  SUBSTRATE_REFS_CHANGED="$(
+    git diff "refs/tags/${LATEST_TAG}...${CI_COMMIT_SHA}" Cargo.lock \
+    | sed -n -r "s~^[\+\-]source = \"${SUBSTRATE_REPO_CARGO}#([a-f0-9]+)\".*$~\1~p" | sort -u | wc -l
+  )"
+
+  # check Cargo.lock for substrate ref change
+  case "${SUBSTRATE_REFS_CHANGED}" in
+    (0)
+      boldprint "substrate refs not changed in Cargo.lock"
+      exit 0
+      ;;
+    (2)
+      boldprint "substrate refs updated since ${LATEST_TAG}"
+      ;;
+    (*)
+      boldprint "check unsupported: more than one commit targeted in repo ${SUBSTRATE_REPO_CARGO}"
+      exit 1
+  esac
+
+
+  SUBSTRATE_PREV_REF="$(
+    git diff "refs/tags/${LATEST_TAG}...${CI_COMMIT_SHA}" Cargo.lock \
+    | sed -n -r "s~^\-source = \"${SUBSTRATE_REPO_CARGO}#([a-f0-9]+)\".*$~\1~p" | sort -u | head -n 1
+  )"
+
+  SUBSTRATE_NEW_REF="$(
+    git diff "refs/tags/${LATEST_TAG}...${CI_COMMIT_SHA}" Cargo.lock \
+    | sed -n -r "s~^\+source = \"${SUBSTRATE_REPO_CARGO}#([a-f0-9]+)\".*$~\1~p" | sort -u | head -n 1
+  )"
+
+
+  boldcat <<EOT
+previous substrate commit id ${SUBSTRATE_PREV_REF}
+new substrate commit id      ${SUBSTRATE_NEW_REF}
+EOT
+
+  # okay so now need to fetch the substrate repository and check whether spec_version or impl_version has changed there
+  SUBSTRATE_CLONE_DIR="$(mktemp -t -d substrate-XXXXXX)"
+  trap 'rm -rf "${SUBSTRATE_CLONE_DIR}"' INT QUIT TERM ABRT EXIT
+
+  git clone --depth="${GIT_DEPTH:-100}" --no-tags \
+    "${SUBSTRATE_REPO}" "${SUBSTRATE_CLONE_DIR}"
+
+  # check if there are changes to the spec|impl versions
+  git -C "${SUBSTRATE_CLONE_DIR}" diff \
+    "${SUBSTRATE_PREV_REF}..${SUBSTRATE_NEW_REF}" "${SUBSTRATE_VERSIONS_FILE}" \
+    | grep -E '^[\+\-][[:space:]]+(spec|impl)_version: +([0-9]+),$' || exit 0
+
+  boldcat <<EOT
+spec_version or or impl_version have changed in substrate after updating Cargo.lock
+please make sure versions are bumped in polkadot accordingly
+EOT
+
+  # Now check if any of the substrate changes have been tagged D2-breaksapi
+  (
+    cd "${SUBSTRATE_CLONE_DIR}"
+    substrate_changes="$(sanitised_git_logs "${SUBSTRATE_PREV_REF}" "${SUBSTRATE_NEW_REF}")"
+    echo "$substrate_changes" | while read -r line; do
+      pr_id=$(echo "$line" | sed -E 's/.*#([0-9]+)\)$/\1/')
+
+      if has_label 'paritytech/substrate' "$pr_id" 'D2-breaksapi'; then
+        boldprint "Substrate change labelled with D2-breaksapi. Labelling..."
+        github_label "D2-breaksapi"
+        exit 1
+      fi
+    done
+  )
 
 fi
 
+failed_runtime_checks=()
+
 # Iterate over each runtime defined at the start of the script
 for RUNTIME in "${runtimes[@]}"
 do
 
-	# Check if there were changes to this specific runtime or common directories.
-	# If not, we can skip to the next runtime
-	regex="^runtime/$(join_by '|^runtime/' "$RUNTIME" "${common_dirs[@]}")"
-	if ! git diff --name-only "refs/tags/${LATEST_TAG}...${CI_COMMIT_SHA}" \
-		| grep -E -q -e "$regex"; then
-		continue
-	fi
-
-	# check for spec_version updates: if the spec versions changed, then there is
-	# consensus-critical logic that has changed. the runtime wasm blobs must be
-	# rebuilt.
+  # Check if there were changes to this specific runtime or common directories.
+  # If not, we can skip to the next runtime
+  regex="^runtime/$(join_by '|^runtime/' "$RUNTIME" "${common_dirs[@]}")"
+  if ! git diff --name-only "refs/tags/${LATEST_TAG}...${CI_COMMIT_SHA}" \
+    | grep -E -q -e "$regex"; then
+    continue
+  fi
 
-	add_spec_version="$(
-		git diff "refs/tags/${LATEST_TAG}...${CI_COMMIT_SHA}" "runtime/${RUNTIME}/src/lib.rs" \
-		| sed -n -r "s/^\+[[:space:]]+spec_version: +([0-9]+),$/\1/p"
-	)"
-	sub_spec_version="$(
-		git diff "refs/tags/${LATEST_TAG}...${CI_COMMIT_SHA}" "runtime/${RUNTIME}/src/lib.rs" \
-		| sed -n -r "s/^\-[[:space:]]+spec_version: +([0-9]+),$/\1/p"
-	)"
+  # check for spec_version updates: if the spec versions changed, then there is
+  # consensus-critical logic that has changed. the runtime wasm blobs must be
+  # rebuilt.
 
+  add_spec_version="$(
+    git diff "refs/tags/${LATEST_TAG}...${CI_COMMIT_SHA}" "runtime/${RUNTIME}/src/lib.rs" \
+    | sed -n -r "s/^\+[[:space:]]+spec_version: +([0-9]+),$/\1/p"
+  )"
+  sub_spec_version="$(
+    git diff "refs/tags/${LATEST_TAG}...${CI_COMMIT_SHA}" "runtime/${RUNTIME}/src/lib.rs" \
+    | sed -n -r "s/^\-[[:space:]]+spec_version: +([0-9]+),$/\1/p"
+  )"
 
-	# see if the version and the binary blob changed
-	if [ "${add_spec_version}" != "${sub_spec_version}" ]
-	then
 
-		if git diff --name-only "origin/master...${CI_COMMIT_SHA}" \
-			| grep -E -q -e "$regex"
-		then
-			# add label breaksapi only if this pr altered the runtime sources
-			github_label "D2-breaksapi"
-		fi
+  # see if the version and the binary blob changed
+  if [ "${add_spec_version}" != "${sub_spec_version}" ]
+  then
 
-		boldcat <<-EOT
-			## RUNTIME: ${RUNTIME} ##
+    if git diff --name-only "origin/master...${CI_COMMIT_SHA}" \
+      | grep -E -q -e "$regex"
+    then
+      # add label breaksapi only if this pr altered the runtime sources
+      github_label "D2-breaksapi"
+    fi
 
-			changes to the ${RUNTIME} runtime sources and changes in the spec version.
+    boldcat <<EOT
+## RUNTIME: ${RUNTIME} ##
 
-			spec_version: ${sub_spec_version} -> ${add_spec_version}
+changes to the ${RUNTIME} runtime sources and changes in the spec version.
 
-		EOT
-		continue
+spec_version: ${sub_spec_version} -> ${add_spec_version}
 
-	else
-		# check for impl_version updates: if only the impl versions changed, we assume
-		# there is no consensus-critical logic that has changed.
+EOT
+    continue
 
-		add_impl_version="$(
-			git diff refs/tags/"${LATEST_TAG}...${CI_COMMIT_SHA}" "runtime/${RUNTIME}/src/lib.rs" \
-			| sed -n -r 's/^\+[[:space:]]+impl_version: +([0-9]+),$/\1/p'
-		)"
-		sub_impl_version="$(
-			git diff refs/tags/"${LATEST_TAG}...${CI_COMMIT_SHA}" "runtime/${RUNTIME}/src/lib.rs" \
-			| sed -n -r 's/^\-[[:space:]]+impl_version: +([0-9]+),$/\1/p'
-		)"
+  else
+    # check for impl_version updates: if only the impl versions changed, we assume
+    # there is no consensus-critical logic that has changed.
 
+    add_impl_version="$(
+      git diff refs/tags/"${LATEST_TAG}...${CI_COMMIT_SHA}" "runtime/${RUNTIME}/src/lib.rs" \
+      | sed -n -r 's/^\+[[:space:]]+impl_version: +([0-9]+),$/\1/p'
+    )"
+    sub_impl_version="$(
+      git diff refs/tags/"${LATEST_TAG}...${CI_COMMIT_SHA}" "runtime/${RUNTIME}/src/lib.rs" \
+      | sed -n -r 's/^\-[[:space:]]+impl_version: +([0-9]+),$/\1/p'
+    )"
 
-		# see if the impl version changed
-		if [ "${add_impl_version}" != "${sub_impl_version}" ]
-		then
-			boldcat <<-EOT
 
-			## RUNTIME: ${RUNTIME} ##
+    # see if the impl version changed
+    if [ "${add_impl_version}" != "${sub_impl_version}" ]
+    then
+      boldcat <<EOT
 
-			changes to the ${RUNTIME} runtime sources and changes in the impl version.
+## RUNTIME: ${RUNTIME} ##
 
-			impl_version: ${sub_impl_version} -> ${add_impl_version}
+changes to the ${RUNTIME} runtime sources and changes in the impl version.
 
-			EOT
-			continue
-		fi
+impl_version: ${sub_impl_version} -> ${add_impl_version}
 
+EOT
+      continue
+    fi
 
-		boldcat <<-EOT
-		wasm source files changed or the spec version in the substrate reference in
-		the Cargo.lock but not the spec/impl version. If changes made do not alter
-		logic, just bump 'impl_version'. If they do change logic, bump
-		'spec_version'.
+    failed_runtime_checks+=("$RUNTIME")
+  fi
+done
 
-		source file directories:
-		- runtime
+if [ ${#failed_runtime_checks} -gt 0 ]; then
+  boldcat <<EOT
+wasm source files changed or the spec version in the substrate reference in
+the Cargo.lock but not the spec/impl version. If changes made do not alter
+logic, just bump 'impl_version'. If they do change logic, bump
+'spec_version'.
 
-		versions file: ${RUNTIME}
+source file directories:
+- runtime
 
-		EOT
+version files: ${failed_runtime_checks[@]}
+EOT
 
-		exit 1
-	fi
-done
+  exit 1
+fi
 
 exit 0
-
-# vim: noexpandtab
diff --git a/polkadot/scripts/gitlab/check_runtime_benchmarks.sh b/polkadot/scripts/gitlab/check_runtime_benchmarks.sh
new file mode 100755
index 0000000000000000000000000000000000000000..6714279d5e58e635d27f5bc657a74724df7df89c
--- /dev/null
+++ b/polkadot/scripts/gitlab/check_runtime_benchmarks.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+#shellcheck source=lib.sh
+source "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/lib.sh"
+
+skip_if_companion_pr
+
+time cargo check --features runtime-benchmarks
diff --git a/polkadot/scripts/gitlab/check_web_wasm.sh b/polkadot/scripts/gitlab/check_web_wasm.sh
new file mode 100755
index 0000000000000000000000000000000000000000..056e90d1e37d3f899313fd2615b4927b43f152b1
--- /dev/null
+++ b/polkadot/scripts/gitlab/check_web_wasm.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+#shellcheck source=lib.sh
+source "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/lib.sh"
+
+skip_if_companion_pr
+
+time cargo build --locked --target=wasm32-unknown-unknown --manifest-path runtime/polkadot/Cargo.toml
+time cargo build --locked --target=wasm32-unknown-unknown --manifest-path runtime/kusama/Cargo.toml
+time cargo build --locked --target=wasm32-unknown-unknown --manifest-path erasure-coding/Cargo.toml
+time cargo build --locked --target=wasm32-unknown-unknown --manifest-path parachain/Cargo.toml
+time cargo build --locked --target=wasm32-unknown-unknown --manifest-path primitives/Cargo.toml
+time cargo build --locked --target=wasm32-unknown-unknown --manifest-path rpc/Cargo.toml
+time cargo build --locked --target=wasm32-unknown-unknown --manifest-path statement-table/Cargo.toml
+time cargo build --locked --target=wasm32-unknown-unknown --manifest-path cli/Cargo.toml --no-default-features --features browser
diff --git a/polkadot/scripts/gitlab/lib.sh b/polkadot/scripts/gitlab/lib.sh
index ab2e7c86f6766f9227a909f9db507c0809483f2e..993cab35e3406af7a1f0e49650d1f13b4ea23754 100755
--- a/polkadot/scripts/gitlab/lib.sh
+++ b/polkadot/scripts/gitlab/lib.sh
@@ -96,3 +96,18 @@ curl -XPOST -d "$1" "https://matrix.parity.io/_matrix/client/r0/rooms/$2/send/m.
 # Pretty-printing functions
 boldprint () { printf "|\n| \033[1m%s\033[0m\n|\n" "${@}"; }
 boldcat () { printf "|\n"; while read -r l; do printf "| \033[1m%s\033[0m\n" "${l}"; done; printf "|\n" ; }
+
+skip_if_companion_pr() {
+  url="https://api.github.com/repos/paritytech/polkadot/pulls/${CI_COMMIT_REF_NAME}"
+  echo "[+] API URL: $url"
+
+  pr_title=$(curl -sSL -H "Authorization: token ${GITHUB_PR_TOKEN}" "$url" | jq -r .title)
+  echo "[+] PR title: $pr_title"
+
+  if echo "$pr_title" | grep -qi '^companion'; then
+    echo "[!] PR is a companion PR. Build is already done in substrate"
+    exit 0
+  else
+    echo "[+] PR is not a companion PR. Proceeding test"
+  fi
+}
diff --git a/polkadot/scripts/gitlab/test_deterministic_wasm.sh b/polkadot/scripts/gitlab/test_deterministic_wasm.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f2bf2a4f05f13a6f03d22c8d15d5c8e0e6a9258e
--- /dev/null
+++ b/polkadot/scripts/gitlab/test_deterministic_wasm.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+#shellcheck source=lib.sh
+source "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/lib.sh"
+
+skip_if_companion_pr
+
+# build runtime
+WASM_BUILD_NO_COLOR=1 cargo build --verbose --release -p kusama-runtime -p polkadot-runtime -p westend-runtime
+# make checksum
+sha256sum target/release/wbuild/target/wasm32-unknown-unknown/release/*.wasm > checksum.sha256
+# clean up - FIXME: can we reuse some of the artifacts?
+cargo clean
+# build again
+WASM_BUILD_NO_COLOR=1 cargo build --verbose --release -p kusama-runtime -p polkadot-runtime -p westend-runtime
+# confirm checksum
+sha256sum -c checksum.sha256
diff --git a/polkadot/scripts/gitlab/test_linux_stable.sh b/polkadot/scripts/gitlab/test_linux_stable.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f523e24434ab5b47867b56fb8f2131b7c8aaed5e
--- /dev/null
+++ b/polkadot/scripts/gitlab/test_linux_stable.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+#shellcheck source=lib.sh
+source "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/lib.sh"
+
+skip_if_companion_pr
+
+time cargo test --all --release --verbose --locked --features runtime-benchmarks