🎉 Before anything, thanks for taking the time to contribute! We really appreciate it! We welcome contributions in all forms - either from opening issues or pull requests, no matter how small (even if it's just fixing a typo!). So, thanks! 🙌💕
This document should help you set up your environment for any local development and hopefully help you pick something to work on.
You might notice our friendly neighbourhood CLA-bot commenting on a pull request you
open if you haven't yet signed our CLA. We use the same CLA for all open-source
Google projects, so you only have to sign it once. Once you complete the CLA,
all your pull-requests will automatically get the cla: yes
tag.
If you've already signed a CLA but still getting nags from the bot, it's possible you signed it under a different username/email address. Check the information on your CLA or see this help article on setting the email on your git commits.
We use VSCode for development, which should automatically make the linter and
the formatter work for you. In order for this to work correctly, you have to
use a single-root workspace, and open the magenta/music
folder in it. Your
workspace should look something like this:
Once you run yarn install
, this will install the clang-format
executable
in your npm_modules
folder, and VSCode will use this to automatically format
your files after every save. All of the rules that VSCode are using are in the
.vscode
package of the workspace (the path is magenta-js/music/.vscode
)
Some, but not all of our code has tests. This is partly because a lot of
the code is hard to test (audio players, note sequence visualizers, loading large
models which would slow down testing), and partly because we missed some tests.
If you find any code in code that looks like would benefit from some tests,
feel free to add some! To run the tests, run yarn test
.
We try to add demos for most of the functionality in the library, so if
you're adding some new functionality, please also add a demo! To run the demos,
run yarn run-demos
. This is a live-reload webpack server, that will rebuild
on any changes (both to the demos and the library itself).
We've been trying to add useful labels to all of our issues. Here's the ones that are the most in use:
- good-first-issue -- these are documentation fixes, or small bugs that don't require you to be intimately familar with magenta or our code
- help-wanted -- these are issues that we generally don't know how to fix (either because we can't repro, or because they're using a library/framework we're not familiar with). If you understand what's going on in there, we'd love the help!
- bug -- these are straight up problems in our code that should eventually be fixed.
Hope this helps! If you run into questions setting up your developing environment, just open an issue and mention either @adarob or @notwaldorf, and we'll try to get you sorted!