Skip to content
This repository was archived by the owner on Feb 8, 2023. It is now read-only.
This repository was archived by the owner on Feb 8, 2023. It is now read-only.

Towards Sustainable Modules 📦 #273

Closed
@daviddias

Description

@daviddias

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):

  • Always at 100% Code Coverage - This way, any future contributor will be confident that their change won't affect other parts of the same module
  • Semantic Release through a service such as http://semantic-release.org
  • Auto generated API documentation
  • Code Linting checks
  • Code Quality checks
  • OSS Hygiene (make sure that commits are signed)
  • Changelogs
  • Commit linting
  • Parallel CI - Instead of having huge batch of tests testing every runtime and configuration, we should have multiple CI configs to test the runtimes individually so that those tests can run in parallel
  • Every module should have a Lead Maintainer and a Co-Lead Maintainer. Any of the Co-Leads should be comfortable to take any patch and minor upgrades, major should require vetting of both. This also facilitates transition.
  • Use Github's branch protection to avoid any fast or unchecked contributions
  • Reproducible Builds (for JS, reproducible Browser Builds)
  • Moaar

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions