-
-
Notifications
You must be signed in to change notification settings - Fork 21.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use godot-cpp 4.1 for the "Godot CPP" CI workflow to prevent circular dependency #81238
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will work because of forward compatibility of the extension API, right? Makes sense to me.
Yep! Since |
I think that's an OK compromise for now. The main question is: What do we want from the godot-cpp CI workflow on this repo? The step was added in #54015 by @BastiaanOlij, with the aim to ensure that changes in upstream Godot do not break godot-cpp (and other extensions, at least as far as godot-cpp covers the extension API). But it's been mostly a hassle due to intentional breaking changes that had to be made in both repos. What do we test by using the Edit: Re-read the OP and I understand better, currently we get breakage when changing structs which are new in 4.2, but already used in godot-cpp |
Thanks! |
Yeah, that's a really good question!
We're testing that the older compatibility bits in We miss out on testing that changes to newer structs/functions don't break something, but that's impossible to distinguish from when we're changing those structs/functions on purpose. (Which is essentially the problem we're running into.)
No, we shouldn't, because we also try to ensure that The big difference here is that godot-cpp's 4.1 branch won't use any of the new stuff that was added to Once Godot 4.2 is released, though, we should definitely switch to testing the |
And if we do decide that, won't it be a problem? We wouldn't be able to change 4.1/4.n-1 godot-cpp to allow those breaking changes, only 4.n would be compatible. Thus the CI would fail. |
I'm hoping we'll never break source compatibility again until Godot 5, but, yes, if we do decide to break source compatibility then it would be a problem. |
At the moment, we have an issue where any PR that updates any of the new structs added to
gdextension_interface.h
will fail CI on the "Godot CPP" workflow.This is because godot-cpp on its
master
branch has already been updated to use the new structs, and so if we change them, we end up with a circular dependency: Godot's CI won't pass without an updated godot-cpp, and godot-cpp's CI won't pass without an updated Godot.Once Godot 4.2 is release, we won't change these structs any more -- we'll have to start worrying about backward compatibility, and so even newer structs would need to be added in order to make changes. However, until then, we can update these structs - if it weren't for this CI issue :-)
There's a couple of options:
master
branch doesn't update to use the new structs until after Godot 4.2 is released. I'm not crazy about this option, though, because we need time to work on the companion Godot 4.2 changes, and I don't want to have to save those PR's until Godot 4.2's release.But I'd like feedback on what other folks think is the best option, or if there's an option that I didn't consider!