diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..cd2c722a378775d8f9c815001b5f73fd45b22604
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,77 @@
+# Use the DrupalCI templates.
+include:
+  - project: $_GITLAB_TEMPLATES_REPO
+    ref: $_GITLAB_TEMPLATES_REF
+    file:
+      - '/includes/include.drupalci.main.yml'
+      - '/includes/include.drupalci.variables.yml'
+      - '/includes/include.drupalci.workflows.yml'
+
+#
+# Start custom overrides.
+#
+variables:
+  # Disable default phpunit job in favor of the d9/10 variants below.
+  SKIP_PHPUNIT: 1
+  # Skip eslint for now.
+  SKIP_ESLINT: 1
+  # Convenient, and we have no secrets.
+  _SHOW_ENVIRONMENT_VARIABLES: 1
+  # Remove this when available upstream.
+  CORE_PREVIOUS_PHP_MIN: "7.3"
+
+# Run two variations of composer job.
+composer:
+  parallel:
+    matrix:
+      - _TARGET_PHP: [ $CORE_PREVIOUS_PHP_MIN ]
+        _TARGET_CORE: [ $CORE_PREVIOUS_STABLE ]
+      - _TARGET_PHP: [ $CORE_PHP_MIN ]
+        _TARGET_CORE: [ $CORE_STABLE ]
+
+phpcs:
+  dependencies:
+    - "composer: [$CORE_PHP_MIN, $CORE_STABLE]"
+
+composer-lint:
+  dependencies:
+    - "composer: [$CORE_PHP_MIN, $CORE_STABLE]"
+
+eslint:
+  dependencies:
+    - "composer: [$CORE_PHP_MIN, $CORE_STABLE]"
+
+stylelint:
+  dependencies:
+    - "composer: [$CORE_PHP_MIN, $CORE_STABLE]"
+
+.phpunit-local:
+  variables:
+    SKIP_PHPUNIT: 0
+
+phpunit-d9:
+  needs:
+    - job: composer
+      parallel:
+        matrix:
+          - _TARGET_PHP: $CORE_PREVIOUS_PHP_MIN
+            _TARGET_CORE: $CORE_PREVIOUS_STABLE
+  variables:
+    _TARGET_PHP: $CORE_PREVIOUS_PHP_MIN
+  extends:
+    - .phpunit-base
+    - .phpunit-local
+
+phpunit-d10:
+  needs:
+    - job: composer
+      parallel:
+        matrix:
+          - _TARGET_PHP: $CORE_PHP_MIN
+            _TARGET_CORE: $CORE_STABLE
+  variables:
+    _TARGET_PHP: $CORE_PHP_MIN
+  extends:
+    - .phpunit-base
+    - .phpunit-local
+
diff --git a/composer.json b/composer.json
index 9c40a34140e24a5c81b714f9a2f2aef660c9edf2..3ed526772497e8a48759cb8403603057cf7761a5 100644
--- a/composer.json
+++ b/composer.json
@@ -3,6 +3,9 @@
     "description": "Allows any entity to be embedded within a text area using a WYSIWYG editor.",
     "type": "drupal-module",
     "license": "GPL-2.0-or-later",
+    "conflict": {
+        "drupal/core": "<9.3"
+    },
     "require": {
         "drupal/embed": "^1.5"
     },