Skin Deep: Blendo Build Machine
Skin Deep will be released April 30, 2025! In the following weeks, I’ll be writing about the processes and development of Skin Deep.
Wishlist Skin Deep here!
To view all posts in this series, click here.
Blendo Build Machine
Today I’ll be writing about the Blendo Build Machine tool. Here’s what it looks like:
Yup, it’s one huge button. “Create build.” That’s it!!!!
Goals
I wrote this tool to solve one issue: how to give the development build to every teammate.
- The team consists of multiple people.
- These people need to work on the game.
- In order for people to work on the game, they need a build of the game.
- Not just any build, but the latest version of the game, with changes that were checked in sometimes several seconds ago.
(For context, “development build” here means a build of the game with the most recent code/content/etc.)
Approaches
Here’s approaches I considered:
- Use the cloud: Someone remotely initiates a build, and then a computer somewhere in the world creates and distributes the build.
- Use myself: Have me create each build and then distribute it to everyone.
- Use teammate’s computer: Have the teammate create their own build.
I think all three of these are viable, and all have pros and cons. I think it depends on what you’re looking for and how you all work.
I chose option #3, of having each teammate create their own build on their own personal computers.
- I looked into a cloud solution, but this wasn’t something I had much experience in.
- I didn’t want to create builds myself, as I didn’t want to become a bottleneck of someone waiting for me to do something.
- And so, option #3 felt most viable. This enabled each teammate to create a build on-demand, whenever they like, regardless of timezone or my availability.
How it works
You click the giant Create Build button:
The tool then:
- Grabs latest source code: it uses SVN to get the latest content & latest source code currently in the repository.
- Compiles the latest code: immediately afterward, it uses Visual Studio command-line tools to compile the source code. This results in a new game executable.
The end!
Wait, that’s it?
Yea, that’s it.
To be clear: this tool ultimately boils down to automating some button clicks. Here’s how you’d manually do what this build machine does:
- Right-click on project folder.
- Select SVN Update from the context menu.
- [Wait for latest data to finish downloading, 1-60 sec]
- Open the .sln file in Visual Studio.
- Press F5 to compile a new build.
- [Wait for build to finish compiling, ~4 min]
I don’t think every process needs to be automated. But there’s a couple things in this specific manual process that make it worth automating:
- If you forget to do one of the steps in this manual process, or do them out of order, it will silently fail and silently result in a wonky build.
- It has some duration of waiting between the button clicks, which means you have to babysit your computer.
- It’s a task that teammates do very frequently.
So, for those reasons, it made sense to automate this process with the Blendo Build Machine.
Options
Here’s the options for the tool. It’s mostly self-explanatory. There’s a fair amount of knobs you can turn to make it work for how you like to operate.
I personally like to have the tool just automatically start the process when I run it, and then automatically run the game when the process is all done.
Notes
- If for some reason you don’t want teammates to have the game’s source code, then this won’t work for you.
- A tradeoff is: this front-loads the initial setup time. Teammates have to install Visual Studio, which can sometimes be gnarly, so initial setup time can be a big task. We’ve done a fair amount of documentation to try to head this off.
- Credit where it’s due: the initial inspiration for making this tool was from Seth Coster’s DevOps talk.
Nuts and Bolts
Blendo Build Machine was made with Winforms. It was written in C# with Visual Studio 2015.
If you think any of this is useful, please feel free to adapt it to your own project:
Et al
Laura and I used the Blendo Build Machine when we worked together on Tall Bagel, and we’ve since used it on other projects we’ve made together.
Can this tool be used for your game? Maybe! Who knows.
I personally think it’s fine & good to make a tool specific to your process/project, and then to never re-use it again. I find these tools to be relatively quick to make, so it’s very feasible to make a one-off thing.
I think you gotta just figure out what works for you!