This document discusses Guerrilla Games' development process for their game Killzone Shadow Fall. It describes how they use Perforce for version control and continuous integration. Key aspects of their process include having most developers work on the main trunk, extensive testing before and after code commits, labeling builds to sync safely to known good versions, and branching for frequent weekly releases while keeping the main branch for ongoing development. This approach allows for speed of iteration while maintaining control over the development cycle and releases.
7. #
• Monitors all vital stats of server and proxies
• Simple Python script, produces simple html
• Works for Windows and Linux servers
• Proxies cleaned by another Python script
• Both available in the Perforce Workshop
20. #
• Personal branch is fine (sandbox / streams / Git)
• Feature branches sometimes work
• Give control over your environment
• But create distance to others
• Team work requires frequent branch switching
21. #
• For us, branch switching is always expensive:
– Amount of data and change
– Unmergeable files
– Code-Data dependencies
• Branches add complexity, we already have that
• Team effort, we don’t want distance
• Almost everybody works on the trunk
• So why isn’t it always broken?
25. #
Programmer
Test
Submit Sync
Rigger
Tester
Team
Submit
Submit
Designer Animator
Submit
Submit
Sync
Sync
Sync
Sync
Test
Test
Test
Test
26. #
• Test pre submit (user)
• Test post submit (builder)
• Test in parallel
• Test as fast as possible
• Still accidents do happen
User B
Sync
Sync Build Game Submit
Sync Test Game
Sync Build Tools Submit
Sync Cook Data
< 30 minutes
User A
Submit Sync
Test Game
…
Sync
Upload
Cook Data Upload
Test
27. #
Build machines
write
Label 42: change 1200
Label 41: change 1180
Label 40: change 1155
Label 39: change 1150
…
Labels.xml
read
Safe-Sync Tool
• Each game build creates a label
• Stored in Labels.xml file in depot
• Builds add their result to the label
• Builds can add artifacts to a label
• Nobody gets latest (not safe)
• Everybody uses safe-sync tool
28. Select
tests
Sync to
get label
#
Labels that
pass tests
Labels that
fail tests
• Custom safe-sync tool shows labels and test results
• Use it to sync to a known good label
– This includes artifacts from other builds
30. #
• We branch for every release (often every week)
• Nobody works on the release branch
• Everybody works on the trunk
• Changes are merged up from main to release
release
main
= release
= change
31. • Cherry picking rules!
• Gives you a lot of control
• But also lots of confusion
• And mistakes are easy
• Good tools can fix this
• Give flexibility
• And control
#
(See whitepaper for details)
32. #
• Iterate as fast as you can
• Don’t branch too much
• Test everything
• Sync should be safe
• Release all the time
• Control what you release
Speed
Control