UNPKG

12.4 kBMarkdownView Raw
1# Contributing to `styled-components`
2
3As the creators and maintainers of this project, we want to ensure that `styled-components` lives and continues to grow and evolve. The evolution of the library should never be blocked by any single person's time. One of the simplest ways of doing this is by encouraging a larger set of shallow contributors. Through this, we hope to mitigate the problems of a project that needs updates but there's no-one who has the power to do so.
4
5## Ownership
6
7**If your Pull Request is merged, regardless of content, you're eligible for push access to the organization on GitHub.** This is checked for on pull request merges and an invite is sent automatically. (thanks to an [Aeryn instance](https://github.com/Moya/Aeryn/) that [@mxstbr](https://github.com/mxstbr) runs)
8
9Offhand, it's easy to imagine that this would make code quality suffer, but in reality it offers fresh perspectives to the codebase and encourages ownership from people who are depending on the project. If you are building a project that relies on this codebase, then you probably have the skills to improve it and offer valuable feedback.
10
11Everyone comes in with their own perspective on what a project could/should look like, and encouraging discussion can help expose good ideas sooner.
12
13### Why do we give push access?
14
15It can be overwhelming to be offered the chance to wipe the source code for a project. Don't worry, we don't let you push to master. All code has to be reviewed by at least two contributors or one core team member, and we have the convention that someone other than the submitter has to merge non-trivial pull requests.
16
17**As an organization contributor, you can merge other people's pull requests, or other contributors can merge yours.** You likely won't be assigned a pull request, but you're welcome to jump in and take a code review on topics that interest you.
18
19This project is not continuously deployed, there is space for debate after review too. This means there's always a chance to revert, or to make an amending pull request. If it feels right, merge.
20
21### How can we help you get comfortable contributing?
22
23It's normal for a first pull request to be a potential fix for a problem, and moving on from there to helping the project's direction can be difficult. We try to help contributors cross that barrier by offering good first step issues. These issues can be fixed without feeling like you're stepping on toes. Ideally, these are non-critical issues that are well defined. They will be purposely avoided by mature contributors to the project, to make space for others.
24
25We aim to keep all technical discussions inside GitHub issues, and all other discussions in our [Spectrum community](https://spectrum.chat/styled-components). This is to make sure valuable discussions are public and discoverable via search engines. If you have questions about a specific PR, want to discuss a new API idea etc GitHub issues are the right place. If you have questions about how to use the library, or how the project is running - the [Spectrum community](https://spectrum.chat/styled-components) is the place to go.
26
27### Our expectations on you as a contributor
28
29To quote [@alloy](https://github.com/alloy) from [this issue](https://github.com/Moya/Moya/issues/135):
30
31> Don't ever feel bad for not contributing to open source.
32
33We want contributors to provide ideas, keep the ship shipping and to take some of the load from others. It is non-obligatory; we’re here to get things done in an enjoyable way. :trophy:
34
35The fact that you'll have push access will allow you to:
36
37* Avoid having to fork the project if you want to submit other pull requests as you'll be able to create branches directly on the project.
38* Help triage issues, merge pull requests.
39* Pick up the project if other maintainers move their focus elsewhere.
40
41It's up to you to use those superpowers or not though 😉
42
43If someone submits a pull request that's not perfect, and you are reviewing, it's better to think about the PR's motivation rather than the specific implementation. Having braces on the wrong line should not be a blocker. Though we do want to keep test coverage high, we will work with you to figure that out together.
44
45### What about if you have problems that cannot be discussed in a public issue?
46
47[Max Stoiber](https://twitter.com/mxstbr) and [Phil Pluckthun](https://twitter.com/_philpl) (Twitter links) have contactable emails on their GitHub profiles, and are happy to talk about any problems via those or via Twitter DMs.
48
49### Code of Conduct
50
51It's also important to note that all repositories under the `styled-components` banner have a [Code of Conduct](./CODE_OF_CONDUCT.md). It is important that you review and enforce this CoC should any violations happen.
52
53## Code contributions
54
55Here is a quick guide to doing code contributions to the library.
56
571. Find some issue you're interested in, or a feature that you'd like to tackle.
58 Also make sure that no one else is already working on it. We don't want you to be
59 disappointed.
60
612. Fork, then clone: `git clone https://github.com/YOUR_USERNAME/styled-components.git`
62
633. Create a branch with a meaningful name for the issue: `git checkout -b fix-something`
64
654. Make your changes and commit: `git add` and `git commit`
66
675. Make sure that the tests still pass: `npm test` and `npm run flow` (for the type checks)
68
696. Push your branch: `git push -u origin your-branch-name`
70
717. Submit a pull request to the upstream styled-components repository.
72
738. Choose a descriptive title and describe your changes briefly.
74
759. Wait for a maintainer to review your PR, make changes if it's being recommended, and get it merged.
76
7710. Perform a celebratory dance! :dancer:
78
79### How do I set up the project?
80
81Run [`yarn install`](https://yarnpkg.com/) and edit code in the `src/` folder. It's luckily very simple! :wink:
82
83### How do I verify and test my changes?
84
85To make development process easier we provide a Sandbox React application in this repo which automatically uses your local version of the `styled-components` library. That means when you make any changes in the `src/` folder they'll show up automatically there!
86
87To use the sandbox, follow these steps:
88
891. Go to sandbox folder: `cd sandbox`
90
912. Install all the dependencies: `yarn install` or `npm install`
92
933. Run `yarn start` or `npm start` to start sandbox server
94
95Now you should have the sandbox running on `localhost:3000`. The Sandbox supports client-side and server-side rendering.
96
97You can use an interactive editor, powered by [`react-live`](https://react-live.philpl.com/), to test your changes. But if you want more control, you can edit the sandbox itself too:
98
99* Root `<App>` component is located at `styled-components/sandbox/src/App.js` file
100
101* Client-side entry point is at `styled-components/sandbox/src/browser.js`
102
103* Server-side entry point is at `styled-components/sandbox/src/server.js`
104
105In the sandbox source, `styled-components` is an alias to `styled-components/src` folder, so you can edit the source directly and dev-server will handle rebuilding the source and livereloading your sandbox after the build is done.
106
107When you commit our pre-commit hook will run, which executes `lint-staged`. It will run the linter automatically and warn you if the code you've written doesn't comply with our code style guidelines.
108
109### How do I run the benchmarks?
110
111We have three different benchmarks: mounting a deep tree, mounting a wide tree and updating dynamic styles. Shoutout to [@necolas](https://github.com/necolas), who wrote these for `react-native-web` and whom we stole these benchmarks from.
112
113To run the benchmarks run:
114
115```sh
116yarn run benchmarks
117```
118
119You can also get traces that you can look at in the Chrome DevTools "Performance" panel by running
120
121```sh
122yarn run benchmarks --tracing
123```
124
125### How do I fix my pre-commit hook?
126
127We've recently migrated from `pre-commit` to `husky`, so if you're running into issues during this migration, you'll likely have to do the following:
128
129```sh
130rm .git/hooks/pre-commit*
131node ./node_modules/husky/bin/install.js
132```
133
134This will delete the old `pre-commit` git hook and install husky's one.
135Without the proper uninstallation script of the `pre-commit` package, this is necessary because `husky` will skip its installation when
136a git hook is already present.
137
138## Release process
139
140[Core team members](./CORE_TEAM.md) have the responsibility of pushing new releases to npm. The release process is as follows:
141
1421. Install `np` by Sindre Sorhus with `npm i -g np`. (note: you only have to do this once) `np` makes sure that everything is correct and runs tests and a build before it releases the new version for you.
1432. Make sure you have the latest changes and are on the master branch: `git checkout master && git pull origin master`
1443. Create a new branch based on the version number, for example `git checkout -b 3.4.1`
1454. Update the [CHANGELOG.md](./CHANGELOG.md) with the new version number, add a new Unreleased section at the top and edit the links at the bottom so everything is linked correctly
1465. Commit the Changelog changes with `git commit -m 'Update CHANGELOG'`
1476. Push the branch to the repo with `git push -u origin <branchname>`
1487. Run `np --any-branch` and follow its instructions
1498. Congratulations, you just published a new release of `styled-components`! :tada: Let everybody know on Twitter, in our community and all the other places
150
151## Credits
152
153These contribution guidelines are based on https://github.com/moya/contributors, big thanks to @alloy, @orta et al. for the inspiration and guidance.
154
155
156## Financial contributions
157
158We also welcome financial contributions in full transparency on our [open collective](https://opencollective.com/styled-components).
159Anyone can file an expense. If the expense makes sense for the development of the community, it will be "merged" in the ledger of our open collective by the core contributors and the person who filed the expense will be reimbursed.
160
161
162## Credits
163
164
165### Contributors
166
167Thank you to all the people who have already contributed to styled-components!
168<a href="graphs/contributors"><img src="https://opencollective.com/styled-components/contributors.svg?width=890" /></a>
169
170
171### Backers
172
173Thank you to all our backers! [[Become a backer](https://opencollective.com/styled-components#backer)]
174
175<a href="https://opencollective.com/styled-components#backers" target="_blank"><img src="https://opencollective.com/styled-components/backers.svg?width=890"></a>
176
177
178### Sponsors
179
180Thank you to all our sponsors! (please ask your company to also support this open source project by [becoming a sponsor](https://opencollective.com/styled-components#sponsor))
181
182<a href="https://opencollective.com/styled-components/sponsor/0/website" target="_blank"><img src="https://opencollective.com/styled-components/sponsor/0/avatar.svg"></a>
183<a href="https://opencollective.com/styled-components/sponsor/1/website" target="_blank"><img src="https://opencollective.com/styled-components/sponsor/1/avatar.svg"></a>
184<a href="https://opencollective.com/styled-components/sponsor/2/website" target="_blank"><img src="https://opencollective.com/styled-components/sponsor/2/avatar.svg"></a>
185<a href="https://opencollective.com/styled-components/sponsor/3/website" target="_blank"><img src="https://opencollective.com/styled-components/sponsor/3/avatar.svg"></a>
186<a href="https://opencollective.com/styled-components/sponsor/4/website" target="_blank"><img src="https://opencollective.com/styled-components/sponsor/4/avatar.svg"></a>
187<a href="https://opencollective.com/styled-components/sponsor/5/website" target="_blank"><img src="https://opencollective.com/styled-components/sponsor/5/avatar.svg"></a>
188<a href="https://opencollective.com/styled-components/sponsor/6/website" target="_blank"><img src="https://opencollective.com/styled-components/sponsor/6/avatar.svg"></a>
189<a href="https://opencollective.com/styled-components/sponsor/7/website" target="_blank"><img src="https://opencollective.com/styled-components/sponsor/7/avatar.svg"></a>
190<a href="https://opencollective.com/styled-components/sponsor/8/website" target="_blank"><img src="https://opencollective.com/styled-components/sponsor/8/avatar.svg"></a>
191<a href="https://opencollective.com/styled-components/sponsor/9/website" target="_blank"><img src="https://opencollective.com/styled-components/sponsor/9/avatar.svg"></a>