Resolve "Optimize CI pipeline"
This MR optimizes the CI pipelines by doing the following:
- [x] Enable out-of-order execution of jobs using the `needs` clause
- [x] Split tests for better parallelization
- [x] Evaluate the `parallel` keyword
- [x] Evaluate the `interruptible` keyword
- [x] Reduce artifact size by removing unneeded object files between stages
- [x] Refactor Docker images and make them versioned
- [x] Create a `gekkofs/core` image for system dependencies
- [x] Create a `gekkofs/deps` image for downloaded dependencies
- [x] Create a `gekkofs/linter` image for validation of formatting
- [x] Create a `gekkofs/testing` image for running tests
- [x] Create a `gekkofs/coverage` image to generate coverage reports
- [x] Add configuration profiles to `dl_dep.sh` and `compile_dep.sh`
It also improves the reporting of tests by integrating it with the GitLab UI. This required the following changes:
- [x] Enable JUnit reporting of tests
- [x] Enable JUnit reporting for `integration` tests
- [x] Fix reported filename for GitLab integration
- [x] ~~Integrate daemon and client logs into JUnit XML~~
- [x] Enable JUnit reporting for `unit` tests
Closes #165 #157 #166 #167
See merge request !103