Skip to content
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鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merging repos into ipfs/js-ipfs #2877

Open
achingbrain opened this issue Mar 10, 2020 · 1 comment
Open

Merging repos into ipfs/js-ipfs #2877

achingbrain opened this issue Mar 10, 2020 · 1 comment

Comments

@achingbrain
Copy link
Member

@achingbrain achingbrain commented Mar 10, 2020

馃摝馃摝馃摝 So many modules

Something we've noticed over time is that in order to make any given change to js-IPFS, several repositories must be changed. At the very least to add a new feature, the core needs the implementation, it needs to be exposed in the HTTP API client and tests need to be written in the interface repo. Then assuming you've covered all the test cases and not caused any new bugs the whole lot need to be released together.

Some modules have been split out of other modules because they contain code shared between the core and the HTTP API client. For historical reasons other modules are only used in core, yet sit outside of core.

Our external contributors and feedback from people new to the ecosystem also tells us that contributing to IPFS is not as easy as it could be due to the depth and breadth of the modules in use - it takes a very long time to understand how everything fits together and where to make a given change.

Tests for a given feature do not always reside near the implementation of that feature so it's not always obvious to first time or new contributors what piece of work needs to be done to land a given feature.

Another problem is that a breaking change released in one repo can block releases of other features if, for example, it's discovered that the change needs more work than was originally thought (we're only human after all).

馃挄 What are we doing about it?

To alleviate some of this pain, we're trialling a lerna-style monorepo, similar to the babel project and others.

This will let us accept one PR that changes the most commonly changed repos, making it easier to make a change, but also to understand the scope of that change. In the worst case reverting changes becomes easier.

The first set of modules to be merged are ipfs/js-ipfs-http-client and ipfs/interface-js-ipfs-core because you typically can't change one without changing the others.

ipfs/js-ipfs-mfs has also been merged in as it's only used by js-ipfs, as have ipfs/js-ipfs-multipart and ipfs/js-ipfs-utils as they only really exist to share code between ipfs, ipfs-http-client and ipfs-mfs. Other modules may follow, but these are the starting set.

All repos that are being merged into this one are gradually having their code, issues and PRs transferred across before being archived. There are lots and lots of these, so it's taking time. Please be patient!

If you spot issues, outdated READMEs, things or directory structures that just don't make sense - PRs are very much appreciated.

馃巵 Bonus

We're now using lerna's canary feature to publish release candidates of every successful build of master. Just do npm install ipfs@next to get the very freshest, most bleedingest edge ipfs.

Refs:

Status

  • Merge ipfs-http-client into js-ipfs repo
    • src
    • tests
    • issues
    • PRs
  • Merge interface-ipfs-core src & tests into js-ipfs repo
    • src
    • tests
    • issues
    • PRs
  • Merge ipfs-mfs src & tests into js-ipfs repo
    • src
    • tests
    • issues
    • PRs
  • Merge ipfs-multipart src & tests into js-ipfs repo
    • src
    • tests
    • issues
    • PRs
  • Merge ipfs-utils src & tests into js-ipfs repo
    • src
    • tests
    • issues
    • PRs
  • Merge mfs into ipfs #2811
  • Merge ipfs-multipart into ipfs
  • Split core out of ipfs
  • Split CLI out of ipfs #2678
  • Split HTTP API out of ipfs #2678
  • Make ipfs an aggregator for core, CLI & HTTP
  • Split READMEs up into /docs to make them more digestible (see https://github.com/libp2p/js-libp2p for an example of this done well)
  • Write a blog post
@whyrusleeping

This comment has been minimized.

Copy link
Member

@whyrusleeping whyrusleeping commented Mar 10, 2020

Interesting.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants
You can鈥檛 perform that action at this time.