| 
									
										
										
										
											2016-12-15 11:19:21 -08:00
										 |  |  | # Building and Testing Angular
 | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-15 11:19:21 -08:00
										 |  |  | This document describes how to set up your development environment to build and test Angular. | 
					
						
							| 
									
										
										
										
											2016-08-17 11:38:49 +09:00
										 |  |  | It also explains the basic mechanics of using `git`, `node`, and `npm`. | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-09 09:33:10 -07:00
										 |  |  | * [Prerequisite Software](#prerequisite-software) | 
					
						
							|  |  |  | * [Getting the Sources](#getting-the-sources) | 
					
						
							| 
									
										
										
										
											2016-07-21 11:48:23 -07:00
										 |  |  | * [Installing NPM Modules](#installing-npm-modules) | 
					
						
							| 
									
										
										
										
											2016-07-08 13:00:27 -06:00
										 |  |  | * [Building](#building) | 
					
						
							| 
									
										
										
										
											2015-04-09 09:33:10 -07:00
										 |  |  | * [Running Tests Locally](#running-tests-locally) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | See the [contribution guidelines](https://github.com/angular/angular/blob/master/CONTRIBUTING.md) | 
					
						
							|  |  |  | if you'd like to contribute to Angular. | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Prerequisite Software
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Before you can build and test Angular, you must install and configure the | 
					
						
							|  |  |  | following products on your development machine: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-21 13:30:03 -08:00
										 |  |  | * [Git](http://git-scm.com) and/or the **GitHub app** (for [Mac](http://mac.github.com) or | 
					
						
							|  |  |  |   [Windows](http://windows.github.com)); [GitHub's Guide to Installing | 
					
						
							|  |  |  |   Git](https://help.github.com/articles/set-up-git) is a good source of information. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-07 23:21:35 +03:00
										 |  |  | * [Node.js](http://nodejs.org), (version `>=6.9.5 <7.0.0`) which is used to run a development web server, | 
					
						
							| 
									
										
										
										
											2016-01-21 13:30:03 -08:00
										 |  |  |   run tests, and generate distributable files. We also use Node's Package Manager, `npm` | 
					
						
							| 
									
										
										
										
											2017-07-07 23:21:35 +03:00
										 |  |  |   (version `>=3.10.7 <4.0.0`), which comes with Node. Depending on your system, you can install Node either from | 
					
						
							| 
									
										
										
										
											2016-01-21 13:30:03 -08:00
										 |  |  |   source or as a pre-packaged bundle. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-21 15:39:43 +02:00
										 |  |  | * [Yarn](https://yarnpkg.com) (version `>=1.0.2 <2.0.0`) which is used to install dependencies. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-08 10:04:28 +01:00
										 |  |  | * [Java Development Kit](http://www.oracle.com/technetwork/es/java/javase/downloads/index.html) which is used | 
					
						
							|  |  |  |   to execute the selenium standalone server for e2e testing. | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Getting the Sources
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-17 16:02:42 -07:00
										 |  |  | Fork and clone the Angular repository: | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-17 16:02:42 -07:00
										 |  |  | 1. Login to your GitHub account or create one by following the instructions given | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  |    [here](https://github.com/signup/free). | 
					
						
							|  |  |  | 2. [Fork](http://help.github.com/forking) the [main Angular | 
					
						
							|  |  |  |    repository](https://github.com/angular/angular). | 
					
						
							|  |  |  | 3. Clone your fork of the Angular repository and define an `upstream` remote pointing back to | 
					
						
							| 
									
										
										
										
											2015-04-17 16:02:42 -07:00
										 |  |  |    the Angular repository that you forked in the first place. | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```shell | 
					
						
							| 
									
										
										
										
											2015-04-17 16:02:42 -07:00
										 |  |  | # Clone your GitHub repository:
 | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | git clone git@github.com:<github username>/angular.git | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Go to the Angular directory:
 | 
					
						
							|  |  |  | cd angular | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Add the main Angular repository as an upstream remote to your repository:
 | 
					
						
							|  |  |  | git remote add upstream https://github.com/angular/angular.git | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2016-07-21 11:48:23 -07:00
										 |  |  | ## Installing NPM Modules
 | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 11:38:49 +09:00
										 |  |  | Next, install the JavaScript modules needed to build and test Angular: | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | # Install Angular project dependencies (package.json)
 | 
					
						
							| 
									
										
										
										
											2017-09-21 15:39:43 +02:00
										 |  |  | yarn install | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **Optional**: In this document, we make use of project local `npm` package scripts and binaries | 
					
						
							|  |  |  | (stored under `./node_modules/.bin`) by prefixing these command invocations with `$(npm bin)`; in | 
					
						
							| 
									
										
										
										
											2015-03-19 11:36:27 -07:00
										 |  |  | particular `gulp` and `protractor` commands. If you prefer, you can drop this path prefix by either: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-20 17:50:04 -08:00
										 |  |  | ## Installing Bower Modules
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Now run `bower` to install additional dependencies: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | # Install other Angular project dependencies (bower.json)
 | 
					
						
							|  |  |  | bower install | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-21 18:01:47 +02:00
										 |  |  | ## Windows only
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | In order to create the right symlinks, run **as administrator**: | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | ./scripts/windows/create-symlinks.sh | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Before submitting a PR, do not forget to remove them: | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  |  ./scripts/windows/remove-symlinks.sh | 
					
						
							|  |  |  |  ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-08 13:00:27 -06:00
										 |  |  | ## Building
 | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-08 13:00:27 -06:00
										 |  |  | To build Angular run: | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```shell | 
					
						
							| 
									
										
										
										
											2016-07-08 13:00:27 -06:00
										 |  |  | ./build.sh | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-08 13:00:27 -06:00
										 |  |  | * Results are put in the dist folder. | 
					
						
							| 
									
										
										
										
											2015-03-17 18:48:02 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Running Tests Locally
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-08 13:00:27 -06:00
										 |  |  | To run tests: | 
					
						
							| 
									
										
										
										
											2015-11-07 00:16:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-02 17:08:16 -07:00
										 |  |  | ```shell | 
					
						
							| 
									
										
										
										
											2016-07-29 14:10:20 -07:00
										 |  |  | $ ./test.sh node             # Run all angular tests on node | 
					
						
							| 
									
										
										
										
											2016-07-14 08:51:05 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-29 14:10:20 -07:00
										 |  |  | $ ./test.sh browser          # Run all angular tests in browser | 
					
						
							|  |  |  | $ ./test.sh browserNoRouter  # Optionally run all angular tests without router in browser | 
					
						
							| 
									
										
										
										
											2016-07-14 08:51:05 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-29 14:10:20 -07:00
										 |  |  | $ ./test.sh tools            # Run angular tooling (not framework) tests | 
					
						
							| 
									
										
										
										
											2016-07-14 08:51:05 -07:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You should execute the 3 test suites before submitting a PR to github. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-31 22:06:22 +01:00
										 |  |  | See [DEBUG.md](DEBUG.md) for information on debugging the code while running the unit tests. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-14 08:51:05 -07:00
										 |  |  | All the tests are executed on our Continuous Integration infrastructure and a PR could only be merged once the tests pass. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - CircleCI fails if your code is not formatted properly, | 
					
						
							| 
									
										
										
										
											2016-10-02 16:19:47 -05:00
										 |  |  | - Travis CI fails if any of the test suites described above fails. | 
					
						
							| 
									
										
										
										
											2016-07-14 08:51:05 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Update the public API tests
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you happen to modify the public API of Angular, API golden files must be updated using: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` shell | 
					
						
							|  |  |  | $ gulp public-api:update | 
					
						
							| 
									
										
										
										
											2015-09-02 17:08:16 -07:00
										 |  |  | ``` | 
					
						
							| 
									
										
										
										
											2016-07-14 08:51:05 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-31 03:54:53 +01:00
										 |  |  | Note: The command `gulp public-api:enforce` fails when the API doesn't match the golden files. Make sure to rebuild | 
					
						
							|  |  |  | the project before trying to verify after an API change. | 
					
						
							| 
									
										
										
										
											2016-07-14 08:51:05 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-05 20:27:20 +02:00
										 |  |  | ## <a name="clang-format"></a> Formatting your source code
 | 
					
						
							| 
									
										
										
										
											2016-07-14 08:51:05 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | Angular uses [clang-format](http://clang.llvm.org/docs/ClangFormat.html) to format the source code. If the source code | 
					
						
							|  |  |  | is not properly formatted, the CI will fail and the PR can not be merged. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You can automatically format your code by running: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` shell | 
					
						
							|  |  |  | $ gulp format | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-31 03:54:53 +01:00
										 |  |  | ## Linting/verifying your source code
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You can check that your code is properly formatted and adheres to coding style by running: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` shell | 
					
						
							|  |  |  | $ gulp lint | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-19 14:25:44 -08:00
										 |  |  | ## Publishing snapshot builds
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When the `master` branch successfully builds on Travis, it automatically publishes build artifacts | 
					
						
							|  |  |  | to repositories in the Angular org, eg. the `@angular/core` package is published to | 
					
						
							|  |  |  | http://github.com/angular/core-builds. | 
					
						
							|  |  |  | The ES2015 version of Angular is published to a different branch in these repos, for example | 
					
						
							|  |  |  | http://github.com/angular/core-builds#master-es2015 | 
					
						
							| 
									
										
										
										
											2016-07-14 08:51:05 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-15 11:19:21 -08:00
										 |  |  | You may find that your un-merged change needs some validation from external participants. | 
					
						
							|  |  |  | Rather than requiring them to pull your Pull Request and build Angular locally, you can | 
					
						
							|  |  |  | publish the `*-builds` snapshots just like our Travis build does. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | First time, you need to create the github repositories: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` shell | 
					
						
							|  |  |  | $ export TOKEN=[get one from https://github.com/settings/tokens] | 
					
						
							| 
									
										
										
										
											2017-08-24 08:03:05 -07:00
										 |  |  | $ CREATE_REPOS=1 TRAVIS= ./scripts/ci/publish-build-artifacts.sh [github username] | 
					
						
							| 
									
										
										
										
											2016-12-15 11:19:21 -08:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For subsequent snapshots, just run | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` shell | 
					
						
							|  |  |  | $ ./scripts/publish/publish-build-artifacts.sh [github username] | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2016-12-20 22:52:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The script will publish the build snapshot to a branch with the same name as your current branch, | 
					
						
							|  |  |  | and create it if it doesn't exist. |