One of the great advantages of working at Atlassian is that we’re building the tools that we ourselves use to get our job done. With time to work on personal projects (through 20% time and ShipIt days), we are not only given the opportunity to come up with our own ideas for improving our tools, we actually get time to implement them. This is how the Branch View Plugin for Bamboo came to be: I wanted an easier way to monitor the builds that are running on my feature branches.
The birth of “The Branchinator”
Pretty much all of our development work happens on feature branches which allows us to make changes to the codebase independently of work that others are doing on the same codebase. During development I also like to keep an eye on the builds in Bamboo so I can quickly notice whenever I had breaking changes (e.g. failing tests, invalid dependencies, etc.). Once my work passes code review and QA I do a final check that all my builds are successful before merging my branch back into the master line. This way I can be quite sure that my changes won’t break the builds on the master branch.
We’ve configured some of our build plans in Bamboo to create plan branches. This way Bamboo will create branch builds automatically for those plans whenever it detects a new branch in my repository, and I’ll get notifications via e-mail or HipChat about the status of those build plans. But I often found that keeping track of those notifications or looking up specific builds for my branch wasn’t efficient enough for my personal workflow. I wanted to have one place where I could select the repository and branch I was interested in, then see the real-time status of all the builds for that branch in the blink of an eye.
Not only was I looking for an easier way to monitor my branch builds, I was also looking for a way to make it easier to enable additional builds for my branch. At the time, I was working on the JIRA team and our Bamboo instance had so many build plans that only the most essential ones were configured to automatically start running against new branches – builds that run unit tests or WebDriver tests, for example.
We also have more specialized builds that would only run on our master branch or against stable release branches when testing against different database versions. Most of the time there is no need to run such exotic builds on a feature branch. But when working on something that is database-specific, you would want to enable that build for your branch to call out breakages before you merge it back to the master branch. So I also wanted a way to get an overview of which plans are not activated by default, and be able to enable them for my branch through just one click.
From ShipIt to ‘shipped it’
I sat down with James Hazelwood, Xavier Sanchez, and Anund McKague to fine tune the idea, and the next ShipIt (our quarterly hackathon) we teamed up to make this idea a reality. Since none of us were Bamboo developers, our ShipIt started a bit hesitantly while we got familiar with the Bamboo codebase. But the rush of ShipIt quickly kicked in, and before the traditional pizza break we had a first version up and running! Even though our project wasn’t voted the overall winner, a lot of Atlassians came over afterwards to tell us how much they liked the idea and that they’d love to start using this feature. Encouraged by their feedback, we started working on getting the Branch View plugin into a shippable state (contrary to the name, ShipIt projects tend to be a bit… umm…rough around the edges ). One of the problems we had to overcome for our plugin was the performance of looking up the branches. Luckily, the Bamboo team was really supportive. The next release of Bamboo included repository caching which we incorporated into our next iteration of the plugin. At that point, we released our first official version and got it deployed to our internal Bamboo instances for dog-fooding. People from different teams came to us with suggestions (and bug reports) to improve the plugin. We used our 20% time to address these issues and built in new features – like showing which commits are included in the last run of each branch build. Since the source code of the plugin was available for everyone at Atlassian to edit, we soon saw other people contribute improvements. Soon, the Bamboo team noticed that it had been picked up quite well within Atlassian, so we sat down together to decide how to polish up the functionality and user experience of the plugin to get it ready to publish on the Atlassian Marketplace.
Visualizing quality, one branch build at a time
It has been really amazing to see the adoption of the plugin within Atlassian (there was even a case where someone thought the plugin was a new feature of Bamboo and blogged about it in our internal Confluence instance!). Some teams include a direct link to the Branch View Plugin whenever they open a pull request in Stash or Bitbucket so all code reviewers can see the current state of the builds. This not only allows them to verify that the basic test plans are all successful, it’s also a great way to assess whether any of the ‘exotic’ plans should be enabled as well. Not only do developers use it to check test results quickly when working on a branch, release managers use it as their source of truth for code quality once they’ve cut a release branch. For the Confluence 5.5 release the Branch View was used by the release manager on the bug fix branches to make sure all the plan builds were successful before approving the corresponding pull requests. Get your branch builds green today by installing the Branch View plugin! You can download it for free from the Atlassian Marketplace.
Anyone can be good, but awesome takes teamwork.
Find tools to help your team work better together in our Git Essentials solution.