Skip to content

Commit 0a16bf0

Browse files
authored
doc: skipper version promise as we did informal in the past (#2868)
Signed-off-by: Sandor Szücs <[email protected]>
1 parent c1b526a commit 0a16bf0

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

readme.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,3 +327,42 @@ Blog posts:
327327
Conference/Meetups talks
328328

329329
- [LISA 2018 - modern HTTP routing](https://www.usenix.org/conference/lisa18/presentation/szucs)
330+
331+
## Version promise
332+
333+
Skipper will update the minor version in case we have either:
334+
335+
- a significant change
336+
- a Go version requirement change (`go` directive in go.mod change)
337+
- a dependency change that adds or removes a `replace` directive in
338+
go.mod file (requires library users to add or remove the same
339+
directive in their go.mod file)
340+
- a change that require attention to users, for example Kubernetes
341+
RBAC changes required to deploy
342+
https://github.com/zalando/skipper/releases/tag/v0.18.0
343+
- a feature removal like Kubernetes ingress v1beta1
344+
https://github.com/zalando/skipper/releases/tag/v0.15.0
345+
- an API change of a function that is marked *experimental* [example](https://github.com/zalando/skipper/blob/e8c099f1740e3d85be0784d449b1177a48247813/io/read_stream.go#L209)
346+
347+
We expect that skipper library users will use
348+
`skipper.Run(skipper.Options{})` as main interface that we do not want
349+
to break. Besides the Kubernetes v1beta1 removal there was never a
350+
change that removed an option. We also do not want to break generic
351+
useful packages like `net`. Sometimes we mark library functions, that
352+
we expect to be useful as *experimental*, because we want to try and
353+
learn over time if this is a good API decision or if this limits us.
354+
355+
This promise we hold considering the main, filter, predicate,
356+
dataclient, eskip interfaces and generic packages. For other packages,
357+
we have more weak promise with backwards compatibility as these are
358+
more internal packages. We try to omit breaking changes also in
359+
internal packages. If this would mean too much work or impossible
360+
to build new functionality as we would like, we will do a breaking
361+
change considering strictly semantic versioning rules.
362+
363+
### How to update
364+
365+
Every update that changes the minor version (the `m` in `v0.m.p`),
366+
should be done by `+1` only. So `v0.N.x` to `v0.N+1.y` and you should
367+
read `v0.N+1.0` release page to see what can break and what you have
368+
to do in order to have no issues while updating.

0 commit comments

Comments
 (0)