* Restrict to `kubernetes<10.0.0` to keep Kopf runnable at all.
See: 134 and kubernetes-client/python866
* Performance improvements when handling hundreds of resources. 109
* Internal (non-public) packages restructured — to deal with the growing complexity. 124
* `kopf.engines` extracted from `kopf.reactor` (peering & posting & logging).
* `kopf.utilities` extracted from `kopf.reactor` (reacting to k8s changes).
* `kopf.clients` is the new `kopf.k8s` (renamed).
* `kopf.clients.auth` extracted from `kopf.config` (only auth-related routines).
* `kopf.config` got the configuration constants from all over the code.
* New configuration added:
* Configurable timeouts and thread pool sizes.
* Configurable level of k8s-events posted; others are skipped.
* Everything has been made asynchronous:
* All internal K8s API wrappers/adapters are made async.
* All blocking operations (incl. API requests) moved to thread pools.
* All k8s-event posting is done via a queue with a background posting task. 125
* Resource "resuming" handlers `kopf.on.resume` for threads/tasks. 105
* Tests and docs for RBAC status codes for peering. 95
* Handlers are de-duplicated if registered twice and both do match the event/cause. 105
* The initial listing of objects is done separately from watching the objects, and is fed into the reactor differently (not `event['type']=="ADDED"`, but `event['type']==None`). The watching continues from the resource-version of the list, as it must be by design. 105
* Silent spy-handlers `kopf.on.event` (currently only for custom resources). 86
* Labels can now be added recursively (e.g. to pod templates within jobs/deployments). 108
* Diffs are logged on update events. 104
* Handling is skipped if there are no handlers for the event/cause (and produces no fake logs/statuses). 103
* Maintenance docs, RBAC fixes in the docs, typos fixed. 83 89 102
* Few more tests. 90 91
*The release is done as a rollback point from 0.16 if the resume-handlers introduce breaking changes (they shouldn't).*
* K8s events are now optional, if posting fails, the operator continues. 88
* K8s events' messages are now cut to 1024 chars to prevent failures. 88
* Internal refactoring of the `kopf.on.field()` handler. 69
* Internal refactoring of the cause detection & event handling. 82
* Events are posted using `v1` instead of `v1beta1` API, making it compatible with Google Kubernetes Engine >=1.12. 81
* Internal refactoring on the module imports & Kubernetes client calls. 78 71
* Basic tools for testing of the Kopf-based operators (background operator runner).
* `namespace`, `name`, `uid` kwargs for the handlers (were mentioned in the docs, absent in the code).
* Tests, tests, tests for the existing codebase (asyncio queueing).
* End-to-end tests with Minikube with real Kubernetes versions.
* Some little fixes detected during test writing.
* Contribution docs.
* Legacy `KopfPeering` (cluster-scoped) is now `ClusterKopfPeering`.
* Current `KopfPeering` is made namespaced.
* Code is updated to support the previous cluster config smoothly (until 1.0).
* CRD re-creation is recommended (see docs for peering).
* Tests, tests, tests for the existing codebase.
* RBAC docs fixed for the real demo examples.
* Watching-streaming logic refactored for testability, but keeps the functionality.
* `metadata.generation` does not trigger the update handlers in Minikube anymore.
* Follow the Kubernetes "eventual consistency" principle and react only to the latest events, ignore the past replayed events 43 42
* Tests for the diff calculations 40 48
* Better PyPI's README page 41
* Peering mode auto-detection by default, falling back to standalone if not configured. 33 38
Initial import of the squashed repository.