What it was
This validates a Unity project, builds it for several platforms in parallel and gathers the results into a report. I used Temporal and .NET 8, with a simulation mode so you can run the whole workflow without having Unity installed. Temporal handles most of the orchestration. Getting several Unity builds to coexist on one machine took more work, because they want to use the same Library folder and the licensing setup assumes a single instance. Each build gets its own copy of the parts of the project it needs.
Build
- A Temporal workflow validates the project, starts the platform builds in parallel and waits for their results before producing the report.
- Each build works against its own read-only project copy. I only copy the directories Unity needs, so doing this for every build stays reasonably cheap.
- Simulation mode replaces the Unity build step while exercising the orchestration around it.
- The repository includes architecture decision records for retries, observability, cancellation, simulation and the project-copy approach.
- Mermaid diagrams explain the architecture and sequence. The justfile collects the commands for running it.
Key decisions
Temporal
A failed build can be expensive to start over. Temporal already has the durable state, retries and cancellation handling I needed, so I used that instead of implementing them myself.
Testing without Unity
You shouldn't need a Unity installation and licence just to check the workflow logic. Simulation mode lets somebody run and review that part of the project on its own.
Project copies
Running the builds sequentially would avoid the shared-project problem, but I wanted them in parallel. Giving each instance a small copy lets Unity work the way it expects without fighting over another build's files.
Lesson learned
Writing the ADRs changed a few of my decisions.the rest of it ↓fold it back up ↑
I wrote architecture decision records alongside this. Trying to explain why I'd chosen something changed a few of the decisions, which I hadn't expected when I started writing them. They also leave the rejected options in the repo, so someone reading it can see what I considered. I didn't get the role. Still, it gave me a week to get into Unity's build tooling and licensing, both of which had rather more going on than I'd realised.