-
Notifications
You must be signed in to change notification settings - Fork 75
Investigate using tooling to prevent compatibility breakages #39
Comments
I think it's simpler than that. Just having a CI build on https://github.com/libp2p/workspace-go-libp2p that:
|
That wouldn't prevent breakages on interfaces that are only used by external applications. |
Don't we exercise those in tests? Wouldn't those break there? |
Another example: |
@Kubuxu Yeah, indeed we do have two surfaces for breakage.
I think what would've helped in #23 #37 #38 libp2p/go-libp2p#678 is continuous master integration in workspace-go-libp2p. gocompat is a nice addition, but we have a more fundamental flaw in our software engineering here. I'd also like to point out much of the grief we're experiencing is due to the multirepo approach to modularity via code segregation. 💣 |
My point is to have the tooling to detect and know that there is a breaking change. I'm not proposing policy about these changes. I've created #40 the PR contains an example of breaking change in a separate commit, to showcase what tooling gives us. This is entirely off topic:
I disagree with it very strongly. It shows us, there is a considerable cost of having an unstable API. |
I'm also not dismissing a need for org-wide CI, but in my opinion, that effort is orthogonal to this one. |
In my opinion, the reason for these breaking changes was because people creating them and people accepting them weren't reviewing them for that scope. |
There exist tooling that will detect compatibility breaking changes. It would alert us in cases like recently when a new version of insecure transport or addition of event bus broke the compatibility.
One of the tools is https://github.com/smola/gocompat
The idea would be to run it in CI for every PR and compare the compatibility with the latest release/master.
Regarding compatibility: https://blog.merovius.de/2015/07/29/backwards-compatibility-in-go.html is worth a read.
Would help in cases like #23 #37 #38 libp2p/go-libp2p#678
The text was updated successfully, but these errors were encountered: