[RFC] How should we handle backwards compatible schema changes? #60
Replies: 7 comments 5 replies
-
(I'll post a few top-level comments to split up discussion chains) In a general context, I think there's some value to gain from defining what constitutes the actual api surface that the schema represents, as with a concrete definition of that, it'll be easier to make decisions on what is/isn't breaking (or is acceptably-breaking). For the sake of other comments I'll be posting, I'm operating on the assumption that the API surface is the shape of the structs defined by the schema - i.e. for the (fabricated) example schema: name: Action
displayField: Name
fields:
- name: Name
- name: UnlockLink
type: link
targets: [Foo, Bar]
- name: Unknown1 I'd consider the following to be API surface:
interested in thoughts on that front. |
Beta Was this translation helpful? Give feedback.
-
Within BM consumption; technically any change at any time is A-OK by me - BM can use arbitrary git refs, so consumers pinning schema (which they should be (glares at some consumers)) are unaffected by exds upstream changes. For a typical-consumer that is using a snapshot of the schema, I'd say
|
Beta Was this translation helpful? Give feedback.
-
Being unable to rename named fields - and with note from the other comment chain, I feel this potentially extends to As you note, there's PRs that need to be held off for renames, and such - which feeds into
with ACK that this is additional work - and hence possibly something to look into on the long term rather than expressly for 7.2, being able to eagerly merge new names under a new key during a patch cycle i feel would help reduce both of the above. i.e. - name: Recast100ms
+ pendingNames:
+ - BetterName
+ - MuchBetterName would produce an unchanged struct Action {
#[deprecated] Recast100ms: u64,
#[deprecated] BetterName: u64,
MuchBetterName: u64
} Come a patch window, promoting the most recent name to |
Beta Was this translation helpful? Give feedback.
-
I'm currently considering the following in non-breaking changes:
Additionally, I'm considering adding the following to the .yml schema:
My current questions:
Let me know if I missed anything. I'll make another comment below to discuss how I plan to handle actually going through with applying breaking changes. |
Beta Was this translation helpful? Give feedback.
-
To recap how the repository layout will look after I go through with these changes:Branches:
File Layout:
Question: Should contributors send PRs to main (and then let CI/CI take those changes and upstream them to the other branches) or should it be the other way?Handling Breaking ChangesEvery month (every other month?), I'll manually fire off a github workflow to apply the following changes on all versions and branches:
Question: How often should this breaking change happen? It'll always be possible to pin to a specific git commit, so I don't think it's a bad idea to make it every month.CI/CD ToolingI'm currently building the following tooling to reduce as much manual labor and possible mistakes:
|
Beta Was this translation helpful? Give feedback.
-
Here's what the repository layout will look like upon the release of 7.2: Checklist of things before I'm ready for 7.2:
TODO for 7.3:
|
Beta Was this translation helpful? Give feedback.
-
Closing this in favor of #93. Breaking changes may not be necessary anymore (?) |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
My current plan is the following:
Unknown{some monotonically strictly increasing number}
.If anyone has any suggestions or comments about this plan, please let me know. As soon as we reach a consensus here (I'll set the hard time limit to a week prior to 7.2), I'll start merging PRs.
Beta Was this translation helpful? Give feedback.
All reactions