Gitlab CE is just amazing. It's hard to fathom going back to GitHub (and I wrote a book for O'Reilly about the GitHub API). The tight integration with CI rather than using external services is amazing.

Have you tried Github Actions? (I haven't, just want to calibrate).

Github actions is nowhere near as polished/mature ad gitlab ci. Github actions feels more like a "hack blocks together" than a true pipeline.

Github actions is confusing and has a steep learning curve, but the flexibility of using Docker makes it fast and reliable to hack together workflows.

It's also slow and difficult to cache build artifacts which makes it immensely painful to debug if you have anything of moderate complexity.

Allegedly there's a way to cache image layers and artifacts on Github. I've taken to pushing them to S3 buckets so my CI runs can be incremental where possible.

It's fairly easy to cache folders in Github actions, we use it for node_modules, the refreshed when the package.json file changes.

See [1] actions/cache for more details.

[1] https://github.com/actions/cache