42a00611f8
Closes #15008
310 lines
14 KiB
Markdown
310 lines
14 KiB
Markdown
# Contributing to AngularJS
|
|
|
|
We'd love for you to contribute to our source code and to make AngularJS even better than it is
|
|
today! Here are the guidelines we'd like you to follow:
|
|
|
|
- [Code of Conduct](#coc)
|
|
- [Question or Problem?](#question)
|
|
- [Issues and Bugs](#issue)
|
|
- [Feature Requests](#feature)
|
|
- [Submission Guidelines](#submit)
|
|
- [Coding Rules](#rules)
|
|
- [Commit Message Guidelines](#commit)
|
|
- [Signing the CLA](#cla)
|
|
- [Further Info](#info)
|
|
|
|
## <a name="coc"></a> Code of Conduct
|
|
|
|
Help us keep Angular open and inclusive. Please read and follow our [Code of Conduct][coc].
|
|
|
|
## <a name="question"></a> Got a Question or Problem?
|
|
|
|
If you have questions about how to use AngularJS, please direct these to the [Google Group][groups]
|
|
discussion list or [StackOverflow][stackoverflow]. We are also available on [IRC][irc] and
|
|
[Gitter][gitter].
|
|
|
|
## <a name="issue"></a> Found an Issue?
|
|
|
|
If you find a bug in the source code or a mistake in the documentation, you can help us by
|
|
submitting an issue to our [GitHub Repository][github]. Even better you can submit a Pull Request
|
|
with a fix.
|
|
|
|
**Localization Issues:** Angular.js uses the [Google Closure I18N library] to generate
|
|
its own I18N files (the ngLocale module). This means that any changes to these files would be lost
|
|
the next time that we import the library.
|
|
Since the Closure library i18n data is itself auto-generated from the data of the
|
|
[Common Locale Data Repository (CLDR)] project, errors in the data should
|
|
be reported there. See also the [Closure guide to i18n changes].
|
|
|
|
**Please see the [Submission Guidelines](#submit) below.**
|
|
|
|
## <a name="feature"></a> Want a Feature?
|
|
|
|
You can request a new feature by submitting an issue to our [GitHub Repository][github]. If you
|
|
would like to implement a new feature then consider what kind of change it is:
|
|
|
|
* **Major Changes** that you wish to contribute to the project should be discussed first on our
|
|
[dev mailing list][angular-dev] or [IRC][irc] so that we can better coordinate our efforts,
|
|
prevent duplication of work, and help you to craft the change so that it is successfully accepted
|
|
into the project.
|
|
* **Small Changes** can be crafted and submitted to the [GitHub Repository][github] as a Pull
|
|
Request.
|
|
|
|
|
|
## <a name="docs"></a> Want a Doc Fix?
|
|
|
|
If you want to help improve the docs, it's a good idea to let others know what you're working on to
|
|
minimize duplication of effort. Create a new issue (or comment on a related existing one) to let
|
|
others know what you're working on.
|
|
|
|
For large fixes, please build and test the documentation before submitting the PR to be sure you
|
|
haven't accidentally introduced any layout or formatting issues. You should also make sure that your
|
|
commit message starts with "docs" and follows the **[Commit Message Guidelines](#commit)** outlined
|
|
below.
|
|
|
|
If you're just making a small change, don't worry about filing an issue first. Use the friendly blue
|
|
"Improve this doc" button at the top right of the doc page to fork the repository in-place and make
|
|
a quick change on the fly. When naming the commit, it is advised to follow the commit message
|
|
guidelines below, by starting the commit message with **docs** and referencing the filename. Since
|
|
this is not obvious and some changes are made on the fly, this is not strictly necessary and we will
|
|
understand if this isn't done the first few times.
|
|
|
|
## <a name="submit"></a> Submission Guidelines
|
|
|
|
### Submitting an Issue
|
|
Before you submit your issue search the archive, maybe your question was already answered.
|
|
|
|
If your issue appears to be a bug, and hasn't been reported, open a new issue. Help us to maximize
|
|
the effort we can spend fixing issues and adding new features, by not reporting duplicate issues.
|
|
Providing the following information will increase the chances of your issue being dealt with
|
|
quickly:
|
|
|
|
* **Overview of the Issue** - if an error is being thrown a non-minified stack trace helps
|
|
* **Motivation for or Use Case** - explain why this is a bug for you
|
|
* **Angular Version(s)** - is it a regression?
|
|
* **Browsers and Operating System** - is this a problem with all browsers or only specific ones?
|
|
* **Reproduce the Error** - provide a live example (using [Plunker][plunker] or
|
|
[JSFiddle][jsfiddle]) or an unambiguous set of steps.
|
|
* **Related Issues** - has a similar issue been reported before?
|
|
* **Suggest a Fix** - if you can't fix the bug yourself, perhaps you can point to what might be
|
|
causing the problem (line of code or commit)
|
|
|
|
Here is a great example of a well defined issue: https://github.com/angular/angular.js/issues/5069
|
|
|
|
**If you get help, help others. Good karma rulez!**
|
|
|
|
### Submitting a Pull Request
|
|
Before you submit your pull request consider the following guidelines:
|
|
|
|
* Search [GitHub](https://github.com/angular/angular.js/pulls) for an open or closed Pull Request
|
|
that relates to your submission. You don't want to duplicate effort.
|
|
* Please sign our [Contributor License Agreement (CLA)](#cla) before sending pull
|
|
requests. We cannot accept code without this.
|
|
* Make your changes in a new git branch:
|
|
|
|
```shell
|
|
git checkout -b my-fix-branch master
|
|
```
|
|
|
|
* Create your patch, **including appropriate test cases**.
|
|
* Follow our [Coding Rules](#rules).
|
|
* Run the full Angular test suite, as described in the [developer documentation][dev-doc],
|
|
and ensure that all tests pass.
|
|
* Commit your changes using a descriptive commit message that follows our
|
|
[commit message conventions](#commit) and passes our commit message presubmit hook
|
|
(`validate-commit-msg.js`). Adherence to the [commit message conventions](#commit) is required,
|
|
because release notes are automatically generated from these messages.
|
|
|
|
```shell
|
|
git commit -a
|
|
```
|
|
Note: the optional commit `-a` command line option will automatically "add" and "rm" edited files.
|
|
|
|
* Build your changes locally to ensure all the tests pass:
|
|
|
|
```shell
|
|
grunt test
|
|
```
|
|
|
|
* Push your branch to GitHub:
|
|
|
|
```shell
|
|
git push origin my-fix-branch
|
|
```
|
|
|
|
In GitHub, send a pull request to `angular:master`.
|
|
If we suggest changes, then:
|
|
|
|
* Make the required updates.
|
|
* Re-run the Angular test suite to ensure tests are still passing.
|
|
* Commit your changes to your branch (e.g. `my-fix-branch`).
|
|
* Push the changes to your GitHub repository (this will update your Pull Request).
|
|
|
|
If the PR gets too outdated we may ask you to rebase and force push to update the PR:
|
|
|
|
```shell
|
|
git rebase master -i
|
|
git push origin my-fix-branch -f
|
|
```
|
|
|
|
_WARNING: Squashing or reverting commits and force-pushing thereafter may remove GitHub comments
|
|
on code that were previously made by you or others in your commits. Avoid any form of rebasing
|
|
unless necessary._
|
|
|
|
That's it! Thank you for your contribution!
|
|
|
|
#### After your pull request is merged
|
|
|
|
After your pull request is merged, you can safely delete your branch and pull the changes
|
|
from the main (upstream) repository:
|
|
|
|
* Delete the remote branch on GitHub either through the GitHub web UI or your local shell as follows:
|
|
|
|
```shell
|
|
git push origin --delete my-fix-branch
|
|
```
|
|
|
|
* Check out the master branch:
|
|
|
|
```shell
|
|
git checkout master -f
|
|
```
|
|
|
|
* Delete the local branch:
|
|
|
|
```shell
|
|
git branch -D my-fix-branch
|
|
```
|
|
|
|
* Update your master with the latest upstream version:
|
|
|
|
```shell
|
|
git pull --ff upstream master
|
|
```
|
|
|
|
## <a name="rules"></a> Coding Rules
|
|
|
|
To ensure consistency throughout the source code, keep these rules in mind as you are working:
|
|
|
|
* All features or bug fixes **must be tested** by one or more [specs][unit-testing].
|
|
* All public API methods **must be documented** with ngdoc, an extended version of jsdoc (we added
|
|
support for markdown and templating via @ngdoc tag). To see how we document our APIs, please check
|
|
out the existing ngdocs and see [this wiki page][ngDocs].
|
|
* With the exceptions listed below, we follow the rules contained in
|
|
[Google's JavaScript Style Guide][js-style-guide]:
|
|
* **Do not use namespaces**: Instead, wrap the entire angular code base in an anonymous closure and
|
|
export our API explicitly rather than implicitly.
|
|
* Wrap all code at **100 characters**.
|
|
* Instead of complex inheritance hierarchies, we **prefer simple objects**. We use prototypal
|
|
inheritance only when absolutely necessary.
|
|
* We **love functions and closures** and, whenever possible, prefer them over objects.
|
|
* To write concise code that can be better minified, we **use aliases internally** that map to the
|
|
external API. See our existing code to see what we mean.
|
|
* We **don't go crazy with type annotations** for private internal APIs unless it's an internal API
|
|
that is used throughout AngularJS. The best guidance is to do what makes the most sense.
|
|
|
|
## <a name="commit"></a> Git Commit Guidelines
|
|
|
|
We have very precise rules over how our git commit messages can be formatted. This leads to **more
|
|
readable messages** that are easy to follow when looking through the **project history**. But also,
|
|
we use the git commit messages to **generate the AngularJS change log**.
|
|
|
|
The commit message formatting can be added using a typical git workflow or through the use of a CLI wizard ([Commitizen](https://github.com/commitizen/cz-cli)). To use the wizard, run `npm run commit` in your terminal after staging your changes in git.
|
|
|
|
### Commit Message Format
|
|
Each commit message consists of a **header**, a **body** and a **footer**. The header has a special
|
|
format that includes a **type**, a **scope** and a **subject**:
|
|
|
|
```
|
|
<type>(<scope>): <subject>
|
|
<BLANK LINE>
|
|
<body>
|
|
<BLANK LINE>
|
|
<footer>
|
|
```
|
|
|
|
The **header** is mandatory and the **scope** of the header is optional.
|
|
|
|
Any line of the commit message cannot be longer 100 characters! This allows the message to be easier
|
|
to read on GitHub as well as in various git tools.
|
|
|
|
### Revert
|
|
If the commit reverts a previous commit, it should begin with `revert: `, followed by the header of the reverted commit. In the body it should say: `This reverts commit <hash>.`, where the hash is the SHA of the commit being reverted.
|
|
|
|
### Type
|
|
Must be one of the following:
|
|
|
|
* **feat**: A new feature
|
|
* **fix**: A bug fix
|
|
* **docs**: Documentation only changes
|
|
* **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing
|
|
semi-colons, etc)
|
|
* **refactor**: A code change that neither fixes a bug nor adds a feature
|
|
* **perf**: A code change that improves performance
|
|
* **test**: Adding missing tests
|
|
* **chore**: Changes to the build process or auxiliary tools and libraries such as documentation
|
|
generation
|
|
|
|
### Scope
|
|
The scope could be anything specifying place of the commit change. For example `$location`,
|
|
`$browser`, `$compile`, `$rootScope`, `ngHref`, `ngClick`, `ngView`, etc...
|
|
|
|
### Subject
|
|
The subject contains succinct description of the change:
|
|
|
|
* use the imperative, present tense: "change" not "changed" nor "changes"
|
|
* don't capitalize first letter
|
|
* no dot (.) at the end
|
|
|
|
### Body
|
|
Just as in the **subject**, use the imperative, present tense: "change" not "changed" nor "changes".
|
|
The body should include the motivation for the change and contrast this with previous behavior.
|
|
|
|
### Footer
|
|
The footer should contain any information about **Breaking Changes** and is also the place to
|
|
reference GitHub issues that this commit **Closes**.
|
|
|
|
**Breaking Changes** should start with the word `BREAKING CHANGE:` with a space or two newlines. The rest of the commit message is then used for this.
|
|
|
|
A detailed explanation can be found in this [document][commit-message-format].
|
|
|
|
## <a name="cla"></a> Signing the CLA
|
|
|
|
Please sign our Contributor License Agreement (CLA) before sending pull requests. For any code
|
|
changes to be accepted, the CLA must be signed. It's a quick process, we promise!
|
|
|
|
* For individuals we have a [simple click-through form][individual-cla].
|
|
* For corporations we'll need you to
|
|
[print, sign and one of scan+email, fax or mail the form][corporate-cla].
|
|
|
|
## <a name="info"></a> Further Information
|
|
You can find out more detailed information about contributing in the
|
|
[AngularJS documentation][contributing].
|
|
|
|
|
|
|
|
[Google Closure I18N library]: https://github.com/google/closure-library/tree/master/closure/goog/i18n
|
|
[angular-dev]: https://groups.google.com/forum/?fromgroups#!forum/angular-dev
|
|
[coc]: https://github.com/angular/code-of-conduct/blob/master/CODE_OF_CONDUCT.md
|
|
[commit-message-format]: https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#
|
|
[contribute]: http://docs.angularjs.org/misc/contribute
|
|
[contributing]: http://docs.angularjs.org/misc/contribute
|
|
[corporate-cla]: http://code.google.com/legal/corporate-cla-v1.0.html
|
|
[dev-doc]: https://docs.angularjs.org/guide
|
|
[github]: https://github.com/angular/angular.js
|
|
[gitter]: https://gitter.im/angular/angular.js
|
|
[groups]: https://groups.google.com/forum/?fromgroups#!forum/angular
|
|
[individual-cla]: http://code.google.com/legal/individual-cla-v1.0.html
|
|
[irc]: http://webchat.freenode.net/?channels=angularjs&uio=d4
|
|
[js-style-guide]: https://google.github.io/styleguide/javascriptguide.xml
|
|
[jsfiddle]: http://jsfiddle.net/
|
|
[list]: https://groups.google.com/forum/?fromgroups#!forum/angular
|
|
[ngDocs]: https://github.com/angular/angular.js/wiki/Writing-AngularJS-Documentation
|
|
[plunker]: http://plnkr.co/edit
|
|
[stackoverflow]: http://stackoverflow.com/questions/tagged/angularjs
|
|
[unit-testing]: https://docs.angularjs.org/guide/unit-testing
|
|
[Common Locale Data Repository (CLDR)]: http://cldr.unicode.org
|
|
[Closure guide to i18n changes]: https://github.com/google/closure-library/wiki/Internationalization-%28i18n%29-changes-in-Closure-Library
|
|
|
|
[](https://github.com/igrigorik/ga-beacon)
|