diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..82bb9deb4c9ce000455ea1fccc0c6ae2dcc08d5c
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,78 @@
+workflow:
+  rules:
+    # Don't create a pipeline if it's a commit pipeline on a branch and that branch has open merge requests
+    - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
+      when: never
+    - when: always
+
+#
+# PREPARE
+#
+
+.prepare:
+  image: python:$PYTHON_VERSION
+  before_script:
+    - python --version
+    - pip install virtualenv
+    - virtualenv venv
+    - source venv/bin/activate
+
+#
+# BUILD
+#
+
+.build:
+  stage: build
+  extends: .prepare
+  script:
+    - python setup.py install
+
+build-pyton-3.8:
+  extends: .build
+  variables:
+    PYTHON_VERSION: "3.8"
+
+build-pyton-3.9:
+  extends: .build
+  variables:
+    PYTHON_VERSION: "3.9"
+
+build-pyton-3.10:
+  extends: .build
+  variables:
+    PYTHON_VERSION: "3.10"
+
+build-pyton-latest:
+  extends: .build
+  variables:
+    PYTHON_VERSION: "latest"
+
+#
+# TEST
+#
+
+.test:
+  stage: test
+  extends: .prepare
+  script:
+    - python setup.py test
+
+test-pyton-3.8:
+  extends: .test
+  variables:
+    PYTHON_VERSION: "3.8"
+
+test-pyton-3.9:
+  extends: .test
+  variables:
+    PYTHON_VERSION: "3.9"
+
+test-pyton-3.10:
+  extends: .test
+  variables:
+    PYTHON_VERSION: "3.10"
+
+test-pyton-latest:
+  extends: .test
+  variables:
+    PYTHON_VERSION: "latest"
diff --git a/setup.py b/setup.py
index 1133b7712149706fe46b955c5a92a8e81cdd9c53..e3f77e93584d51ff24c4e1a0e43896d7dc7e52f0 100644
--- a/setup.py
+++ b/setup.py
@@ -38,7 +38,7 @@ if sys.version_info < (3, 0):
     reqlist = ['numpy', 'astropy >= 0.4, <3.0']
 else:
     # Require astropy v3.2 or later to get much faster copies
-    reqlist = ['numpy', 'astropy >= 3.2']
+    reqlist = ['numpy', 'astropy >= 3.2', 'matplotlib', 'scipy']
 if build_c_extentions:
     reqlist.append('pybind11>=2.2.0')
     ext_modules = [Extension('lsmtool.operations._grouper',