-
Notifications
You must be signed in to change notification settings - Fork 30
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
Towards Sustainable Modules 📦 #273
Comments
@diasdavid Certainly what would be helpful is to start with a code orientation and documentation of the role that each module does in the bigger picture. It took me a couple of weeks to walk thru the code and understand what certain modules does, such as libp2p, blockservice, blockstore, keystore and what each of them do. |
I would also add a bullet point for a test inventory here. We're getting to a point where we have modules with hundreds (thousands?) of tests. Some of those tests are intentionally skipped, some are skipped depending on environment - this makes it hard to track and detect which tests should be executed and which are intentionally skipped for a particular run. Having an inventory and automatic enforcement through AEgir should help preventing tests from being skipped inadvertently and also give us a central place to keep track of our test suits. Ideally, we shouldn't skip any tests, but in practice it's really hard to attain, specially when you have a big and complex codebase with many interdependent modules that might be at different levels of maturity and targeting various environments. I'm not %100 sure that this is the correct way of tackling this issue, and if there are better ways - ie, bite the bullet and have %100 coverage across the board, I'd love to hear about them. Anyways, great to see this issue! |
👍 Actually we can shoot for something even better, especially for building blocks libraries: 100% mutation coverage
Mmh skeptical of using an external service. How trustworthy are they? How good is their security game? Who's their hoster? Ideally we can do this through our CI on a trusted worker machine.
The docs portal will take care of it for both go and js, including search :D ipfs-inactive/docs#43
Nah let's not -- we regularly do things that cause commit signatures to get lost: rebase, squash, subtree-merge. We should sign tags though, and make it part of release automation (aegir/gx).
This is tracked in ipfs-inactive/docs#26 To all other points mentioned I just give a simple thumbs up 👍 :) |
Introduction material and a developer "quickstart" would be great to have, especially since the ecosystem of different modules are already so vast.
Yes please, testing has to be improved. Not more tests, but better tests and a proper separation between integration and unit tests. Also having standard test utils for reuse between different tests are a need. I'll do a write-up together with this quarters OKR on how we can improve testing in general.
Semantic-release is not a external service but rather a tool that automates package releasing. From their website:
Would remove some maintenance burden from aegir. |
OK, here’s a hopefully clearer writeup of the above: in yesterday’s deep dive session, @mikeal, @victorbjelkholm, and I walked through and discussed the main points and suggestions from the original post here. The conversation was largely JS-centric, but there are definitely several items that are generalizable across all of IPFS. These are items that we felt were reasonably actionable:
|
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
As it is known by everyone that has been using or contributing to the IPFS project, the number of modules (aka packages) has been increasing significantly and we expect to see it growing given the modular plug and play design that IPFS, libp2p and IPLD have.
Having code organized in modules with clear designed interfaces is one of the key design features that enables IPFS to be so adaptable and it also enables everyone to contribute to different parts of the system without having to understand it all (climb the the whole abstraction mountain).
Now we are starting to see some challenges that result with this approach that are making hard the life of the maintainers and users that want to track some threads of development that span over multiple modules. It is becoming very expensive to maintain a module as it requires of lot of human review and context present and also documentation is scattered and not easy searchable.
Towards solving this, I want to explore, gather and propose ways in which we focus on enabling more developers to make better choices when pushing contributions, that lead maintainers are less required to review PRs until it is absolutely necessary.
The goal is to strive for a golden standard for how modules are set up and maintained, focused on letting more people contribute and take ownership and reducing the the time between initial contribution to shipping. In the end, this would be part of the InterPlanetary Community Contributing Guidelines.
Here are some of the things that I've been thinking (some might be focused on JS land):
Next steps
We need to gather more shortcomings and pain-points that we can provide remedies for, while at the same time learning from other projects and understand what we can incorporate to IPFS. I invite everyone to share their experience and research in this issue.
The next step after that is to start (or reboot) the InterPlanetary Contributing Guidelines by converting the existing ones (https://github.com/ipfs/community/blob/master/contributing.md, https://github.com/ipfs/community/blob/master/contribution-guidelines.md, https://github.com/ipfs/community/blob/master/docs-styleguide.md, https://github.com/ipfs/community/blob/master/go-contribution-guidelines.md and https://github.com/ipfs/community/blob/master/js-project-guidelines.md) into a Gitbook (or alike) format so that all of these can live in one place. Once we have a place to store this information, we can then start applying these best practices across the module base.
References and sources of Inspiration
The text was updated successfully, but these errors were encountered: