diff --git a/debian/gitlab-ci.yml b/debian/gitlab-ci.yml
index 73297ea98d8cfe74e7a387f0a0f7ef84a6885a96..0b17fb8180b1cf5fdb1a23f55604326a25126c76 100644
--- a/debian/gitlab-ci.yml
+++ b/debian/gitlab-ci.yml
@@ -2,12 +2,9 @@ include:
     - project: 'steam/steam-ci-pipeline'
       file: '/steam-gitlab-ci-common.yml'
 
-    - project: 'steam/steam-ci-pipeline'
-      file: '/steam-gitlab-ci-pipeline.yml'
-
 variables:
     BUILD_IMAGE: registry.gitlab.steamos.cloud/steamrt/scout/sdk:beta
-    STEAM_CI_USE_BINARIES_FROM: autopkgtest
+    STEAM_CI_USE_BINARIES_FROM: build
     STEAM_CI_DEPENDENCIES: >-
         debhelper
         glslang-tools
@@ -40,6 +37,7 @@ variables:
 
     SCOUT_DOCKER_REGISTRY: registry.gitlab.steamos.cloud
     SCOUT_DOCKER_IMAGE: steamrt/scout/sdk:beta
+    SCOUT_I386_DOCKER_IMAGE: steamrt/scout/sdk/i386:beta
     SCOUT_APT_SOURCES_FILE: ''
     DEVEL_DOCKER_REGISTRY: ''
     DEVEL_DOCKER_IMAGE: ''
@@ -54,8 +52,24 @@ variables:
 
 stages:
     - build
+    - relocatable-install
     - test
 
+package:
+    extends: .build_package
+    variables:
+        STEAM_CI_DEB_BUILD: full    # debuild --build=full, aka -F
+        STEAM_CI_INSTALL_SCRIPT: |
+            apt-get -y install libcapsule-tools pkg-create-dbgsym
+
+package:i386:
+    extends: .build_package
+    variables:
+        BUILD_IMAGE: registry.gitlab.steamos.cloud/steamrt/scout/sdk/i386:beta
+        STEAM_CI_DEB_BUILD: any     # debuild --build=any, aka -B
+        STEAM_CI_INSTALL_SCRIPT: |
+            apt-get -y install libcapsule-tools pkg-create-dbgsym
+
 build:devel:
     stage: build
     tags:
@@ -99,6 +113,45 @@ build:devel:
         paths:
             - _build/devel/meson-logs/*.txt
             - _build/clang-asan/meson-logs/*.txt
+        when: always
+
+.prepare_scout: &prepare_scout
+    - |
+        set -eux
+
+        if [ -n "${SCOUT_APT_SOURCES_FILE}" ]; then
+            cp "${SCOUT_APT_SOURCES_FILE}" /etc/apt/sources.list
+            echo >> /etc/apt/sources.list
+
+            if [ -n "${STEAM_CI_EXTRA_APT_SOURCES-}" ]; then
+              echo "${STEAM_CI_EXTRA_APT_SOURCES}" | while read -r first rest; do
+                if [ "x$first" = xboth ]; then
+                  echo "deb $rest" >> /etc/apt/sources.list
+                  echo "deb-src $rest" >> /etc/apt/sources.list
+                else
+                  echo "$first $rest" >> /etc/apt/sources.list
+                fi
+              done
+            fi
+
+            apt-get -y update
+        fi
+
+        # We need up-to-date packages for the relocatable install to
+        # be able to get its source code
+        apt-get -y dist-upgrade
+
+        apt-get -y --no-install-recommends install \
+        libcapsule-tools \
+        ${NULL+}
+
+        # g++ 4.6 is too old (see also debian/rules)
+        export CXX=g++-4.8
+
+        mkdir -p -m700 "${STEAM_CI_TMPDIR}"
+        export TMPDIR="${STEAM_CI_TMPDIR}"
+
+        mkdir -p _build/scout
 
 build:scout:
     stage: build
@@ -107,65 +160,69 @@ build:scout:
         - linux
     image: "${SCOUT_DOCKER_REGISTRY}/${SCOUT_DOCKER_IMAGE}"
     script:
+        - *prepare_scout
         - |
-            set -eux
-
-            if [ -n "${SCOUT_APT_SOURCES_FILE}" ]; then
-                cp "${SCOUT_APT_SOURCES_FILE}" /etc/apt/sources.list
-                echo >> /etc/apt/sources.list
-
-                if [ -n "${STEAM_CI_EXTRA_APT_SOURCES-}" ]; then
-                  echo "${STEAM_CI_EXTRA_APT_SOURCES}" | while read -r first rest; do
-                    if [ "x$first" = xboth ]; then
-                      echo "deb $rest" >> /etc/apt/sources.list
-                      echo "deb-src $rest" >> /etc/apt/sources.list
-                    else
-                      echo "$first $rest" >> /etc/apt/sources.list
-                    fi
-                  done
-                fi
-
-                apt-get -y update
-            fi
-
-            # We need up-to-date packages for the relocatable install to
-            # be able to get its source code
-            apt-get -y dist-upgrade
-
-            apt-get -y --no-install-recommends install \
-            bubblewrap \
-            libcapsule0 \
-            libcapsule-tools-relocatable:amd64 \
-            libcapsule-tools-relocatable:i386 \
-            libglib2.0-dev \
-            libxau-dev \
             meson \
-            ${NULL+}
-
-            # g++ 4.6 is too old (see also debian/rules)
-            export CXX=g++-4.8
-
-            mkdir -p -m700 "${STEAM_CI_TMPDIR}"
-            export TMPDIR="${STEAM_CI_TMPDIR}"
+              --prefix="$(pwd)/_build/scout/prefix" \
+              -Dsrcdir=src \
+              --werror \
+              _build/scout
+            ninja -C _build/scout
+            G_MESSAGES_DEBUG=all meson test --verbose -C _build/scout
+            ninja -C _build/scout install
+    artifacts:
+        paths:
+            - _build/scout/prefix
+            - _build/scout/meson-logs/*.txt
+        when: always
 
-            mkdir -p _build
+build:scout-i386:
+    stage: build
+    tags:
+        - docker
+        - linux
+    image: "${SCOUT_DOCKER_REGISTRY}/${SCOUT_I386_DOCKER_IMAGE}"
+    script:
+        - *prepare_scout
+        - |
             meson \
               --prefix="$(pwd)/_build/scout/prefix" \
               -Dsrcdir=src \
+              -Dbin=false \
+              -Dpressure_vessel=false \
               --werror \
               _build/scout-i386
             ninja -C _build/scout-i386
             G_MESSAGES_DEBUG=all meson test --verbose -C _build/scout-i386
             ninja -C _build/scout-i386 install
+    artifacts:
+        paths:
+            - _build/scout/prefix
+            - _build/scout-i386/meson-logs/*.txt
+        when: always
 
+relocatable-install:
+    stage: relocatable-install
+    needs:
+        - build:scout
+        - build:scout-i386
+    tags:
+        - docker
+        - linux
+    image: "${SCOUT_DOCKER_REGISTRY}/${SCOUT_DOCKER_IMAGE}"
+    script:
+        - *prepare_scout
+        - |
+            apt-get -y --no-install-recommends install \
+            bubblewrap \
+            libcapsule0 \
+            libcapsule-tools \
+            libcapsule-tools-relocatable:amd64 \
+            libcapsule-tools-relocatable:i386 \
+            libglib2.0-dev \
+            libxau-dev \
             meson \
-              --prefix="$(pwd)/_build/scout/prefix" \
-              -Dsrcdir=src \
-              --werror \
-              _build/scout
-            ninja -C _build/scout
-            G_MESSAGES_DEBUG=all meson test --verbose -C _build/scout
-            ninja -C _build/scout install
+            ${NULL+}
 
             rm -fr _build/scout/relocatable-install
             _build/scout/prefix/lib/pressure-vessel/relocatable/bin/pressure-vessel-build-relocatable-install \
@@ -173,14 +230,13 @@ build:scout:
               --archive "$(pwd)/_build/scout" \
               ${CI_ALLOW_MISSING_SOURCES:+--allow-missing-sources} \
               ${NULL+}
-            prove -epython3.5 -v ./tests/relocatable-install.py :: \
+            prove -epython3.5 -v ./tests/pressure-vessel/relocatable-install.py :: \
               "$(pwd)/_build/scout/relocatable-install"
-
     artifacts:
         paths:
             - _build/scout/pressure-vessel-*-bin.tar.gz
             - _build/scout/pressure-vessel-*-bin+src.tar.gz
-            - _build/scout/meson-logs/*.txt
+        when: on_success
 
 .prepare_test: &prepare_test
     - |
@@ -189,7 +245,7 @@ build:scout:
         PRESSURE_VESSEL=$(ls _build/scout/pressure-vessel-*-bin.tar.gz | head -1)
 
         if [ -n "${IMAGES_DOWNLOAD_URL}" ] && [ -n "${IMAGES_DOWNLOAD_CREDENTIAL}" ]; then
-            python3 populate-depot.py \
+            python3 ./pressure-vessel/populate-depot.py \
             --depot=_build/depot \
             --include-sdk \
             --unpack-runtimes \
@@ -200,7 +256,7 @@ build:scout:
             soldier \
             ${NULL+}
         else
-            python3 populate-depot.py \
+            python3 ./pressure-vessel/populate-depot.py \
             --depot=_build/depot \
             --include-sdk \
             --unpack-runtimes \
@@ -223,7 +279,7 @@ build:scout:
 
 .test_template:
     needs:
-        - "build:scout"
+        - relocatable-install
     stage: test
     tags:
         - docker
@@ -233,6 +289,10 @@ build:scout:
             libgl1-mesa-dri
             locales
             python3
+    artifacts:
+        paths:
+            - _build/artifacts
+        when: always
 
 test:debian-10:
     extends: .test_template
@@ -245,11 +305,7 @@ test:debian-10:
 
             export AUTOPKGTEST_ARTIFACTS="$(pwd)/_build/artifacts"
             export PRESSURE_VESSEL_TEST_CONTAINERS="$(pwd)/_build/depot"
-            python3 tests/containers.py
-
-    artifacts:
-        paths:
-            - _build/artifacts
+            python3 tests/pressure-vessel/containers.py
 
 test:ubuntu-18.04:
     extends: .test_template
@@ -262,11 +318,7 @@ test:ubuntu-18.04:
 
             export AUTOPKGTEST_ARTIFACTS="$(pwd)/_build/artifacts"
             export PRESSURE_VESSEL_TEST_CONTAINERS="$(pwd)/_build/depot"
-            python3 tests/containers.py
-
-    artifacts:
-        paths:
-            - _build/artifacts
+            python3 tests/pressure-vessel/containers.py
 
 test:ubuntu-20.04:
     extends: .test_template
@@ -279,11 +331,7 @@ test:ubuntu-20.04:
 
             export AUTOPKGTEST_ARTIFACTS="$(pwd)/_build/artifacts"
             export PRESSURE_VESSEL_TEST_CONTAINERS="$(pwd)/_build/depot"
-            python3 tests/containers.py
-
-    artifacts:
-        paths:
-            - _build/artifacts
+            python3 tests/pressure-vessel/containers.py
 
 test:archlinux:
     extends: .test_template
@@ -320,22 +368,35 @@ test:archlinux:
 
             export AUTOPKGTEST_ARTIFACTS="$(pwd)/_build/artifacts"
             export PRESSURE_VESSEL_TEST_CONTAINERS="$(pwd)/_build/depot"
-            python3 tests/containers.py
-
-    artifacts:
-        paths:
-            - _build/artifacts
+            python3 tests/pressure-vessel/containers.py
 
 autopkgtest:
     stage: test
+    extends: .autopkgtest
     needs:
-        - build
+        - package
+        - package:i386
     variables:
         STEAM_CI_INSTALL_SCRIPT: |
-            # Workaround for the build regression described in !88
-            apt-get -y remove libsteam-runtime-tools-0-helpers
             # We need up-to-date packages for the relocatable install to
             # be able to get its source code
             apt-get -y dist-upgrade
 
+            # Install the packages under test. We're not too worried about
+            # minimal dependencies here
+            dpkg -i \
+            debian/tmp/artifacts/build/libsteam-runtime-tools-0-0_*.deb \
+            debian/tmp/artifacts/build/libsteam-runtime-tools-0-0-dbgsym_*_*.*deb \
+            debian/tmp/artifacts/build/libsteam-runtime-tools-0-dev_*.deb \
+            debian/tmp/artifacts/build/libsteam-runtime-tools-0-helpers_*.deb \
+            debian/tmp/artifacts/build/libsteam-runtime-tools-0-helpers-dbgsym_*_*.*deb \
+            debian/tmp/artifacts/build/libsteam-runtime-tools-0-tests_*_amd64.deb \
+            debian/tmp/artifacts/build/pressure-vessel-relocatable_*_amd64.deb \
+            debian/tmp/artifacts/build/pressure-vessel-relocatable-dbgsym_*_amd64.*deb \
+            debian/tmp/artifacts/build/pressure-vessel-libs*.deb \
+            debian/tmp/artifacts/build/steam-runtime-tools-bin_*_amd64.deb \
+            debian/tmp/artifacts/build/steam-runtime-tools-bin-dbgsym_*_amd64.*deb \
+            ${NULL+}
+            apt-get -y -f install
+
 # vim:set sw=4 sts=4 et: