diff --git a/grading-gitlab-ci.yml b/grading-gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..255f33ef251c8e7b91d63d2ebce46895102b066c
--- /dev/null
+++ b/grading-gitlab-ci.yml
@@ -0,0 +1,61 @@
+# This CI config file is not used in this repository but instead referenced
+# from each student project (https://gitlab.epfl.ch/help/ci/pipelines/settings#custom-ci-configuration-path)
+# and used to grade them.
+
+workflow:
+  rules:
+    # Don't run the CI on commit messages contain "[no-ci]", used to deploy
+    # assignments without overloading the CI.
+    - if: $CI_COMMIT_MESSAGE !~ /\[no-ci\]/
+
+stages:
+  - build
+  - grade
+
+compile:
+  stage: build
+  timeout: 15m
+  image: lampepfl/dotty:2020-11-19
+  tags:
+    - cs210
+  except:
+    - tags
+    - master
+  # Caching is only allowed for directories inside the current project, so we make sure
+  # all our caches are inside CI_PROJECT_DIR:
+  script:
+    - XDG_CACHE_HOME=${CI_PROJECT_DIR}/.cache sbt -Dsbt.boot.directory="${CI_PROJECT_DIR}/.sbt-boot" -Dsbt.ivy.home="${CI_PROJECT_DIR}/.ivy2" packageSubmission
+  # Careful: using a cache on a gitlab-runner means that a cache.zip file will
+  # be downloaded to each container, this can quickly fill up disk space on the
+  # runner space. To mitigate this we use a `docker-prune` systemd timer that
+  # runs `docker system prune --force --volumes -a`.
+  cache:
+    key: cs206-2021
+    paths:
+      - .cache/
+      - .sbt-boot/
+      - .ivy2/cache/
+  # Output of this job that needs to be stored to be reused in the grade job below
+  artifacts:
+    expire_in: 1 day
+    paths:
+      - submission.jar
+
+grade:
+  stage: grade
+  timeout: 15m
+  except:
+    - tags
+    - master
+  tags:
+    - cs210
+  image:
+    name: lampepfl/moocs:cs206-2021-${CI_COMMIT_BRANCH}
+    entrypoint: [""]
+  allow_failure: true
+  before_script:
+    - mkdir -p /shared/submission/
+    - cp submission.jar /shared/submission/submission.jar
+  script:
+    - cd /grader
+    - /grader/grade | /grader/feedback-printer