diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0f9bf5036e4732c032e72365077ce6c3e0bd71b7..a841165752019858d58105528967500d5fd90a6b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -53,7 +53,7 @@ morph-build-localdev:
       # just needs this tweak.
       echo '{}' > morph/grid/${GRID}/public-keys/users.nix
 
-morph-build-testing:
+morph-build-staging:
   <<: *MORPH_BUILD
   variables:
     GRID: "testing"
@@ -94,6 +94,13 @@ system-tests:
 # Update the staging deployment - only on a commit to the develop branch.
 update-staging:
   <<: *UPDATE_GRID
+
+  # https://docs.gitlab.com/ee/ci/yaml/index.html#needs
+  needs:
+    # Only deploy if the code looks good.
+    - "system-tests"
+    - "morph-build-staging"
+
   # https://docs.gitlab.com/ee/ci/yaml/#rules
   rules:
     # https://docs.gitlab.com/ee/ci/yaml/index.html#rulesif
@@ -116,6 +123,13 @@ update-staging:
 # Update the production deployment - only on a commit to the production branch.
 deploy-to-production:
   <<: *UPDATE_GRID
+
+  # https://docs.gitlab.com/ee/ci/yaml/index.html#needs
+  needs:
+    # Only deploy if the code looks good.
+    - "system-tests"
+    - "morph-build-staging"
+
   # https://docs.gitlab.com/ee/ci/yaml/#rules
   rules:
     # https://docs.gitlab.com/ee/ci/yaml/index.html#rulesif