forked from zulip/zulip
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs: Split a CONTRIBUTING.md out of README.md.
Also contains a number of updates, additions, and deletions; this is essentially a rewrite of the github landing page experience.
- Loading branch information
Showing
7 changed files
with
358 additions
and
269 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,291 @@ | ||
# Contributing to Zulip | ||
|
||
Welcome to the Zulip community! | ||
|
||
## Community | ||
|
||
The | ||
[Zulip community server](https://zulip.readthedocs.io/en/latest/chat-zulip-org.html) | ||
is the primary communication forum for the Zulip community. It is a good | ||
place to start whether you have a question, are a new contributor, are a new | ||
user, or anything else. Make sure to read the | ||
[community norms](http://zulip.readthedocs.io/en/latest/chat-zulip-org.html#community-norms) | ||
before posting. The Zulip community is also governed by a | ||
[code of conduct](http://zulip.readthedocs.io/en/latest/code-of-conduct.html). | ||
|
||
You can subscribe to [email protected] for a lower traffic (~1 | ||
email/month) way to hear about things like mentorship opportunities with Google | ||
Code-in, in-person sprints at conferences, and other opportunities to | ||
contribute. | ||
|
||
## Ways to contribute | ||
|
||
To make a code or documentation contribution, read our | ||
[step-by-step guide](#your-first-codebase-contribution) to getting | ||
started with the Zulip codebase. A small sample of the type of work that | ||
needs doing: | ||
* Bug squashing and feature development on our Python/Django | ||
[backend](https://github.com/zulip/zulip), web | ||
[frontend](https://github.com/zulip/zulip), React Native | ||
[mobile app](https://github.com/zulip/zulip-mobile), or Electron | ||
[desktop app](https://github.com/zulip/zulip-electron). | ||
* Building out our | ||
[Python API and bots](https://github.com/zulip/python-zulip-api) framework. | ||
* [Writing an integration](http://zulip.readthedocs.io/en/latest/integration-guide.html). | ||
* Improving our [user](https://chat.zulip.org/help/) or | ||
[developer](https://zulip.readthedocs.io/en/latest/) documentation. | ||
* [Reviewing code](http://zulip.readthedocs.io/en/latest/code-reviewing.html) | ||
and manually testing pull requests. | ||
|
||
**Non-code contributions**: Some of the most valuable ways to contribute | ||
don't require touching the codebase at all. We list a few of them below: | ||
|
||
* [Reporting issues](#reporting-issues), including both feature requests and | ||
bug reports. | ||
* [Giving feedback](#user-feedback) if you are evaluating or using Zulip. | ||
* [Translating](https://zulip.readthedocs.io/en/latest/translating.html) | ||
Zulip. | ||
* [Outreach](#zulip-outreach): Star us on GitHub, upvote us | ||
on product comparison sites, or write for the Zulip blog. | ||
|
||
## Your first (codebase) contribution | ||
|
||
This section has a step by step guide to starting as a Zulip codebase | ||
contributor. It's long, but don't worry about doing all the steps perfectly; | ||
no one gets it right the first time, and there are a lot of people available | ||
to help. | ||
* First, make an account on the | ||
[Zulip community server](http://zulip.readthedocs.io/en/latest/chat-zulip-org.html), | ||
paying special attention to the community norms. If you'd like, introduce | ||
yourself in | ||
[#new members](https://chat.zulip.org/#narrow/stream/new.20members), using | ||
your name as the topic. Bonus: tell us about your first impressions of | ||
Zulip, and anything that felt confusing/broken as you started using the | ||
product. | ||
* Read [What makes a great Zulip contributor](#what-makes-a-great-zulip-contributor). | ||
* [Install the development environment](https://zulip.readthedocs.io/en/latest/dev-overview.html), | ||
getting help in | ||
[#development help](https://chat.zulip.org/#narrow/stream/development.20help) | ||
if you run into any troubles. | ||
* Read the | ||
[Zulip guide to Git](http://zulip.readthedocs.io/en/latest/git-guide.html) | ||
and do the Git tutorial (coming soon) if you are unfamiliar with Git, | ||
getting help in | ||
[#git help](https://chat.zulip.org/#narrow/stream/git.20help) if you run | ||
into any troubles. | ||
* Sign the | ||
[Dropbox Contributor License Agreement](https://opensource.dropbox.com/cla/). | ||
|
||
### Picking an issue | ||
|
||
Now, you're ready to pick your first issue! There are hundreds of open issues | ||
in the main codebase alone. This section will help you find an issue to work | ||
on. | ||
|
||
* If you're interested in | ||
[mobile](https://github.com/zulip/zulip-mobile/issues?q=is%3Aopen+is%3Aissue), | ||
[desktop](https://github.com/zulip/zulip-electron/issues?q=is%3Aopen+is%3Aissue), | ||
or | ||
[bots](https://github.com/zulip/python-zulip-api/issues?q=is%3Aopen+is%3Aissue) | ||
development, check the respective links for open issues, or post in | ||
[#mobile](https://chat.zulip.org/#narrow/stream/mobile), | ||
[#electron](https://chat.zulip.org/#narrow/stream/electron), or | ||
[#bots](https://chat.zulip.org/#narrow/stream/bots). | ||
* For the main server and web repository, start by looking through issues | ||
with the label | ||
[good first issue](https://github.com/zulip/zulip/issues?q=is%3Aopen+is%3Aissue+label%3A"good+first+issue"). | ||
These are smaller projects particularly suitable for a first contribution. | ||
* We also partition all of our issues in the main repo into areas like | ||
admin, compose, emoji, hotkeys, i18n, onboarding, search, etc. Look | ||
through our [list of labels](https://github.com/zulip/zulip/labels), and | ||
click on some of the `area:` labels to see all the issues related to your | ||
areas of interest. | ||
* If the lists of issues are overwhelming, post in | ||
[#new members](https://chat.zulip.org/#narrow/stream/new.20members) with a | ||
bit about your background and interests, and we'll help you out. The most | ||
important thing to say is whether you're looking for a backend (Python), | ||
frontend (JavaScript), mobile (React Native), desktop (Electron), | ||
documentation (English) or visual design (JavaScript + CSS) issue, and a | ||
bit about your programming experience. | ||
|
||
We also welcome suggestions of features that you feel would be valuable or | ||
changes that you feel would make Zulip a better open source project. If you | ||
have a new feature you'd like to add, we recommend you start by posting in | ||
[#new members](https://chat.zulip.org/#narrow/stream/new.20members) with the | ||
feature idea and the problem that you're hoping to solve. | ||
|
||
Other notes: | ||
* For a first pull request, it's better to aim for a smaller contribution | ||
than a bigger one. Many first contributions have fewer than 10 lines of | ||
changes (not counting tests). | ||
* The full list of issues looking for a contributor can be found with the | ||
[help wanted](https://github.com/zulip/zulip/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) | ||
label. | ||
* For most new contributors, there's a lot to learn while making your first | ||
pull request. It's OK if it takes you a while; that's normal! You'll be | ||
able to work a lot faster as you build experience. | ||
|
||
### Working on an issue | ||
|
||
To work on an issue, claim it by adding a comment with `@zulipbot claim` to | ||
the issue thread. [Zulipbot](https://github.com/zulip/zulipbot) is a GitHub | ||
workflow bot; it will assign you to the issue and label the issue as "in | ||
progress". Some additional notes: | ||
|
||
* You're encouraged to ask questions on how to best implement or debug your | ||
changes -- the Zulip maintainers are excited to answer questions to help | ||
you stay unblocked and working efficiently. You can ask questions on | ||
chat.zulip.org, or on the GitHub issue or pull request. | ||
* We encourage early pull requests for work in progress. Prefix the title of | ||
work in progress pull requests with `[WIP]`, and remove the prefix when | ||
you think it might be mergeable and want it to be reviewed. | ||
* After updating a PR, add a comment to the GitHub thread mentioning that it | ||
is ready for another review. GitHub only notifies maintainers of the | ||
changes when you post a comment, so if you don't, your PR will likely be | ||
neglected by accident! | ||
|
||
### And beyond | ||
|
||
A great place to look for a second issue is to look for issues with the same | ||
`area:` label as the last issue you resolved. You'll be able to reuse the | ||
work you did learning how that part of the codebase works. Also, the path to | ||
becoming a core developer often involves taking ownership of one of these area | ||
labels. | ||
|
||
## What makes a great Zulip contributor? | ||
|
||
Zulip runs a lot of internship programs, so we have a lot of experience with | ||
new contributors. In our experience, these are the best predictors of success: | ||
|
||
* Posting good questions. This generally means explaining your current | ||
understanding, saying what you've done or tried so far, and including | ||
tracebacks or other error messages if appropriate. | ||
* Learning and practicing | ||
[Git commit discipline](http://zulip.readthedocs.io/en/latest/version-control.html#commit-discipline). | ||
* Submitting carefully tested code. This generally means checking your work | ||
through a combination of automated tests and manually clicking around the | ||
UI trying to find bugs in your work. See | ||
[things to look for](http://zulip.readthedocs.io/en/latest/code-reviewing.html#things-to-look-for) | ||
for additional ideas. | ||
* Posting | ||
[screenshots or GIFs](http://zulip.readthedocs.io/en/latest/screenshot-and-gif-software.html) | ||
for frontend changes. | ||
* Being responsive to feedback on pull requests. This means incorporating or | ||
responding to all suggested changes, and leaving a note if you won't be | ||
able to address things within a few days. | ||
* Being helpful and friendly on chat.zulip.org. | ||
|
||
These are also the main criteria we use to select interns for all of our | ||
internship programs. | ||
|
||
## Reporting issues | ||
|
||
If you find an easily reproducible bug and/or are experienced in reporting | ||
bugs, feel free to just open an issue on the relevant project on GitHub. | ||
|
||
If you have a feature request or are not yet sure what the underlying bug | ||
is, the best place to post issues is | ||
[#issues](https://chat.zulip.org/#narrow/stream/issues) (or | ||
[#mobile](https://chat.zulip.org/#narrow/stream/mobile) or | ||
[#electron](https://chat.zulip.org/#narrow/stream/electron)) on the | ||
[Zulip community server](http://zulip.readthedocs.io/en/latest/chat-zulip-org.html). | ||
This allows us to interactively figure out what is going on, let you know if | ||
a similar issue has already been opened, and collect any other information | ||
we need. Choose a 2-4 word topic that describes the issue, explain the issue | ||
and how to reproduce it if known, your browser/OS if relevant, and a | ||
[screenshot or screenGIF](http://zulip.readthedocs.io/en/latest/screenshot-and-gif-software.html) | ||
if appropriate. | ||
|
||
**Reporting security issues**. Please do not report security issues | ||
publicly, including on public streams on chat.zulip.org. You can email | ||
[email protected]. We create a CVE for every security issue. | ||
|
||
## User feedback | ||
|
||
Nearly every feature we develop starts with a user request. If you are part | ||
of a group that is either using or considering using Zulip, we would love to | ||
hear about your experience with the product. If you're not sure what to | ||
write, here are some questions we're always very curious to know the answer | ||
to: | ||
|
||
* Evaluation: What is the process by which your organization chose or will | ||
choose a group chat product? | ||
* Pros and cons: What are the pros and cons of Zulip for your organization, | ||
and the pros and cons of other products you are evaluating? | ||
* Features: What are the features that are most important for your | ||
organization? In the best case scenario, what would your chat solution do | ||
for you? | ||
* Onboarding: If you remember it, what was your impression during your first | ||
few minutes of using Zulip? What did you notice, and how did you feel? Was | ||
there anything that stood out to you as confusing, or broken, or great? | ||
* Organization: What does your organization do? How big is the organization? | ||
A link to your organization's website? | ||
|
||
## Internship programs | ||
|
||
Zulip runs internship programs with [Outreachy](https://www.outreachy.org/), | ||
[Google Summer of Code](https://developers.google.com/open-source/gsoc/), | ||
and the | ||
[MIT Externship program](https://alum.mit.edu/students/NetworkwithAlumni/ExternshipProgram), | ||
and also takes summer interns from Harvard, MIT, and Stanford. | ||
|
||
The application process and selection criteria for all our internship | ||
programs is the same. A few notes: | ||
* We try to make the application process as valuable for the applicant as | ||
possible. Expect high quality code reviews, a supportive community, and | ||
publicly viewable patches you can link to from your resume, regardless of | ||
whether you are selected. | ||
* To apply, you'll have to submit at least one pull request to a Zulip | ||
repository. Strong applicants for most of our programs typically have | ||
several complete pull requests by the time of the application deadline. | ||
* The main criteria we use is quality of your strongest contributions, and | ||
the bullets listed at | ||
[What makes a great Zulip contributor](#what-makes-a-great-zulip-contributor). | ||
|
||
Zulip also participates in | ||
[Google Code-In](https://developers.google.com/open-source/gci/). Our | ||
selection criteria for Finalists and Grand Prize Winners is the same as our | ||
selection criteria for interns above. | ||
|
||
Most of our interns end up sticking around the project long-term, and many | ||
quickly become core team members. We hope you apply! | ||
|
||
## Zulip Outreach | ||
|
||
**Upvoting Zulip**. Upvotes and reviews make a big difference in the public | ||
perception of projects like Zulip. We've collected a few sites below | ||
where we know Zulip has been discussed. Doing everything in the following | ||
list typically takes about 15 minutes. | ||
* Star us on GitHub. There are four main repositories: | ||
[server/web](https://github.com/zulip/zulip), | ||
[mobile](https://github.com/zulip/zulip-mobile), | ||
[desktop](https://github.com/zulip/zulip-electron), and | ||
[Python API](https://github.com/zulip/python-zulip-api). | ||
* [Follow us](https://twitter.com/zulip) on Twitter. | ||
|
||
For both of the following, you'll need to make an account on the site if you | ||
don't already have one. | ||
|
||
* [Like Zulip](https://alternativeto.net/software/zulip-chat-server/) on | ||
AlternativeTo. We recommend upvoting a couple of other products you like | ||
as well, both to give back to their community, and since single-upvote | ||
accounts are generally given less weight. You can also | ||
[upvote Zulip](https://alternativeto.net/software/slack/) on their page | ||
for Slack. | ||
* [Add Zulip to your stack](https://stackshare.io/zulip) on StackShare, star | ||
it, and upvote the reasons why people like Zulip that you find most | ||
compelling. Again, we recommend adding a few other products that you like | ||
as well. | ||
|
||
We have a doc with more detailed instructions and a few other sites, if you | ||
have been using Zulip for a while and want to contribute more. | ||
|
||
**Blog posts**. Writing a blog post about your experiences with Zulip, or | ||
about a technical aspect of Zulip can be a great way to spread the word | ||
about Zulip. | ||
|
||
We also occasionally publish longer form articles related to Zulip. Our | ||
posts typically get tens of thousands of views, and we always have good | ||
ideas for blog posts that we can outline but don't have time to write. If | ||
you are an experienced writer or copyeditor, send us a portfolio; we'd love | ||
to talk! |
Oops, something went wrong.