diff --git a/.gitlab/ci.sh b/.gitlab/ci.sh
index 737bbede17ed44fffd5d71ba0b5f3ce5d373e2e2..9966bb86f6658be16da54dbf7f793334d5551c0d 100755
--- a/.gitlab/ci.sh
+++ b/.gitlab/ci.sh
@@ -34,6 +34,22 @@ if [ "$(getconf LONG_BIT)" = "32" -o "${PLATFORM:=xxx}" = "x86_64-linux-centos7"
     echo 'constraints: lukko -ofd-locking' >> cabal.project.release.local
 fi
 
+# In February 2024, cabal started using zlib-0.7.0.0, which uses pkg-config by
+# default. The GitLab CI environment doesn't (yet) supply pkg-config, and zlib
+# does just fine without it on modern GHCs. That said, the CI environment
+# probably *should* have pkg-config installed. See
+# https://github.com/haskell/cabal/issues/9774.
+echo 'constraints: zlib -pkg-config' >> cabal.project.release.local
+# Furthermore, on Windows, zlib claims that libz is shipped with GHC, so it just
+# uses @extra-libraries: z@ if pkg-config is False. If you are reading this
+# comment, however, this didn't work. Thus we switch to using the bundled libz,
+# as was done in zlib <0.7.0.0.
+case "$(uname)" in
+    MSYS_*|MINGW*)
+        echo 'constraints: zlib +bundled-c-zlib' >> cabal.project.release.local
+    ;;
+esac
+
 args=(
     --disable-profiling
     --enable-executable-stripping