diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..2f7e5ba3 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,111 @@ +# 🌀 Contributing to Strudel 🌀 + +Thanks for wanting to contribute!!! There are many ways you can add value to this project + +## Communication Channels + +To get in touch with the contributors, either + +- open a [github discussion](https://github.com/tidalcycles/strudel/discussions) or +- [join the Tidal Discord Channel](https://discord.gg/remJ6gQA) and go to the #strudel channel +- Find related discussions on the [tidal club forum](https://club.tidalcycles.org/) + +## Ask a Question + +If you have any questions about strudel, make sure you've read the +[tutorial](https://strudel.tidalcycles.org/tutorial/) to find out if it answers your question. +If not, use one of the Communication Channels above! + +Don't be afraid to ask! Your question might be of great value for other people too. + +## Give Feedback + +No matter if you've used the Strudel REPL or if you are using the strudel packages, we are happy to hear some feedback. +Use one of the Communication Channels listed above and drop us a line or two! + +## Share Music + +If you made some music with strudel, you can give back some love and share what you've done! +Your creation could also be part of the random selection in the REPL if you want. +Use one of the Communication Channels listed above. + +## Improve the Tutorial + +If you find some weak spots in the [tutorial](https://strudel.tidalcycles.org/), +you are welcome to improve them by editing [this file](https://github.com/tidalcycles/strudel/blob/main/repl/src/tutorial/tutorial.mdx). +This will even work without setting up a development environment, only a github account is required. + +## Propose a Feature + +If you want a specific feature that is not part of strudel yet, feel free to use one of the communication channels above. +Maybe you even want to help with the implementation of that feature! + +## Report a Bug + +If you've found a bug, or some behaviour that does not seem right, you are welcome to file an [issue](https://github.com/tidalcycles/strudel/issues). +Please check that it has not been reported before. + +## Fix a Bug + +To fix a bug that has been reported, + +1. check that nobody else is already fixing it and respond to the issue to let people know you're on it +3. fork the repository +4. make sure you've setup the project (see below) +5. hopefully fix the bug +6. make sure the tests pass +7. send a pull request + +## Write Tests + +There are still many tests that have not been written yet! Reading and writing tests is a great opportunity to get familiar with the codebase. +You can find the tests in each package in the `test` folder. To run all tests, run `npm test` from the root folder. + +## Project Setup + +To get the project up and running for development, make sure you have installed: + +- git +- node, preferably v16 + +then, do the following: + +```sh +git clone https://github.com/tidalcycles/strudel.git && cd strudel +npm i # install at root to symlink packages +npx lerna bootstrap # install all dependencies in packages +cd repl && npm i # install repl dependencies +npm run start # start repl +``` + +Those commands might look slightly different for your OS. +Please report any problems you've had with the setup instructions! + +## Code Style + +To make sure the code changes only where it should, we are using prettier to unify the code style. +If you use VSCode, you can + +1. install [the prettier extension](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) +2. open command palette and run "Format Document With..." +3. Choose "Configure Default Formatter..." +4. Select prettier + +## Package Workflow + +The project is split into multiple [packages](https://github.com/tidalcycles/strudel/tree/main/packages) with independent versioning. +When you run `npm i` on the root folder, [npm workspaces](https://docs.npmjs.com/cli/v7/using-npm/workspaces) will symlink all packages +in the `node_modules` folder. This will allow any js file to import `@strudel.cycles/` to get the local version, +which allows developing multiple packages at the same time + +## Package Publishing + +To publish all packages that have been changed since the last release, run: + +```sh +npx lerna publish +``` + +## Have Fun + +Remember to have fun, and that this project is driven by the passion of volunteers!