-
Notifications
You must be signed in to change notification settings - Fork 3.7k
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
Integration testing between major cosmos repositories #12228
Comments
Thanks for the well written issue. I don't think it is possible to test against main/master branches because there are many breaking changes that aren't accounted for. I agree there needs to be better cross repo testing, but on released versions, once an RC is released then we can work towards aligning all repos to the same version. |
This is more to inform devs of the breakages against other major modules, not so much to enforce a lack of breakages. Right now we don't have a warning system for second order effects. |
I agree - having a more ongoing integrations tests with "ongoing" releases will help to push compatibility with latest releases. |
i think in many cases there is possibly sufficient testing against other major versions but this is not publicly documented anywhere as its done in the context of QA done by the teams before the release is put out. we've had this issue open for a while on the ibc-go repo to try to remedy this visibility problem, @crodriguezvega has kindly agreed to take it on. the ibc-go repo has also got our first e2e integration test with pinned docker versions live on the ibc-go repo as of this week basically, these are both ways that maybe we help support this versioning/visibility problem in lieu of pending work on the sdk side for these issues. |
I will also mention that |
we started doing this in the knightly repo. we hope to have something soon here |
Where is that repo? |
Hi I think it's perfectly possible that I may have stumbled into my first ADR.
I don't know the process, and I want to begin by describing a set of issues that has been very challenging for us as we develop Craft Economy. Also, since to my knowledge we used sdk 46 first, (others now do iirc) -- we had the earliest exposure to this set of issues. In fact if one used it later, its possible that you wouldn't notice nearly as much.
Problem definition
Above is an excerpt from a conversation that I had today, words are entirely mine. The core idea here is that since IBC left this repository, integration between the latest version of the cosmos SDK as expressed by the main branch, the latest version of CW, and the latest version of IBC go, is not happening. More recently, we can see that Tendermint may be involved in this complex situation. The team working on tendermint consensus has commented to me that the cosmos sdk is using old tendermint and that performance is negatively impacted by that. The sdk team is concerned about (what seem to me to be) very real issues in tm 35's peer to peer networking.
Personally I favor monorepos, and we could potentially consider that here (tm+sdk+ibc-go+cw as "the base for cosmos bockchain aplications" but I'd encourage everyone to rule that out unless all of the teams read this and suddenly think wow that's a super great idea and in that case I can help to make that happen but I am perfectly aware that we already have a pretty busy I system and I'm pretty busy repository across all four of those repositories so while I usually use monorepos to contain a single product the way that I did on craft https://github.com/notional-labs/craft let's just say that I completely understand if people would not want to do something like that because these are definitely distinct products but then those distinct products are combined to create a commonly used base.
So, here's a discussion about removing Ignite cli from the sdk-- but-- in it I'd mentioned that there were other alternatives.
See, craft led to forking the ignite cli: https://github.com/notional-labs/tinyport (note incomplete fork that doesn't yet fully express goals of fork)
The reason is that there was tremendous demand from every direction for a base recipe for a chain that included:
And... we did the work -- and reworked the work towards that goal when middleware changes landed:
CW:
ibc-go:
And Gaia's maintainer praised all this, calling it "drive by pull requests" tho I might be misinterperting a put-down for praise. And yes it's relevant here.
So OK it's a lot. Actually the reality is that's not all of it I just didn't feel like spending forever pasting links into here. So they integration work we know that it's challenging. How can we automate as much as possible of that integration work or show people where breakages are likely to occur?
Well, that's why we need a known-good template that lives in this repository, and doesn't use something like cosmoscmd to layer in harmful abstraction.
I think that we (craft) knew about the tm bug much sooner than anyone else because we took simapp and reworked it into a fully functional chain and
got it rolling
.Solutions
A few things need to happen to get ahead of integration issues.
Templating
Better than removing the ignite CLI from this repository would definitely definitely be allowing it to support multiple templates so that developers can lay out and test a completely up-to-date chain. But it really does need to eschew the
cosmoscmd
route. This template could be a part of the SDK's ci system, and PR's could be blocked if they stop the template from making a. working change so that we always have a template that to the best of everyone's knowledge is "known good at the tip of main"CI
Here I prototyped a neat test against mainnet gaia:
Here's the test itself:
It takes tm-db, replaces it with my customized branch, and then state syncs with each database supported by tm-db.
But this can be applied more widely-- in ci, we could
... and so on.
We should have a system that tells us when the mains are not compatible we are all aware that sometimes they won't be and that's not a problem. But sometimes we don't know and especially new developers don't know. That is a problem.
Also, certain ranges of versions are supposed to be mutually compatible, so with point releases, it should be possible to specify a range where it should be compatible.
big goal
I have a feeling that we wouldn't have actually gotten to this place if we were more mutually aware of one another's work. Of course the communications deluge is very hard and we are working on very interesting and special software that's attracted a lot of people and companies and projects and teams. We now have more organizations than can possibly be expected to coordinate with one another smoothly working on the software together. So my proposal here is basically to automate as much of that as possible and to make it easier for a chain to get to mainnet much newer code, or even testnets for that matter-- with much newer code so that we can find these bugs more rapidly.
The text was updated successfully, but these errors were encountered: