Cloud Development is needed to complete the original idea to production vision. We expected Koding to fulfill this part, but it hasn't worked out as we had hoped.
The current thinking is to combine a "dev environment" + web terminal + git push back.
A dev environment is similar to review apps in that they are ephemeral and only available when needed, and that you can connect to them with the web terminal. They have to be different in that they'll have development dependencies and tools, and the ability to commit changes and push them back to origin.
We'd likely have one per developer per project so that developers don't clash with each other, and so that developers can work on multiple projects simultaneously. But we might need to spin up multiple for the same project so people can work on multiple merge requests in parallel. But hopefully we can leverage the same dev environment and just seed it with the code from each branch. It would suck to lose unsaved work accidentally though.
For implementation, we might declare an explicit environment in
.gitlab-ci.yml, just like review apps, but I'm leaning towards creating temporary environments that run directly on the runner with ports exposed and routing ingress. Since runners are already k8s friendly, this is very convenient and would more easily let us spin them up when needed with less overhead. With might need a way to automatically garbage collect idle environments and persist disk between instantiations.
Either way, we'd boot up the container and install dev dependencies according to the image defined in
.gitlab-ci.yml explicitly for development. We can provide a base image that works for lots of languages/frameworks.