Build Meetup in Tokyo — Recap¶
Co-hosted by EngFlow and Google, the build community in Tokyo came together for an afternoon of tech talks and a happy hour filled with beverages and good vibes.
The event went straight into talks, starting with introductory words from our Google host, Philipp and EngFlow Developer Support Engineer Kip. The talks that followed spanned build systems and build issues:
- A Tour of Bazel’s Platforms and Toolchains by Antonio Di Stefano
- Optimizing unit tests with Bazel iOS infrastructure by Mikhail Zinov
- Cross-platform and browser development by Bing Wang
- Change detection for automated releases by Spencer Cramm
- Building a reliable development pipeline by Mesut Durukal
- Migrating Chromium from Goma to REAPI by Fumitoshi Ukai
Following the talks, we headed out to a nearby bar for some canapés and drinks, meeting fellow build engineers and enthusiasts from around the region.
A Tour of Bazel’s Platforms and Toolchains by Antonio from EngFlow¶
Antonio from EngFlow opened up the talks with a primer on Bazel’s platforms and toolchains. In the first part, he laid out the API definitions and required pieces to implement your own hermetic toolchains. In the second part, he showed a cross-platform test implementation, concluding with a live demo. The demo included details on platform transitions and Antonio spent some time highlighting common issues when implementing toolchains of your own.
Optimizing unit tests with Bazel iOS infrastructure, by Mikhail from Mercari¶
Mikhail, an iOS engineer at Mercari spoke next about optimizing Bazel iOS unit tests. Mikhail started with an introduction to iOS tests and how they look to build systems, going through the steps and flow of a general case. While stepping through the process, Mikhail elaborated each step, coloring in the details, such as the difference between 'hosted' and 'unhosted' iOS tests.
Once he had established a model for the structure of the tests, he integrated remote execution into it, showing the steps that it allows developers to parallelize.
Mikhail showed that using 'hosted' tests with remote execution introduces a complication, which is the size and quantity of the required '.xctest' bundles. He pointed out that it’s common to have a lot of duplicated bundles across a test suite, which are so large that copying the bundles across a remote execution cluster can dominate the test execution time. To finish his talk, Mikhail went through his strategies and their results, tuning the size, number, and parallelism configuration of '.xctest' bundles, demonstrating great results by tuning the bundles.
Cross-platform and browser development, by Bing from Flatiron Health¶
Bing from Flatiron Health picked up after the intermission providing the first non-Bazel talk for the event. She spoke about creating a consistent environment for developing cross-platform applications from heterogeneous clients. Bing’s use case included some specific requirements, such as being able to manage microservices from the workstation, and supporting development for Internet Explorer 11.
The solution that Bing arrived at was a cloud-development environment, harnessing VMs using a standard cloud provider. For day-to-day development, they settled on Linux VMs using the VS Code remote plugin. In order to work with the microservices FlatIron developers support, Bing set up a Traefik reverse proxy, while the IE support runs with separate Windows VMs with Microsoft Remote Desktop.
Change detection for automated releases, by Spencer from Woven City¶
(Not recorded)
Spencer spoke about how his team at Woven City created a tool using aspects, output groups, the Build Event Protocol, and EngFlow's Remote Build Execution to provide an automated change detection and release process for artifacts in their monorepo. In a monorepo with over 400 artifacts (docker images, helm charts, binaries, etc.) and more than 150 commits daily to main, they needed an efficient method to automatically determine what artifacts should be released.
The Woven City team found that they were running many artifact ‘push’ rules, even for identical blobs. Spencer described how they cut the number of spurious artifacts pushed by creating an output group containing extra hashes. These hashes emit in a build event, and then checked. If a hash had changed, then that triggered the artifact to be pushed. Otherwise, the push was needless, and just served to waste time. This change eliminated ~99% of push rule executions, taking the CD pipeline from a consistent 15 mins, to having a p95 of 30 seconds.
Building a reliable development pipeline, by Mesut from Indeed¶
Mesut from Indeed was next, providing a refreshing take on common issues faced by QA and CI/CD engineers, driving reliability in their organization. His talk included some priceless memes and jokes about the struggles test engineers face, drawing laughs across the room.
Mesut’s talk was wide-ranging, covering all sorts of pitfalls and criteria test engineers have to keep in mind in order to create reliable and stable products. From the right mix of unit tests, end-to-end tests, and manual tests, to the ramifications of false negatives compared to false positives, to everything that is implied by the word “quality” in software, Mesut covered it all, keeping us entertained throughout.
Migrating Chromium from Goma to REAPI, by Fumitoshi from Google¶
Fumitoshi from Google closed out the talks with a fascinating history of Chromium’s build system. He has been involved with Chromium’s builds for a long time, having joined Google in 2006. The talk gives a full history of builds at Google, starting with makefiles and 'distcc', progressing to builds with Goma, Blaze, and Forge, and finally ending with the current state of Chromium builds, which are with REClient and Siso.
Fumitoshi brought a wise perspective, earned from many years evolving with Chromium’s builds. He even explains where Siso gets its name! If you’re interested in how build tools have evolved over time, this is a fantastic chronology, which only someone like Fumitoshi can give.
Bringing Bazel Community Day To You¶
We're always looking for new places to explore and more people to share community days with. Where should the next Bazel Community Day be? Fill in this form or stay tuned at meetup.build to attend future events and receive updates on training sessions or meetup opportunities.
Connect with us on LinkedIn, X (Twitter), and subscribe to our newsletter to stay updated on upcoming community days and other events.