As a provider is developed; resources are added, old resources are updated, and bugs are fixed.
These changes are bundled together as a release.
Releases are numerically defined with a version number in the form of MAJOR.MINOR.PATCH
.
Patch indicates bug fixes, minor represents new features, and major represents significant changes
which would be breaking to the customer if committed. Once a release is published the provider binary is copied to
Hashicorp's provider registry.
Terraform authors can write modular configurations, aptly named modules. These are shared within organizations and
online. Terraform configurations can specify provider requirements
including a version constraint field.
The configuration will then tie these version constraints
to an approximate minor or exact full version. Maintaining trust and consistency on every MINOR
or MAJOR
version upgrade is critical.
If breaking changes are allowed within MINOR
versions, trust in the provider will be eroded and module creators will
not have confidence in provider stability. This diminished trust will eventually lead to customers investing or deploying less to GCP.
Now that we understand what defines a breaking change and that we don't want them. What exactly constitutes a breaking change? Bellow we'll go into the four categories and rules therein.
- Resource/datasource naming conventions and entry differences.
- Individual resource breakages like field entry removals or behavior within a resource.
- Field level conventions like attribute changes and naming conventions.