How does the process of creating and maintaining a build from a dev branch work? For example, how is specific functionality selected from the dev branch and put into a build such as 3.10, while other things are left behind in Game Dev? And once it's created, how are these changes maintained between each build?
TL;DRFeatures live in dozens of separate dev streams and are merged up into collective streams tested by QA, then a release branch is cut and filtered through an inclusions process, with fixes automatically brought back down to developers.
Sure. We actually maintain dozens of dev streams where individual features live and are housed, and as those features get completed, they're merged up into the more collective streams that get tested by QA as well, so we can kind of see how they play together before creating the release branch eventually. Usually once everything's ready for a 3.10 or 3.11, we'll branch that out and start cutting builds from there. We have a pretty robust inclusions process that allows us to strip it down and make sure things aren't going out that shouldn't be yet. And then as far as... I think I already touched on that. We kind of have a nice user interface that developers, anybody in production can go and request a build. So production a lot of times is the ones responsible for kicking the release builds and maintaining that pipeline of who does what, when, the builds, where. As far as how to get selected things, so obviously bug fixes go in our release streams. We have a bunch of internal automated tools that, as soon as changes are submitted to those streams, we start bringing those changes back down to the lower level developers and distributing them out so that everybody has access to those changes as quick as possible.
I think it's one of those things that maybe isn't always apparent, that everybody's working in these individual feature streams so that the actor feature team can work in their stream and the ship team can work in their stream, the ship art team can work in theirs, the feature team is this one, our team is this one, and they're all working in these different streams so they don't step on each other's toes and overwrite each other's work while they're working. And then that process of integration is where bugs are born.
It's huge. We actually manage quite a few microservices that kind of back the whole build process, and that's probably the most heavily used microservice, that integration process, at the moment. It's thousands a day, easily.