Beta !
Time for beta release! Terrabuild has gone several changes, and for good 🎉
Past months have been used to dogfood Terrabuild with Magnus Opera’s infrastructure (.net backend, React front-end, Kubernetes and other things deployed via Terraform). Dogfooding has helped a lot to squash several embarassing bugs, implement several really useful features and improve performance.
Stability
Terrabuild reached a really good level of stability:
- Parser has been enhanced to report better errors and grammar has reached the required level of maturity
- Performance of containers has improved a lot: home folder is now shared for same container architecture
- Fix bug on reproducibility of the build (hash computation was incomplete)
- Idempotency for local/remote build has been solved as well (hash was computed on different set of commands)
New optimizer
The new optimizer has much more power than previous one: it can now track multiple clusters of the same type on different causalities. Old optimizer was only able to optimize one cluster type for the whole build (for example, a single .net build was supported).
Here is a sample workspace
Terrabuild is now able to optimize this way
Real life optimizations applied on Terrabuild itself
Reports
Build summary has been introduced on GitHub Actions:
- Tasks summary
- Build graph
- Logs
The build summary provides an overview of build performance and status: it’s even better than current GitHub build log 😎
Partial graph invalidation
If a node has children and those are rebuilt appart, it’s obvious the node shall be rebuilt (because it is younger than children). That was the case in the same build - but not across builds.
This is now supported since it’s a valid scenario (for example with terraform plan/apply
on several jobs).
Extensions
- Rust (Cargo projects) has been added
- Dotnet is able to optimize
test
command now
Overall performance
Accessing the global cache to check if a node is used are not was costly before: the whole summary and outputs were downloaded for all nodes 😬 This was inefficient since most of the time only a few nodes changes and only node status is required.
Terrabuild implements now a better check strategy: it only download summary if the status of a node is uncertain. If the node is not required, outputs won’t even be downloaded. In some cases, it won’t even bother to check the task if not required at all. This really improves I/O and overall build performance 🎉
Want to give it a try ?
Terrabuild really shines with a shared cache. If you want to give it a try, reach us at beta@magnusopera.io
and we’ll get you a test account as well instructions to use Terrabuild in CI context. Shared caching is free while Terrabuild is in testing phase.
Questions or Feedback?
Would like to send us feedbacks on this new product?
Something looks wrong or not clear?
Want to say you love Terrabuild?
Well, feel free to contact us at beta@magnusopera.io
!