diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d2b2b6e7ce8720fbc0b22b1a81fbc5a282998d90..ebd2e1498e2494880aa3a26e125e3fb904043119 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -15,38 +15,22 @@ build_and_test:
   script:
     # Build batsched
     - nix-shell --pure ./release.nix -A batsched --command ${CI_PROJECT_DIR}/ci/list-store-paths-for-cachix.bash | cachix push batsim
-    - nix-build ./release.nix -A batsched
+    - nix-build ./release.nix -A batsched && cp -rL result ./batsched
     # Test against pinned batsim
     - nix-shell --pure ./release.nix -A integration_tests --command ${CI_PROJECT_DIR}/ci/list-store-paths-for-cachix.bash | cachix push batsim
     - nix-build ./release.nix -A integration_tests && cp -rL result ./integration_tests
     # Test against up-to-date batsim
     - nix-shell --pure ./release.nix -A integration_tests_batlatest --command ${CI_PROJECT_DIR}/ci/list-store-paths-for-cachix.bash | cachix push batsim
-    - nix-build ./release.nix -A integration_tests_batlatest && cp -rL result ./integration_tests_batlatest
+    - nix-build ./release.nix -A integration_tests_batlatest && rm result
     # Fail job if tests failed
     - if [[ "$(cat ./integration_tests/pytest_returncode)" -ne 0 ]] ; then echo "pytest returned non-zero (against pinned batsim), aborting" ; exit 1 ; fi
     - if [[ "$(cat ./integration_tests_batlatest/pytest_returncode)" -ne 0 ]] ; then echo "pytest returned non-zero (against latest batsim), aborting" ; exit 1 ; fi
+    # Send coverage results to codecov.io
+    - nix-env -i gcc
+    - mkdir -p merged
+    - cp ./batsched/gcno/* ./integration_tests/gcda/* merged/
+    - bash <(curl -s https://codecov.io/bash)
   artifacts:
+    when: always
     paths:
-      - /builds/batsim/batsched/cover
-
-###############################################################################
-# Deploy stage
-###############################################################################
-deploy_coverage:
-  stage: deploy
-  script:
-      - echo "Disabled for now."
-      - exit 1
-      # Pushes Batsim's code doc (doxygen) onto the gforge website.
-      # SSH setup (do NOT run these commands on your machine)
-      - eval $(ssh-agent -s)
-      - echo "$SSH_PRIVATE_KEY" | tr -d ' ' | base64 --decode | ssh-add -
-      - mkdir -p ~/.ssh
-      - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" >> ~/.ssh/config'
-      # Finally push the code documentation on the gforge website
-      - rsync -rlgoDz --delete cover/html/ mpoquet@scm.gforge.inria.fr:/home/groups/batsim/htdocs/batsched/coverage
-  dependencies:
-    - build_and_test
-  only:
-    - master
-  allow_failure: true
+      - /builds/batsim/batsched/integration_tests