Closed Fernthedev closed 9 months ago
Decided to use a versioning setup similar to Cargo's editions.
This requires that version guarantees are enforced by the schema. In particular, that no breaking schema changes are made to the qpm.json/qpm.shared.json formats unless a version that would otherwise not match is used. Ex, minimum version of 1.0 should not allow 2.0 features if and only if 2.0 is considered a breaking version increment.
Also worth mentioning that the approach of being backwards compatible means that more and more checks are required both for consumers and producers of the tools to verify version validity. Ex, when version 2.0 exists, qpm must support both 1.0 and 2.0 for emits, consumers can decide whether to make a breaking schema requirement change or not (ex, QP only allows 2.0 or better, for example) but the "or better" means that the minimum version must be truly respected and linted against.
Overall is a good approach imo, just wanted to enumerate some thoughts here.
Also worth mentioning that the approach of being backwards compatible means that more and more checks are required both for consumers and producers of the tools to verify version validity. Ex, when version 2.0 exists, qpm must support both 1.0 and 2.0 for emits, consumers can decide whether to make a breaking schema requirement change or not (ex, QP only allows 2.0 or better, for example) but the "or better" means that the minimum version must be truly respected and linted against.
Yep, that's why I largely avoided it until now. I enjoyed the fast paced break stuff but people seem less than happy about it so I suppose I'll do something to reduce that. I think I'll just add new branches for 2.0 logic and completely leave 1.0 logic untouched for example, even if it has bugs or issues. Maybe not. We'll see if we can pull this off
Specify in
qpm.json
the QPM minimum version required, and doing so enabling feature flags similar to CMake.This would allow breaking changes seamlessly but at the cost of complexity in use cases and backwards compatibility support.