June 10th 2018 by SDGNelson
Beware all ye who enter: mostly technical focused post ahead!
Earlier this week saw the release of 188.8.131.52:
Aside from that I got quite a bit done on 4 as well! My focus this week was on setting up Continuous Integration. To recap: this means that any time I make a change e.g. adjusting some code, my laptop will pick up the change a run a series of tasks on it.
Continuous Integration (CI)
Right now this includes running tests to make sure that nothing was broken, exporting the game for Windows + Linux, and if I include "+SteamDeploy" in the change details it will automatically upload the new version to a beta branch on steam. I'm pretty excited that this will allow for much faster turnaround and stability, and I expect this beta branch will be open as an option once the 4.0 beta is released.
To catch any issues the CI server finds early I also built some tools for the Unreal Editor which keep an eye out and pop up a notification when an error occurs:
I'm pretty happy with the level of polish I put into all these features, and I really think it will benefit the game in the long term. I was also able to protect against issues that 3 had in the past from happening for 4, like automatically downloading steamcmd and the steamclient libraries so that the dedicated server will always be using the latest API. Maybe once 4 is actually available I'll buy a proper server to run these rather than my laptop. 🙂
Still have a bunch of stuff to do for 3, but for 4 I think next I'll either work on some of the server administration features like Rcon and permissions, or return to the character model improvements I was working on before I burned out. Hopefully more info soon!
UAT Implementation Details
(for other Unreal Engine devs)
I haven't seen this talked about much online, but you can create a .Automation.csproj for your game to call directly into other UAT BuildCommands. This avoids getting tangled up in pages of command-line arguments, instead allowing you to create your own switches as needed. For example rather than using BuildCookRun I have Jenkins call RunUAT.bat U4_BuildCookGame -WinClient -WinServer -LinuxServer.