# Contributing to Weex
Weex community respects all kinds of contributing, including but not limited to code, documentation, mailing list.
## Table of Content
* [Code of Conduct](#code-of-conduct)
* [Mailing List](#mailing-list)
* [Ask or Answer Questions](#mailing-list)
* [Development Process](#development-process)
* [Contribute Code or document](#contribute-code-or-document)
    * [Contribute Documentation](contribute-documentation)
    * [Contribute Code](#contribute-code)
* [Members and Governance Model](#members-and-governance-model)

# Code of Conduct
To make an open and friendly community, Weex community adopt [Contributor Covenant](./CODE_OF_CONDUCT.md) as the code of conduct.

# Mailing List
> If it didn't happen on a mailing list, it didn't happen.

In Weex community, feature requests, discussions and decisions happen on the mailing list, which is open to the whole world. Ref our [website](https://weex.apache.org/guide/contribute/how-to-contribute.html#mailing-list) to see more.

# Ask or Answer Questions
Weex Community [Github Issue](https://github.com/apache/incubator-weex/issues) to report and track bugs 。The more information provided in a Github issue, the sooner it get solved.

*Tip*:
> * Avoid duplicated: Always search on Github before you fire a new one.
> * Always run with the latest version before you fire a bug
> * Only report one bug in one Github Issue.

## Format of Github issue
Please use the [Bug Report](https://github.com/apache/incubator-weex/issues/new/choose) template when firing a bug. All the information needed to solve a bug is listed in the Bug report template , please fill it out as much as you can. **The more information provided in a Github issue, the sooner it get solved.**

*Tip*:
> Report bug with fact and expected behavior, not complaint or emotional words.

## Be patient
Compared to the amount of issues, Weex community may not response to your issues in time, please be patient.

*Tip*:
> If your Github issue doesn't get any response over a week, you can ask developers through [weex mailing list](https://weex.apache.org/guide/contribute/how-to-contribute.html#mailing-list).

# Development Process
Most of the development process is described in [confluence](https://cwiki.apache.org/confluence/x/eJBTBw), which services the contributors of Weex and is transparent to all users.

* [Release Plan](https://github.com/apache/incubator-weex/milestones): All feature, bugfix, issue-solved are associated with a certain milestone since Weex 0.27. As every Weex release needs approval from PPMC and IPMC, the due date of milestone is just an estimation of release date, not accuracy schedule.
* [Release Procedure](https://cwiki.apache.org/confluence/x/_I5TBw)
* [Major feature](https://github.com/apache/incubator-weex/projects)
* [System Design](https://cwiki.apache.org/confluence/x/XYxTBw)
* [Road Map](https://cwiki.apache.org/confluence/x/fJBTBw)

# Contribute Code or document
In Weex community, **Documentation is as important as code**, and Weex community respects all the contribution of documentation or code.

*Tip*:
> Weex adopts [Apache License 2.0](https://choosealicense.com/licenses/apache-2.0/) as its open source license. Make sure your contribution obeys the requirement of Apache License 2.0.

## Contribute documentation
Documentation with good quality is a great help to developers. If there is a powerful API that is not easy to use, it becomes useless. So, we welcome contributions to help documentation of Weex become precise and easy to read.

You can contribute to a document through the following ways:
* Click **Edit this page** on the bottom of website, and you will be navigated to a new Github PR.

## Contribute code
### Before Coding
#### Use master branch
The development of Weex is on master branch, you should write your code based on master branch.

#### Check License
Weex adopts [Apache License 2.0](https://choosealicense.com/licenses/apache-2.0/) as its open source license. Make sure your potential contribution obeys the requirement of Apache License 2.0.

#### Bug or Feature ?
* If you are going to fix a bug of Weex, check whether it already exists in [Github Issue](https://github.com/apache/incubator-weex/issues). If it exists, make sure to write down the link of the corresponding Github issue in the PR you are going to create.
* If you are going to add a feature for weex, reference the following recommend procedure:
    1. Writing a email to [mailing list](https://weex.apache.org/guide/contribute/how-to-contribute.html#mailing-list) to talk about what you'd like to do.
    1. Write the corresponding [document](#contribute-documentation)

### Coding
1. [Fork](https://help.github.com/articles/fork-a-repo/) the Github repository at [https://github.com/apache/incubator-weex](https://github.com/apache/incubator-weex). 
1. Clone the forked repository and create a new branch from `master` to push your commits to.
1. Develop your feature or bug fix in your new branch. Make sure your code meets the [style guidelines](#code-style-guidelines).
1. Add the **License** below to the top of any new file(s) you've added.
   
        /*
        * Licensed to the Apache Software Foundation (ASF) under one
        * or more contributor license agreements.  See the NOTICE file
        * distributed with this work for additional information
        * regarding copyright ownership.  The ASF licenses this file
        * to you under the Apache License, Version 2.0 (the
        * "License"); you may not use this file except in compliance
        * with the License.  You may obtain a copy of the License at
        *
        *   http://www.apache.org/licenses/LICENSE-2.0
        *
        * Unless required by applicable law or agreed to in writing,
        * software distributed under the License is distributed on an
        * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
        * KIND, either express or implied.  See the License for the
        * specific language governing permissions and limitations
        * under the License.
        */
   
1. Commit all the changes to your branch.

*Tip*:
> If you are writing Java or C++ with Android Studio, **License** will be added to the head of the file automatically.

#### Code Style Guidelines 

##### Objective-C

* Tabs should be used for indentation. Please do not use spaces.
* `*` operator goes with the variable name (e.g. Type *variable;)
* For function definitions, place each brace on its own line.
* For all the other braces, place the open brace on the line preceding the code block and place the close brace on its own line.
* Use `#pragma marks` to categorize methods into functional groupings and protocol implementations
* Follow other guidelines on [GitHub Objective-C Style Guide](https://github.com/github/objective-c-style-guide)

##### Java & Android
* Use [Google Java Style](https://google.github.io/styleguide/javaguide.html) as basic guidelines of java code.
* Follow [AOSP Code Style](https://source.android.com/source/code-style.html) for rest of android related code style.

##### C & C++
* Use [Google C++ Style ](https://google.github.io/styleguide/cppguide.html)  as basic guidelines of C++ code
* Weex defines [a subset of the Google C++ development specification](https://github.com/jianhan-he/C-Style-Guide/blob/master/C%2B%2B_Style_Guide_en.md) that covers some of the major C++ scenario usage specifications.

### Publish your Change
[Open a pull request](https://help.github.com/articles/using-pull-requests/) against the `master` branch of `apache/incubator-weex`. Make sure following guidelines are considered when creating a pull request.

1. One PR should solve only one problem.
1. The PR title should be the form of `[COMPONENT] Summary`:
    * `COMPONENT` is one of the mentioned PR categories (android, iOS, JsFm, web, test, etc..). 
    * `Summary` should be a brief description of your change within one sentence.
1. Content description of PR
    * If the PR is about fixing a bug *excluding crash*, a [demo](http://editor.weex.io/) is necessary in code's description.
    * If the PR is about adding a new feature, another [PR for documentation](#contribute-documentation) is necessary in codes' PR description.
    * *Optional* If the PR fixes an existing Github issue, you may add the link to the corresponding issue in the PR.

There will be a static check program when you submit a PR,and the following rules will be checked:
1. Check if your PR is submitted to master branch, if not, you will failed.
1. Check if your PR is bounded with a milestone, if not, you will receive a warning message.
1. Check if your PR description contains keywords `Documentation` and it's corresponding http links. if not, you will receive a warning message.
1. Check if your PR description contains keywords `Demo` and it's corresponding http links. if not, you will receive a warning message.
1. Check if your PR modify the changelog.md, if not,you will receive a warning message.

*Tip*:
> Reviewing PR may take a great deal of time, please be patient. If your PR doesn't get response over 96 hours, you might send an email to [mailing list](https://weex.apache.org/guide/contribute/how-to-contribute.html#mailing-list) to ask the progress.

# Members and Governance Model
You can find committers, PPMCs and governance model of Weex from [confluence](https://cwiki.apache.org/confluence/x/bFoyBw).