Terraform growth has been explosive. It is exciting to see the community grow, embrace, and extend Terraform in ways we never imagined.
At the time of writing, Terraform ships with support for almost 500 resources across 30 providers. Because Terraform has always had a high bar for testing, each of these resources and providers is well tested. Terraform in total has thousands of unit tests and over 500 black box acceptance tests.
With this growth, we've been able to maintain a positive pulse ratio while averaging multiple releases per month. Despite this, we believe we can do better. We believe we can merge PRs more quickly, we can release more often, and we can dedicate more time to core improvements. For weeks, the Terraform team and HashiCorp have planned a set of improvements towards these goals and today we're announcing those changes.
» Detailed Contribution Guidelines
Terraform has always been a very welcoming community. If you submit a PR that isn't quite complete, a Terraform core member will complete it and merge in the feature.
As Terraform has grown, this process has grown too time consuming. We still want to merge every PR, even if that means that we have to make minor modifications, but this doesn't scale well with the maintainers (for both full time HashiCorp employees and community members with commit access).
Instead, we've now documented detailed contribution guidelines. These guidelines go into detail for each of the most common Terraform contributions and what we require to merge the PR quickly and easily.
If you meet all the guidelines properly, we can very quickly merge the enhancement or bug fix to Terraform. However, these are still guidelines. We don't want to push anyone away from contributing to Terraform. If you have an incomplete PR you want to create, you can still open it. If all the guidelines aren't met, merging the PR will have to wait until a core member or another member of the community has time to complete it.
The contribution guidelines contain a detailed guide for how to do each step. We don't tell you "this needs tests" without telling you how to write and run tests. We've tried to make this as easy as possible for even beginners to get started with.
It is important to note that this is always the process we've taken. If you create a perfect PR, it has always been merged very quickly. We're now being more transparent and detailed about what constitutes a "perfect PR".
» Faster Issue/PR Response
With the contribution guidelines in place, we can now respond to every PR more quickly. We've done a poor job of leaving many PRs silent when they're good ideas but not quite ready to be merged.
We can now reference specific parts of the contribution guidelines and explain why we haven't merged the PR yet. If the contributor or another community member addresses what is missing, we can merge the PR very quickly. If not, then we'll try to get to it when we have time, but this could potentially be many months.
As PRs get handled more quickly, this will give our core maintainers more time to dedicate to triaging, reproducing, and fixing issues. Therefore, we expect issue response time to also improve.
» HashiCorp vs. Community Providers
We're very proud of Terraform's growth to over 30 providers. It allows Terraform to be used with more systems directly out of the box.
But the surface area of issues/PRs for this provider growth has grown faster than our ability for full time maintainers to handle. We're splitting providers into two categories going forward: "HashiCorp" and "Community".
HashiCorp providers are providers that we'll dedicate full time resources to improving, supporting the latest features, and fixing bugs. These are providers we understand deeply and are confident we have the resources to manage ourselves. To begin,
azurerm will be HashiCorp providers.
Community providers are providers where we depend on the community to contribute fixes and enhancements to improve. HashiCorp will run automated tests and ensure these providers continue to work, but will not dedicate full time resources to add new features to these providers. These providers are available in official Terraform releases, but the functionality is primarily contributed.
Just like our contribution guidelines, this isn't new. This is a formalization of what we've already been doing. Most of the 30 providers have come from the community, and we've always required automated tests to verify functionality. And some providers even have core committers from the community to maintain them. For example, HashiCorp doesn't have any CloudStack expertise, but Sander van Harmelen has been a non-HashiCorp core maintainer for over a year and keeping CloudStack stable and up to date.
I want to stress again that all providers, HashiCorp and Community, will have nightly acceptance tests run and paid for by HashiCorp. We want to ensure that all providers shipped in Terraform releases work, but we ask upon the community to ensure continued stability for the community providers.
We're extremely proud of Terraform. It has grown faster than we could ever imagine, and the community around it is passionate and wants to improve the project.
We believe we can do a better job embracing the community as we grow without slowing down features, releases, or response times to issues.
We hope that what we've announced here today will give us the foundation we need to continue to build a scalable and active community. We hope we've given community members transparency and proper expectations for how to improve Terraform together.
We love our community and we're excited to continue to grow this project going forward.