diff --git a/polkadot/.gitlab-ci.yml b/polkadot/.gitlab-ci.yml
index 22233203ea4907745dc5722f64a88fa1a806a40b..082efc61c9f387af9416a9e589b275084571fde3 100644
--- a/polkadot/.gitlab-ci.yml
+++ b/polkadot/.gitlab-ci.yml
@@ -109,23 +109,39 @@ test-deterministic-wasm:
   script:
     - ./scripts/gitlab/test_deterministic_wasm.sh
 
-test-linux-stable:
+test-build-linux-stable:
   stage:                           test
-  <<:                              *rules-test
   <<:                              *docker-env
   <<:                              *compiler-info
+  <<:                              *collect-artifacts
   variables:
     RUST_TOOLCHAIN: stable
     # Enable debug assertions since we are running optimized builds for testing
     # but still want to have debug assertions.
     RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
-    TARGET: native
-  artifacts:
-    paths:
-      - ./target/release/polkadot
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "schedule"
+    - if: $CI_COMMIT_REF_NAME == "master"
+    - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/              # i.e. v1.0, v2.1rc1
+    - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/                         # PRs
+    - if: $CI_COMMIT_REF_NAME == "rococo-v1"
   script:
     - ./scripts/gitlab/test_linux_stable.sh
+    # we're using the bin built here, instead of having a parallel `build-linux-release`
+    - time cargo build --release --verbose --bin polkadot
     - sccache -s
+    # pack-artifacts
+    - mkdir -p ./artifacts
+    - VERSION="${CI_COMMIT_REF_NAME}" # will be tag or branch name
+    - mv ./target/release/polkadot ./artifacts/.
+    - sha256sum ./artifacts/polkadot | tee ./artifacts/polkadot.sha256
+    - EXTRATAG="$(./artifacts/polkadot --version |
+        sed -n -r 's/^polkadot ([0-9.]+.*-[0-9a-f]{7,13})-.*$/\1/p')"
+    - EXTRATAG="${CI_COMMIT_REF_NAME}-${EXTRATAG}-$(cut -c 1-8 ./artifacts/polkadot.sha256)"
+    - echo "Polkadot version = ${VERSION} (EXTRATAG = ${EXTRATAG})"
+    - echo -n ${VERSION} > ./artifacts/VERSION
+    - echo -n ${EXTRATAG} > ./artifacts/EXTRATAG
+    - cp -r scripts/docker/* ./artifacts
 
 check-web-wasm:
   stage:                           test
@@ -148,43 +164,6 @@ check-runtime-benchmarks:
     - ./scripts/gitlab/check_runtime_benchmarks.sh
     - sccache -s
 
-.pack-artifacts:                   &pack-artifacts
-  - mkdir -p ./artifacts
-  - VERSION="${CI_COMMIT_REF_NAME}" # will be tag or branch name
-  - mv ./target/release/polkadot ./artifacts/.
-  - sha256sum ./artifacts/polkadot | tee ./artifacts/polkadot.sha256
-  - if [ "${CI_COMMIT_TAG}" ]; then
-      EXTRATAG="latest";
-    else
-      EXTRATAG="$(./artifacts/polkadot --version |
-        sed -n -r 's/^polkadot ([0-9.]+.*-[0-9a-f]{7,13})-.*$/\1/p')";
-      EXTRATAG="${CI_COMMIT_REF_NAME}-${EXTRATAG}-$(cut -c 1-8 ./artifacts/polkadot.sha256)";
-    fi
-  - echo "Polkadot version = ${VERSION} (EXTRATAG = ${EXTRATAG})"
-  - echo -n ${VERSION} > ./artifacts/VERSION
-  - echo -n ${EXTRATAG} > ./artifacts/EXTRATAG
-  - cp -r scripts/docker/* ./artifacts
-
-build-linux-release:
-  stage:                           test
-  <<:                              *collect-artifacts
-  <<:                              *docker-env
-  <<:                              *compiler-info
-  rules:
-    - if: $CI_PIPELINE_SOURCE == "schedule"
-    - if: $CI_COMMIT_REF_NAME == "master"
-    - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/              # i.e. v1.0, v2.1rc1
-    - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/                         # PRs
-      variables:
-        RUSTFLAGS:                     "-Cdebug-assertions=y"
-    - if: $CI_COMMIT_REF_NAME == "rococo-v1"
-      variables:
-        RUSTFLAGS:                     "-Cdebug-assertions=y"
-  script:
-    - time cargo build --release --verbose
-    - sccache -s
-    - *pack-artifacts
-
 build-adder-collator:
   stage:                           test
   <<:                              *collect-artifacts
@@ -213,7 +192,7 @@ check-transaction-versions:
   <<:                              *rules-test
   <<:                              *docker-env
   needs:
-    - job:                         test-linux-stable
+    - job:                         test-build-linux-stable
       artifacts:                   true
   before_script:
     - apt-get -y update; apt-get -y install jq lsof
@@ -235,19 +214,16 @@ generate-impl-guide:
 .build-push-image:                 &build-push-image
   <<:                              *kubernetes-env
   image:                           quay.io/buildah/stable
-  variables:
+  variables:                       &image-variables
     GIT_STRATEGY:                  none
-    # scripts/docker/Dockerfile
-    DOCKERFILE:                    Dockerfile
-    IMAGE_NAME:                    docker.io/parity/polkadot
-    DOCKER_USER:                   ${Docker_Hub_User_Parity}
-    DOCKER_PASS:                   ${Docker_Hub_Pass_Parity}
+    DOCKER_USER:                   ${PARITYPR_USER}
+    DOCKER_PASS:                   ${PARITYPR_PASS}
   before_script:                   &check-versions
     - test -s ./artifacts/VERSION || exit 1
     - test -s ./artifacts/EXTRATAG || exit 1
     - VERSION="$(cat ./artifacts/VERSION)"
     - EXTRATAG="$(cat ./artifacts/EXTRATAG)"
-    - echo "Polkadot version = ${VERSION} (EXTRATAG ${EXTRATAG})"
+    - echo "Polkadot version = ${VERSION} (EXTRATAG = ${EXTRATAG})"
   script:
     - test "$DOCKER_USER" -a "$DOCKER_PASS" ||
         ( echo "no docker credentials provided"; exit 1 )
@@ -280,6 +256,11 @@ generate-impl-guide:
 publish-polkadot-image:
   stage:                           build
   <<:                              *build-push-image
+  variables:
+    <<:                            *image-variables
+    # scripts/docker/Dockerfile
+    DOCKERFILE:                    Dockerfile
+    IMAGE_NAME:                    docker.io/paritypr/synth-wave
   rules:
   # Don't run on releases - this is handled by the Github Action here:
   # .github/workflows/publish-docker-release.yml
@@ -288,15 +269,14 @@ publish-polkadot-image:
     - if: $CI_PIPELINE_SOURCE == "schedule"
     - if: $CI_COMMIT_REF_NAME == "master"
     - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/                         # PRs
-      variables:
-        IMAGE_NAME:                    docker.io/paritypr/synth-wave
-        DOCKER_USER:                   ${PARITYPR_USER}
-        DOCKER_PASS:                   ${PARITYPR_PASS}
     - if: $CI_COMMIT_REF_NAME == "rococo-v1"
       variables:
+        <<:                        *image-variables
         IMAGE_NAME:                docker.io/parity/rococo
+        DOCKER_USER:               ${Docker_Hub_User_Parity}
+        DOCKER_PASS:               ${Docker_Hub_Pass_Parity}
   needs:
-    - job:                         build-linux-release
+    - job:                         test-build-linux-stable
       artifacts:                   true
 
 publish-adder-collator-image:
@@ -304,15 +284,13 @@ publish-adder-collator-image:
   stage:                           build
   <<:                              *build-push-image
   variables:
+    <<:                            *image-variables
     # scripts/docker/collator.Dockerfile
     DOCKERFILE:                    collator.Dockerfile
     IMAGE_NAME:                    docker.io/paritypr/colander
-    DOCKER_USER:                   ${PARITYPR_USER}
-    DOCKER_PASS:                   ${PARITYPR_PASS}
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
     - if: $CI_COMMIT_REF_NAME == "master"
-    # FIXME: remove me after merging
     - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/                         # PRs
   needs:
     - job:                         build-adder-collator
@@ -332,51 +310,41 @@ publish-adder-collator-image:
 publish-s3-release:                &publish-s3
   stage:                           publish
   needs:
-    - job:                         build-linux-release
+    - job:                         test-build-linux-stable
       artifacts:                   true
   <<:                              *kubernetes-env
   image:                           paritytech/awscli:latest
   variables:
     GIT_STRATEGY:                  none
-    BUCKET:                        "releases.parity.io"
-    PREFIX:                        "polkadot/${ARCH}-${DOCKER_OS}"
+    PREFIX:                        "builds/polkadot/${ARCH}-${DOCKER_OS}"
   rules:
+    # publishing binaries nightly
     - if: $CI_PIPELINE_SOURCE == "schedule"
-    - if: $CI_COMMIT_REF_NAME == "master"
-    - if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/              # i.e. v1.0, v2.1rc1
   before_script:
     - *check-versions
   script:
-    - echo "uploading objects to https://${BUCKET}/${PREFIX}/${VERSION}"
-    - aws s3 sync ./artifacts/ s3://${BUCKET}/${PREFIX}/${VERSION}/
-    - echo "update objects at https://${BUCKET}/${PREFIX}/${EXTRATAG}"
+    - echo "uploading objects to https://releases.parity.io/${PREFIX}/${VERSION}"
+    - aws s3 sync --acl public-read ./artifacts/ s3://${AWS_BUCKET}/${PREFIX}/${VERSION}/
+    - echo "update objects at https://releases.parity.io/${PREFIX}/${EXTRATAG}"
     - find ./artifacts -type f | while read file; do
-      name="${file#./artifacts/}";
-      aws s3api copy-object
-        --copy-source ${BUCKET}/${PREFIX}/${VERSION}/${name}
-        --bucket ${BUCKET} --key ${PREFIX}/${EXTRATAG}/${name};
+        name="${file#./artifacts/}";
+        aws s3api copy-object
+          --copy-source ${AWS_BUCKET}/${PREFIX}/${VERSION}/${name}
+          --bucket ${AWS_BUCKET} --key ${PREFIX}/${EXTRATAG}/${name};
       done
     - |
       cat <<-EOM
       |
       |  polkadot binary paths:
       |
-      |  - https://${BUCKET}/${PREFIX}/${EXTRATAG}/polkadot
-      |  - https://${BUCKET}/${PREFIX}/${VERSION}/polkadot
+      |  - https://releases.parity.io/${PREFIX}/${EXTRATAG}/polkadot
+      |  - https://releases.parity.io/${PREFIX}/${VERSION}/polkadot
       |
       EOM
   after_script:
-    - aws s3 ls s3://${BUCKET}/${PREFIX}/${EXTRATAG}/
+    - aws s3 ls s3://${AWS_BUCKET}/${PREFIX}/${EXTRATAG}/
         --recursive --human-readable --summarize
 
-publish-s3-adder-collator:
-  <<:                              *publish-s3
-  variables:
-    PREFIX:                        "rococo/${ARCH}-${DOCKER_OS}"
-  needs:
-    - job:                         build-adder-collator
-      artifacts:                   true
-
 #### stage:                        deploy
 
 deploy-polkasync-kusama:
@@ -404,7 +372,7 @@ trigger-simnet:
   needs:
     - job:                         publish-polkadot-image
     - job:                         publish-adder-collator-image
-  # `build.env` brings here `$IMAGE_NAME` and `$IMAGE_TAG` (`$EXTRATAG` here, 
+  # `build.env` brings here `$IMAGE_NAME` and `$IMAGE_TAG` (`$EXTRATAG` here,
   # i.e. `2643-0.8.29-5f689e0a-6b24dc54`).
   # `collator.env` bears adder-collator unique build tag. In non-triggered builds it
   # can be called by `master` tag.
diff --git a/polkadot/scripts/gitlab/test_linux_stable.sh b/polkadot/scripts/gitlab/test_linux_stable.sh
index 82467e28739d87c26cdbe85a317d116887c17bf5..8ba62ecbbb8087d4d2b5aa279292fe18866819bd 100755
--- a/polkadot/scripts/gitlab/test_linux_stable.sh
+++ b/polkadot/scripts/gitlab/test_linux_stable.sh
@@ -4,4 +4,4 @@ set -e
 #shellcheck source=../common/lib.sh
 source "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/../common/lib.sh"
 
-time cargo test --all --release --verbose --locked --features=runtime-benchmarks
+time cargo test --workspace --release --verbose --locked --features=runtime-benchmarks
diff --git a/polkadot/scripts/gitlab/trigger_pipeline.sh b/polkadot/scripts/gitlab/trigger_pipeline.sh
index 63ffa71f525598607b4aa556d5260bd960bed349..1b5e1208d3561136b4d846f557c5fe61306c21fe 100755
--- a/polkadot/scripts/gitlab/trigger_pipeline.sh
+++ b/polkadot/scripts/gitlab/trigger_pipeline.sh
@@ -1,7 +1,10 @@
 #!/bin/bash
 
 set -eu
+
 # API trigger another project's pipeline
+echo "Triggering Simnet pipeline."
+
 curl --silent \
     -X POST \
     -F "token=${CI_JOB_TOKEN}" \
@@ -12,13 +15,14 @@ curl --silent \
     -F "variables[IMAGE_TAG]=${IMAGE_TAG}" \
     -F "variables[COLLATOR_IMAGE_TAG]=${COLLATOR_IMAGE_TAG}" \
     "https://${CI_SERVER_HOST}/api/v4/projects/${DWNSTRM_ID}/trigger/pipeline" | \
-        tee pipeline
+        tee pipeline;
 
 PIPELINE_ID=$(cat pipeline | jq ".id")
-echo "\nWaiting on ${PIPELINE_ID} status..."
+PIPELINE_URL=$(cat pipeline | jq ".web_url")
+echo
+echo "Simnet pipeline ${PIPELINE_URL} was successfully triggered."
+echo "Now we're polling it to obtain the distinguished status."
 
-# This part polls for the triggered pipeline status, the native
-# `trigger` job does not return this status via API.
 # This is a workaround for a Gitlab bug, waits here until
 # https://gitlab.com/gitlab-org/gitlab/-/issues/326137 gets fixed.
 # The timeout is 360 curls with 8 sec interval, roughly an hour.
@@ -30,17 +34,19 @@ function get_status() {
             jq --raw-output ".status";
 }
 
+echo "Waiting on ${PIPELINE_ID} status..."
+
 for i in $(seq 1 360); do
     STATUS=$(get_status);
     echo "Triggered pipeline status is ${STATUS}";
     if [[ ${STATUS} =~ ^(pending|running|created)$ ]]; then
-        echo "Busy...";
+        echo;
     elif [[ ${STATUS} =~ ^(failed|canceled|skipped|manual)$ ]]; then
-        exit 1;
+        echo "Something's broken in: ${PIPELINE_URL}"; exit 1;
     elif [[ ${STATUS} =~ ^(success)$ ]]; then
-        exit 0;
+        echo "Look how green it is: ${PIPELINE_URL}"; exit 0;
     else
-        exit 1;
+        echo "Something else has happened in ${PIPELINE_URL}"; exit 1;
     fi
 sleep 8;
 done