dependencies
Currently we don't have any, and we might never add some to avoid all the pain that would bring, so I'll leave them out of the current discussion.
devDependencies
These should be always updatable and we should be able to fully automate this.
peerDependencies
We currently rely on aws-cdk-lib and constructs and most likely will forever. So for any discussion on this topic, we can always concretely think about these two. There was also already a discussion on this in #12
We have mainly two competing interests:
- We want to update these dependencies as often as possible to be able to use the newest available features and avoid unnecessary complexity
- We want to update these dependencies as rarely as possible to allow our dpendents to keep using the newest version of our library without having to update any of our peerDependencies
Overall, any kind of change can be a breaking change to someone, so for me how we handle this isn't only about versioning, but about what we communicate about our versioning.
So far, I roughly see the following options
- Don't upgrade. This is out I would say as we need access to L1 updates to be able to write L2s.
- Manually investigate for each version change of a dependency the chances of this breaking things for users, and choose our version appropriately. This basically means doing the version policy work for the aws-cdk team and from my point of view also is out due to the high effort.
- Mark each peerDependency upgrade as a breaking change, but still update regularly. This would lead to high version numbers (which I personally don't mind but can create a weird impression with users who are used to the versioning scheme of aws-cdk-lib), and it could make it hard for users to identify actually really breaking changes.
- Follow the same version scheme as aws-cdk-lib and constructs: If they consider a change a minor change, we also include it as a minor change, etc. - this is my personal favorite, as the aws-cdk team so far was very mindful about breaking changes outside of alpha-modules, and I don't see a high risk of someone needing to upgrade the dependency on our lib without being able to upgrade their dependency on aws-cdk-lib and constructs as well.
- Start with a version range that indicates less stability first (e.g. 0.x.x) and communicate that these might have breaking changes all the time, and progress to another versioning policy once we have learnt more about the library, and so many people depend on it that the versioning policy actually starts to matter.
- Don't care about changes coming from version updates and add them without affecting the version of our library. I think that this might also work in our case as the aws-cdk is very cautious about breaking changes on their side.
Regardless of the version policy we decide for, I would be in favour of documenting it in the readme so that our users are aware of it.
dependencies
Currently we don't have any, and we might never add some to avoid all the pain that would bring, so I'll leave them out of the current discussion.
devDependencies
These should be always updatable and we should be able to fully automate this.
peerDependencies
We currently rely on
aws-cdk-libandconstructsand most likely will forever. So for any discussion on this topic, we can always concretely think about these two. There was also already a discussion on this in #12We have mainly two competing interests:
Overall, any kind of change can be a breaking change to someone, so for me how we handle this isn't only about versioning, but about what we communicate about our versioning.
So far, I roughly see the following options
Regardless of the version policy we decide for, I would be in favour of documenting it in the readme so that our users are aware of it.