Skip to content

Commit e4b3d35

Browse files
authored
update CONTRIBUTING with our evolution policy and do not allow skipping the deprecation phase (#6054)
1 parent 7ab4c16 commit e4b3d35

File tree

1 file changed

+4
-19
lines changed

1 file changed

+4
-19
lines changed

CONTRIBUTING.md

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,9 @@ Small pull requests for things like typos, bugfixes, etc are always welcome.
161161

162162
Please note that we will not accept pull requests for style changes.
163163

164-
## API compatibility
164+
## API evolution
165165

166-
Apollo Kotlin observes [semantic versioning](https://semver.org/). No breaking change should be introduced in minor or patch releases.
166+
Apollo Kotlin observes [semantic versioning](https://semver.org/). No breaking change should be introduced in minor or patch releases. See our [evolution policy](https://www.apollographql.com/docs/kotlin/v4/essentials/evolution) for more details.
167167

168168
The public API is tracked thanks to the [Binary compatibility validator](https://github.com/Kotlin/binary-compatibility-validator) plugin.
169169

@@ -186,26 +186,11 @@ stateDiagram-v2
186186
Deprecated(WARNING) --> Removed: Major release
187187
```
188188

189-
However, there are cases where an API must be removed even if it hasn't been deprecated. For instance when a high level behavior is changed and the related API is made irrelevant.
190-
In this case don't remove the API yet, instead, deprecate with the `ERROR` level. This will make the build fail if the API is used, but the message can guide the developer with an explanation or recommended steps. This should only happen in a major release (source breaking change).
191-
192-
The API can then be removed in the next major release (breaking change).
193-
194-
```mermaid
195-
stateDiagram-v2
196-
direction LR
197-
NotDeprecated: Not deprecated
198-
NotDeprecated --> Deprecated(ERROR): Major release
199-
Deprecated(ERROR) --> Removed: Major release
200-
```
201-
202189
## Experimental / internal APIs
203190

204191
Using Kotlin's (or other dependencies') experimental or internal APIs, such as the ones marked
205-
with `@ExperimentalCoroutinesApi` should be avoided as much as possible (exceptions can be made for native/JS targets
206-
only when no other option is
207-
available). Indeed, applications using a certain version of Apollo Kotlin could use a more up-to-date version of these
208-
APIs than the one used when building the library, causing crashes or other issues.
192+
with `@ExperimentalCoroutinesApi` should be avoided as much as possible.
193+
We have historically made exceptions to that rule for JS/native (`UnsafeNumber`) but no new opt-in to experimental APIs must be made.
209194

210195
We also have the `@ApolloExperimental` annotation which can be used to mark APIs as experimental, for instance when
211196
feedback is wanted from the community on new APIs. This can also be used as a warning that APIs are using experimental

0 commit comments

Comments
 (0)