diff --git a/.circleci/config.yml b/.circleci/config.yml index 2dc3023c41eb..c5347a6d6df3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -30,11 +30,6 @@ var_4: &cache_key_fallback v7-angular-node-12-{{ checksum ".bazelversion" }} var_3_win: &cache_key_win v7-angular-win-node-12-{{ checksum ".bazelversion" }}-{{ checksum "yarn.lock" }}-{{ checksum "WORKSPACE" }}-{{ checksum "packages/bazel/package.bzl" }}-{{ checksum "aio/yarn.lock" }} var_4_win: &cache_key_win_fallback v7-angular-win-node-12-{{ checksum ".bazelversion" }} -# Cache key for the `components-repo-unit-tests` job. **Note** when updating the SHA in the -# cache keys also update the SHA for the "COMPONENTS_REPO_COMMIT" environment variable. -var_5: &components_repo_unit_tests_cache_key v9-angular-components-09e68db8ed5b1253f2fe38ff954ef0df019fc25a -var_6: &components_repo_unit_tests_cache_key_fallback v9-angular-components- - # Workspace initially persisted by the `setup` job, and then enhanced by `build-npm-packages` and # `build-ivy-npm-packages`. # https://circleci.com/docs/2.0/workflows/#using-workspaces-to-share-data-among-jobs @@ -156,27 +151,6 @@ commands: git config --global url."ssh://git@github.com".insteadOf "https://github.com" || true git config --global gc.auto 0 || true - init_saucelabs_environment: - description: Sets up a domain that resolves to the local host. - steps: - - run: - name: Preparing environment for running tests on Sauce Labs. - command: | - # For SauceLabs jobs, we set up a domain which resolves to the machine which launched - # the tunnel. We do this because devices are sometimes not able to properly resolve - # `localhost` or `127.0.0.1` through the SauceLabs tunnel. Using a domain that does not - # resolve to anything on SauceLabs VMs ensures that such requests are always resolved - # through the tunnel, and resolve to the actual tunnel host machine (i.e. the CircleCI VM). - # More context can be found in: https://github.com/angular/angular/pull/35171. - setPublicVar SAUCE_LOCALHOST_ALIAS_DOMAIN "angular-ci.local" - setSecretVar SAUCE_ACCESS_KEY $(echo $SAUCE_ACCESS_KEY | rev) - - run: - # Sets up a local domain in the machine's host file that resolves to the local - # host. This domain is helpful in Sauce Labs tests where devices are not able to - # properly resolve `localhost` or `127.0.0.1` through the sauce-connect tunnel. - name: Setting up alias domain for local host. - command: echo "127.0.0.1 $SAUCE_LOCALHOST_ALIAS_DOMAIN" | sudo tee -a /etc/hosts - # Normally this would be an individual job instead of a command. # But startup and setup time for each individual windows job are high enough to discourage # many small jobs, so instead we use a command for setup unless the gain becomes significant. @@ -272,109 +246,8 @@ jobs: - run: yarn -s tslint - run: yarn -s ng-dev format changed $CI_GIT_BASE_REVISION --check - run: yarn -s ts-circular-deps:check - - run: yarn -s ng-dev pullapprove verify - run: yarn -s ng-dev commit-message validate-range --range $CI_COMMIT_RANGE - test: - executor: - name: default-executor - # Now that large integration tests are running locally in parallel (they can't run on RBE yet - # as they require network access for yarn install), this test is running out of memory - # consistently with the xlarge machine. - # TODO: switch back to xlarge once integration tests are running on remote-exec - resource_class: 2xlarge+ - steps: - - custom_attach_workspace - - init_environment - - install_chrome_libs - - install_java - - run: - command: yarn bazel test //... --build_tag_filters=-ivy-only --test_tag_filters=-ivy-only - no_output_timeout: 20m - - # Temporary job to test what will happen when we flip the Ivy flag to true - test_ivy_aot: - executor: - name: default-executor - resource_class: xlarge - steps: - - custom_attach_workspace - - init_environment - - install_chrome_libs - # We need to explicitly specify the --symlink_prefix option because otherwise we would - # not be able to easily find the output bin directory when uploading artifacts for size - # measurements. - - run: - command: yarn test-ivy-aot //... --symlink_prefix=dist/ - no_output_timeout: 20m - - # Publish bundle artifacts which will be used to calculate the size change. **Note**: Make - # sure that the size plugin from the Angular robot fetches the artifacts from this CircleCI - # job (see .github/angular-robot.yml). Additionally any artifacts need to be stored with the - # following path format: "{projectName}/{context}/{fileName}". This format is necessary - # because otherwise the bot is not able to pick up the artifacts from CircleCI. See: - # https://github.com/angular/github-robot/blob/master/functions/src/plugins/size.ts#L392-L394 - - store_artifacts: - path: dist/bin/packages/core/test/bundling/hello_world/bundle.min.js - destination: core/hello_world/bundle - - store_artifacts: - path: dist/bin/packages/core/test/bundling/todo/bundle.min.js - destination: core/todo/bundle - - store_artifacts: - path: dist/bin/packages/core/test/bundling/hello_world/bundle.min.js.br - destination: core/hello_world/bundle.br - - store_artifacts: - path: dist/bin/packages/core/test/bundling/todo/bundle.min.js.br - destination: core/todo/bundle.br - - # NOTE: This is currently limited to master builds only. See the `monitoring` configuration. - saucelabs_view_engine: - executor: - name: default-executor - # In order to avoid the bottleneck of having a slow host machine, we acquire a better - # container for this job. This is necessary because we launch a lot of browsers concurrently - # and therefore the tunnel and Karma need to process a lot of file requests and tests. - resource_class: xlarge - steps: - - custom_attach_workspace - - init_environment - - init_saucelabs_environment - - run: - name: Run Bazel tests on Saucelabs with ViewEngine - # See /tools/saucelabs/README.md for more info - command: | - yarn bazel run //tools/saucelabs:sauce_service_setup - TESTS=$(./node_modules/.bin/bazelisk query --output label '(kind(karma_web_test, ...) intersect attr("tags", "saucelabs", ...)) except attr("tags", "ivy-only", ...) except attr("tags", "fixme-saucelabs-ve", ...)') - yarn bazel test --config=saucelabs ${TESTS} - yarn bazel run //tools/saucelabs:sauce_service_stop - no_output_timeout: 40m - - notify_webhook_on_fail: - webhook_url_env_var: SLACK_DEV_INFRA_CI_FAILURES_WEBHOOK_URL - - # NOTE: This is currently limited to master builds only. See the `monitoring` configuration. - saucelabs_ivy: - executor: - name: default-executor - # In order to avoid the bottleneck of having a slow host machine, we acquire a better - # container for this job. This is necessary because we launch a lot of browsers concurrently - # and therefore the tunnel and Karma need to process a lot of file requests and tests. - resource_class: xlarge - steps: - - custom_attach_workspace - - init_environment - - init_saucelabs_environment - - run: - name: Run Bazel tests on Saucelabs with Ivy - # See /tools/saucelabs/README.md for more info - command: | - yarn bazel run //tools/saucelabs:sauce_service_setup - TESTS=$(./node_modules/.bin/bazelisk query --output label '(kind(karma_web_test, ...) intersect attr("tags", "saucelabs", ...)) except attr("tags", "no-ivy-aot", ...) except attr("tags", "fixme-saucelabs-ivy", ...)') - yarn bazel test --config=saucelabs --config=ivy ${TESTS} - yarn bazel run //tools/saucelabs:sauce_service_stop - no_output_timeout: 40m - - notify_webhook_on_fail: - webhook_url_env_var: SLACK_DEV_INFRA_CI_FAILURES_WEBHOOK_URL - test_aio: executor: default-executor steps: @@ -393,10 +266,6 @@ jobs: - run: yarn --cwd aio test-pwa-score-localhost $CI_AIO_MIN_PWA_SCORE # Run accessibility tests - run: yarn --cwd aio test-a11y-score-localhost - # Check the bundle sizes. - - run: yarn --cwd aio payload-size - # Run unit tests for Firebase redirects - - run: yarn --cwd aio redirects-test deploy_aio: executor: default-executor @@ -426,8 +295,6 @@ jobs: - run: yarn --cwd aio e2e --configuration=ci # Run PWA-score tests - run: yarn --cwd aio test-pwa-score-localhost $CI_AIO_MIN_PWA_SCORE - # Check the bundle sizes. - - run: yarn --cwd aio payload-size aio-local<<# parameters.viewengine >>-viewengine<> test_aio_tools: executor: default-executor @@ -441,26 +308,6 @@ jobs: - run: yarn --cwd aio tools-test - run: ./aio/aio-builds-setup/scripts/test.sh - test_docs_examples: - parameters: - viewengine: - type: boolean - default: false - executor: - name: default-executor - resource_class: xlarge - parallelism: 5 - steps: - - custom_attach_workspace - - init_environment - - install_chrome_libs - # Install aio - - run: yarn --cwd aio install --frozen-lockfile --non-interactive - # Run examples tests. The "CIRCLE_NODE_INDEX" will be set if "parallelism" is enabled. - # Since the parallelism is set to "5", there will be five parallel CircleCI containers. - # with either "0", "1", etc as node index. This can be passed to the "--shard" argument. - - run: yarn --cwd aio example-e2e --setup --local <<# parameters.viewengine >>--viewengine<> --cliSpecsConcurrency=5 --shard=${CIRCLE_NODE_INDEX}/${CIRCLE_NODE_TOTAL} --retry 2 - # This job should only be run on PR builds, where `CI_PULL_REQUEST` is not `false`. aio_preview: executor: default-executor @@ -489,7 +336,6 @@ jobs: name: Wait for preview and run tests command: node aio/scripts/test-preview.js $CI_PULL_REQUEST $CI_COMMIT $CI_AIO_MIN_PWA_SCORE - # The `build-npm-packages` tasks exist for backwards-compatibility with old scripts and # tests that rely on the pre-Bazel `dist/packages-dist` output structure (build.sh). # Having multiple jobs that independently build in this manner duplicates some work; we build @@ -501,7 +347,7 @@ jobs: build-npm-packages: executor: name: default-executor - resource_class: xlarge + resource_class: medium steps: - custom_attach_workspace - init_environment @@ -523,246 +369,6 @@ jobs: - "~/bazel_repository_cache" - "~/.cache/bazelisk" - # Build the ivy npm packages. - build-ivy-npm-packages: - executor: - name: default-executor - resource_class: xlarge - steps: - - custom_attach_workspace - - init_environment - - run: node scripts/build/build-ivy-npm-packages.js - - # Save the npm packages from //packages/... for other workflow jobs to read - - persist_to_workspace: - root: *workspace_location - paths: - - ng/dist/packages-dist-ivy-aot - - ng/dist/zone.js-dist-ivy-aot - - # This job creates compressed tarballs (`.tgz` files) for all Angular packages and stores them as - # build artifacts. This makes it easy to try out changes from a PR build for testing purposes. - # More info CircleCI build artifacts: https://circleci.com/docs/2.0/artifacts - # - # NOTE: Currently, this job only runs for PR builds. See `publish_snapshot` for non-PR builds. - publish_packages_as_artifacts: - executor: default-executor - environment: - NG_PACKAGES_DIR: &ng_packages_dir 'dist/packages-dist' - NG_PACKAGES_ARCHIVES_DIR: &ng_packages_archives_dir 'dist/packages-dist-archives' - ZONEJS_PACKAGES_DIR: &zonejs_packages_dir 'dist/zone.js-dist' - ZONEJS_PACKAGES_ARCHIVES_DIR: &zonejs_packages_archives_dir 'dist/zone.js-dist-archives' - steps: - - custom_attach_workspace - - init_environment - # Publish `@angular/*` packages. - - run: - name: Create artifacts for @angular/* packages - command: ./scripts/ci/create-package-archives.sh $CI_BRANCH $CI_COMMIT $NG_PACKAGES_DIR $NG_PACKAGES_ARCHIVES_DIR - - store_artifacts: - path: *ng_packages_archives_dir - destination: angular - # Publish `zone.js` package. - - run: - name: Create artifacts for zone.js package - command: ./scripts/ci/create-package-archives.sh $CI_BRANCH $CI_COMMIT $ZONEJS_PACKAGES_DIR $ZONEJS_PACKAGES_ARCHIVES_DIR - - store_artifacts: - path: *zonejs_packages_archives_dir - destination: zone.js - - # This job updates the content of repos like github.com/angular/core-builds - # for every green build on angular/angular. - publish_snapshot: - executor: default-executor - steps: - # See below - ideally this job should not trigger for non-upstream builds. - # But since it does, we have to check this condition. - - run: - name: Skip this job for Pull Requests and Fork builds - # Note: Using `CIRCLE_*` env variables (instead of those defined in `env.sh` so that this - # step can be run before `init_environment`. - command: > - if [[ -n "${CIRCLE_PR_NUMBER}" ]] || - [[ "$CIRCLE_PROJECT_USERNAME" != "angular" ]] || - [[ "$CIRCLE_PROJECT_REPONAME" != "angular" ]]; then - circleci step halt - fi - - custom_attach_workspace - - init_environment - # CircleCI has a config setting to force SSH for all github connections - # This is not compatible with our mechanism of using a Personal Access Token - # Clear the global setting - - run: git config --global --unset "url.ssh://git@github.com.insteadof" - - run: - name: Decrypt github credentials - # We need ensure that the same default digest is used for encoding and decoding with - # OpenSSL. OpenSSL versions might have different default digests which can cause - # decryption failures based on the installed OpenSSL version. https://stackoverflow.com/a/39641378/4317734 - command: 'openssl aes-256-cbc -d -in .circleci/github_token -md md5 -k "${KEY}" -out ~/.git_credentials' - - run: ./scripts/ci/publish-build-artifacts.sh - - aio_monitoring_stable: - executor: default-executor - steps: - - custom_attach_workspace - - init_environment - - install_chrome_libs - - run: setPublicVar_CI_STABLE_BRANCH - - run: - name: Check out `aio/` and yarn from the stable branch - command: | - git fetch origin $CI_STABLE_BRANCH - git checkout --force origin/$CI_STABLE_BRANCH -- aio/ .yarn/ .yarnrc - # Ignore yarn's engines check, because we checked out `aio/package.json` from the stable - # branch and there could be a node version skew, which is acceptable in this monitoring job. - - run: yarn config set ignore-engines true - - run: - name: Run tests against https://angular.io/ - command: ./aio/scripts/test-production.sh https://angular.io/ $CI_AIO_MIN_PWA_SCORE - - notify_webhook_on_fail: - webhook_url_env_var: SLACK_CARETAKER_WEBHOOK_URL - - notify_webhook_on_fail: - webhook_url_env_var: SLACK_DEV_INFRA_CI_FAILURES_WEBHOOK_URL - - aio_monitoring_next: - executor: default-executor - steps: - - custom_attach_workspace - - init_environment - - install_chrome_libs - - run: - name: Run tests against https://next.angular.io/ - command: ./aio/scripts/test-production.sh https://next.angular.io/ $CI_AIO_MIN_PWA_SCORE - - notify_webhook_on_fail: - webhook_url_env_var: SLACK_CARETAKER_WEBHOOK_URL - - notify_webhook_on_fail: - webhook_url_env_var: SLACK_DEV_INFRA_CI_FAILURES_WEBHOOK_URL - - legacy-unit-tests-saucelabs: - executor: - name: default-executor - # In order to avoid the bottleneck of having a slow host machine, we acquire a better - # container for this job. This is necessary because we launch a lot of browsers concurrently - # and therefore the tunnel and Karma need to process a lot of file requests and tests. - resource_class: xlarge - steps: - - custom_attach_workspace - - init_environment - - init_saucelabs_environment - - run: - name: Starting Saucelabs tunnel service - command: ./tools/saucelabs/sauce-service.sh run - background: true - - run: yarn tsc -p packages - - run: yarn tsc -p modules - - run: yarn bazel build //packages/zone.js:npm_package - - run: - # Waiting on ready ensures that we don't run tests too early without Saucelabs not being ready. - name: Waiting for Saucelabs tunnel to connect - command: ./tools/saucelabs/sauce-service.sh ready-wait - - run: - name: Running tests on Saucelabs. - command: | - browsers=$(node -e 'console.log(require("./browser-providers.conf").sauceAliases.CI_REQUIRED.join(","))') - yarn karma start ./karma-js.conf.js --single-run --browsers=${browsers} - - run: - name: Stop Saucelabs tunnel service - command: ./tools/saucelabs/sauce-service.sh stop - - # Job that runs all unit tests of the `angular/components` repository. - components-repo-unit-tests: - executor: - name: default-executor - resource_class: xlarge - steps: - - custom_attach_workspace - - init_environment - # Restore the cache before cloning the repository because the clone script re-uses - # the restored repository if present. This reduces the amount of times the components - # repository needs to be cloned (this is slow and increases based on commits in the repo). - - restore_cache: - keys: - - *components_repo_unit_tests_cache_key - # Whenever the `angular/components` SHA is updated, the cache key will no longer - # match. The fallback cache will still match, and CircleCI will restore the most - # recently cached repository folder. Without the fallback cache, we'd need to download - # the repository from scratch and it would slow down the job. This is because we can't - # clone the repository with reduced `--depth`, but rather need to clone the whole - # repository to be able to support arbitrary SHAs. - - *components_repo_unit_tests_cache_key_fallback - - run: - name: "Fetching angular/components repository" - command: ./scripts/ci/clone_angular_components_repo.sh - - run: - # Run yarn install to fetch the Bazel binaries as used in the components repo. - name: Installing dependencies. - # TODO: remove this once the repo has been updated to use NodeJS v12 and Yarn 1.19.1. - # We temporarily ignore the "engines" because the Angular components repository has - # minimum dependency on NodeJS v12 and Yarn 1.19.1, but the framework repository uses - # older versions. - command: yarn --ignore-engines --cwd ${COMPONENTS_REPO_TMP_DIR} install --frozen-lockfile --non-interactive - - save_cache: - key: *components_repo_unit_tests_cache_key - paths: - # Temporary directory must be kept in sync with the `$COMPONENTS_REPO_TMP_DIR` env - # variable. It needs to be hardcoded here, because env variables interpolation is - # not supported. - - "/tmp/angular-components-repo" - - run: - # Updates the `angular/components` `package.json` file to refer to the release output - # inside the `packages-dist` directory. Note that it's not necessary to perform a yarn - # install as Bazel runs Yarn automatically when needed. - name: Setting up release packages. - command: node scripts/ci/update-deps-to-dist-packages.js ${COMPONENTS_REPO_TMP_DIR}/package.json dist/packages-dist/ - - run: - name: "Running `angular/components` unit tests" - command: ./scripts/ci/run_angular_components_unit_tests.sh - - test_zonejs: - executor: - name: default-executor - resource_class: xlarge - steps: - - custom_attach_workspace - - init_environment - # Install - - run: yarn --cwd packages/zone.js install --frozen-lockfile --non-interactive - # Run zone.js tools tests - - run: yarn --cwd packages/zone.js promisetest - - run: yarn --cwd packages/zone.js promisefinallytest - - run: yarn bazel build //packages/zone.js:npm_package && - cp dist/bin/packages/zone.js/npm_package/bundles/zone-mix.umd.js ./packages/zone.js/test/extra/ && - cp dist/bin/packages/zone.js/npm_package/bundles/zone-patch-electron.umd.js ./packages/zone.js/test/extra/ && - yarn --cwd packages/zone.js electrontest - - run: yarn --cwd packages/zone.js jesttest - - # Windows jobs - # Docs: https://circleci.com/docs/2.0/hello-world-windows/ - test_win: - executor: windows-executor - steps: - - setup_win - - run: - # Ran into a command parsing problem where `-browser:chromium-local` was converted to - # `-browser: chromium-local` (a space was added) in https://circleci.com/gh/angular/angular/357511. - # Probably a powershell command parsing thing. There's no problem using a yarn script though. - command: yarn circleci-win-ve - no_output_timeout: 45m - # Save bazel repository cache to use on subsequent runs. - # We don't save node_modules because it's faster to use the linux workspace and reinstall. - - save_cache: - key: *cache_key_win - paths: - - "C:/Users/circleci/bazel_repository_cache" - - test_ivy_aot_win: - executor: windows-executor - steps: - - setup_win - - run: - command: yarn circleci-win-ivy - no_output_timeout: 45m - workflows: version: 2 @@ -775,21 +381,9 @@ workflows: - lint: requires: - setup - - test: - requires: - - setup - - test_ivy_aot: - requires: - - setup - build-npm-packages: requires: - setup - - build-ivy-npm-packages: - requires: - - setup - - legacy-unit-tests-saucelabs: - requires: - - setup - test_aio: requires: - setup @@ -799,22 +393,9 @@ workflows: - test_aio_local: requires: - build-npm-packages - - test_aio_local: - name: test_aio_local_viewengine - viewengine: true - requires: - - build-npm-packages - test_aio_tools: requires: - build-npm-packages - - test_docs_examples: - requires: - - build-npm-packages - - test_docs_examples: - name: test_docs_examples_viewengine - viewengine: true - requires: - - build-npm-packages - aio_preview: # Only run on PR builds. (There can be no previews for non-PR builds.) <<: *only_on_pull_requests @@ -823,78 +404,3 @@ workflows: - test_aio_preview: requires: - aio_preview - - publish_packages_as_artifacts: - requires: - - build-npm-packages - - publish_snapshot: - # Note: no filters on this job because we want it to run for all upstream branches - # We'd really like to filter out pull requests here, but not yet available: - # https://discuss.circleci.com/t/workflows-pull-request-filter/14396/4 - # Instead, the job just exits immediately at the first step. - requires: - # Only publish if tests and integration tests pass - - test - - test_ivy_aot - # Only publish if `aio`/`docs` tests using the locally built Angular packages pass - - test_aio_local - - test_aio_local_viewengine - - test_docs_examples - - test_docs_examples_viewengine - # Get the artifacts to publish from the build-packages-dist job - # since the publishing script expects the legacy outputs layout. - - build-npm-packages - - build-ivy-npm-packages - - legacy-unit-tests-saucelabs - - components-repo-unit-tests: - requires: - - build-npm-packages - - test_zonejs: - requires: - - setup - # Windows Jobs - # These are very slow so we run them on non-PRs only for now. - # TODO: remove the filter when CircleCI makes Windows FS faster. - # The Windows jobs are only run after their non-windows counterparts finish successfully. - # This isn't strictly necessary as there is no artifact dependency, but helps economize - # CI resources by not attempting to build when we know should fail. - - test_win: - <<: *skip_on_pull_requests - requires: - - test - - test_ivy_aot_win: - <<: *skip_on_pull_requests - requires: - - test_ivy_aot - - monitoring: - jobs: - - setup - - aio_monitoring_stable: - requires: - - setup - - aio_monitoring_next: - requires: - - setup - - saucelabs_ivy: - # Testing saucelabs via Bazel currently taking longer than the legacy saucelabs job as it - # each karma_web_test target is provisioning and tearing down browsers which is adding - # a lot of overhead. Running once daily on master only to avoid wasting resources and - # slowing down CI for PRs. - # TODO: Run this job on all branches (including PRs) once karma_web_test targets can - # share provisioned browsers and we can remove the legacy saucelabs job. - requires: - - setup - - saucelabs_view_engine: - # Testing saucelabs via Bazel currently taking longer than the legacy saucelabs job as it - # each karma_web_test target is provisioning and tearing down browsers which is adding - # a lot of overhead. Running once daily on master only to avoid wasting resources and - # slowing down CI for PRs. - # TODO: Run this job on all branches (including PRs) once karma_web_test targets can - # share provisioned browsers and we can remove the legacy saucelabs job. - requires: - - setup - triggers: - - schedule: - <<: *only_on_master - # Runs monitoring jobs at 10:00AM every day. - cron: "0 10 * * *" diff --git a/.circleci/env.sh b/.circleci/env.sh index 93b4130587e3..465e1c82fdf2 100755 --- a/.circleci/env.sh +++ b/.circleci/env.sh @@ -17,7 +17,7 @@ echo "source $envHelpersPath;" >> $BASH_ENV; #################################################################################################### setPublicVar CI "$CI" setPublicVar PROJECT_ROOT "$projectDir"; -setPublicVar CI_AIO_MIN_PWA_SCORE "95"; +setPublicVar CI_AIO_MIN_PWA_SCORE "62"; # This is the branch being built; e.g. `pull/12345` for PR builds. setPublicVar CI_BRANCH "$CIRCLE_BRANCH"; setPublicVar CI_BUILD_URL "$CIRCLE_BUILD_URL"; diff --git a/.github/ISSUE_TEMPLATE/1-bug-report.md b/.github/ISSUE_TEMPLATE/1-bug-report.md deleted file mode 100644 index 39b3eb686232..000000000000 --- a/.github/ISSUE_TEMPLATE/1-bug-report.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -name: "\U0001F41EBug report" -about: Report a bug in the Angular Framework ---- - - - -# ๐Ÿž bug report - -### Affected Package - - The issue is caused by package @angular/.... - - -### Is this a regression? - - - Yes, the previous version in which this bug was not present was: .... - - -### Description - - A clear and concise description of the problem... - - -## ๐Ÿ”ฌ Minimal Reproduction - - https://stackblitz.com/... - - - -## ๐Ÿ”ฅ Exception or Error -

-
-
-
-
- - -## ๐ŸŒ Your Environment - -**Angular Version:** -

-
-
-
-
- -**Anything else relevant?** - - - diff --git a/.github/ISSUE_TEMPLATE/2-feature-request.md b/.github/ISSUE_TEMPLATE/2-feature-request.md deleted file mode 100644 index 2a85f8237581..000000000000 --- a/.github/ISSUE_TEMPLATE/2-feature-request.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: "\U0001F680Feature request" -about: Suggest a feature for Angular Framework - ---- - - - -# ๐Ÿš€ feature request - -### Relevant Package - - This feature request is for @angular/.... - - -### Description - A clear and concise description of the problem or missing capability... - - -### Describe the solution you'd like - If you have a solution in mind, please describe it. - - -### Describe alternatives you've considered - Have you considered any alternative solutions or workarounds? diff --git a/.github/ISSUE_TEMPLATE/3-docs-bug.md b/.github/ISSUE_TEMPLATE/3-docs-bug.md deleted file mode 100644 index c7ed324cce15..000000000000 --- a/.github/ISSUE_TEMPLATE/3-docs-bug.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -name: "๐Ÿ“š Docs or angular.io issue report" -about: Report an issue in Angular's documentation or angular.io application - ---- - - -# ๐Ÿ“š Docs or angular.io bug report - -### Description - - A clear and concise description of the problem... - - -## ๐Ÿ”ฌ Minimal Reproduction - -### What's the affected URL?** - https://angular.io/... - -### Reproduction Steps** - - - -### Expected vs Actual Behavior** - - - - -## ๐Ÿ“ทScreenshot - - - - -## ๐Ÿ”ฅ Exception or Error -

-
-
-
-
- - -## ๐ŸŒ Your Environment - -### Browser info - - -### Anything else relevant? - diff --git a/.github/ISSUE_TEMPLATE/4-security-issue-disclosure.md b/.github/ISSUE_TEMPLATE/4-security-issue-disclosure.md deleted file mode 100644 index 70736318d2a3..000000000000 --- a/.github/ISSUE_TEMPLATE/4-security-issue-disclosure.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: โš ๏ธ Security issue disclosure -about: Report a security issue in Angular Framework, Material, or CLI - ---- - -๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘ - -Please read https://angular.io/guide/security#report-issues on how to disclose security related issues. - -๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘ diff --git a/.github/ISSUE_TEMPLATE/5-support-request.md b/.github/ISSUE_TEMPLATE/5-support-request.md deleted file mode 100644 index 2dbeb3061294..000000000000 --- a/.github/ISSUE_TEMPLATE/5-support-request.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: "โ“Support request" -about: Questions and requests for support - ---- - -๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘ - -Please do not file questions or support requests on the GitHub issues tracker. - -You can get your questions answered using other communication channels. Please see: -https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question - -Thank you! - -๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘ diff --git a/.github/ISSUE_TEMPLATE/6-angular-cli.md b/.github/ISSUE_TEMPLATE/6-angular-cli.md deleted file mode 100644 index 8bad6e69cd3b..000000000000 --- a/.github/ISSUE_TEMPLATE/6-angular-cli.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: "\U0001F6E0๏ธAngular CLI" -about: Issues and feature requests for Angular CLI - ---- - -๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘ - -Please file any Angular CLI issues at: https://github.com/angular/angular-cli/issues/new - -For the time being, we keep Angular CLI issues in a separate repository. - -๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘ diff --git a/.github/ISSUE_TEMPLATE/7-angular-components.md b/.github/ISSUE_TEMPLATE/7-angular-components.md deleted file mode 100644 index 181b418b5501..000000000000 --- a/.github/ISSUE_TEMPLATE/7-angular-components.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: "\U0001F48EAngular Components" -about: Issues and feature requests for Angular Components - ---- - -๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘ - -Please file any Angular Components issues at: https://github.com/angular/components/issues/new - -For the time being, we keep Angular Components issues in a separate repository. - -๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘๐Ÿ›‘ diff --git a/.github/ISSUE_TEMPLATE/8-translate-docs.md b/.github/ISSUE_TEMPLATE/8-translate-docs.md new file mode 100644 index 000000000000..f724afcd9169 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/8-translate-docs.md @@ -0,0 +1,22 @@ +--- +name: "๐Ÿ“šTraducir doc al espaรฑol" +about: Solicitud para traducir ciertos docs al espaรฑol + +--- + +๐Ÿ“šTraducir: creating-libraries.md + + + + +## Nombre del archivo: + creating-libraries.md + + +## Ruta donde se encuentra el archivo dentro del proyecto de Angular + + https://github.com/angular-hispano/angular/blob/master/aio/content/guide/creating-libraries.md \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index ffec1591b654..f0f58e8a8727 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,43 +1,35 @@ -## PR Checklist -Please check if your PR fulfills the following requirements: +## Lista de Verificaciรณn del PR +Comprueba si tu PR cumple los siguientes requisitos: -- [ ] The commit message follows our guidelines: https://github.com/angular/angular/blob/master/CONTRIBUTING.md#commit -- [ ] Tests for the changes have been added (for bug fixes / features) -- [ ] Docs have been added / updated (for bug fixes / features) +- [ ] El mensaje de commit esta conforme con [nuestras reglas](https://github.com/angular-hispano/angular/blob/master/CONTRIBUTING.md#-formato-para-el-mensaje-de-los-commits) +- [ ] Probe los cambios que agreguรฉ (arreglo de bugs / funcionalidades) +- [ ] Revisรฉ previamente las traducciones o cambios de contenido +- [ ] Consultรฉ el [diccionario de tรฉrminos](https://github.com/angular-hispano/angular/blob/master/aio/diccionario-de-tรฉrminos.md) en espaรฑol +- [ ] He creado dos archivos con la extensiรณn correspondiente(.en.md para el archivo en inglรฉs y .md para el Archivo en espaรฑol) +- [ ] He enlazado el commit con el issue correspondiente -## PR Type -What kind of change does this PR introduce? +## Tipo de PR +ยฟQuรฉ tipo de cambio introduce este PR? - + - [ ] Bugfix -- [ ] Feature -- [ ] Code style update (formatting, local variables) -- [ ] Refactoring (no functional changes, no api changes) -- [ ] Build related changes -- [ ] CI related changes -- [ ] Documentation content changes -- [ ] angular.io application / infrastructure changes -- [ ] Other... Please describe: - - -## What is the current behavior? - - -Issue Number: N/A - - -## What is the new behavior? - - -## Does this PR introduce a breaking change? - -- [ ] Yes -- [ ] No - - - - - -## Other information +- [ ] Funcionalidad +- [ ] Actualizaciรณn de el estilo del cรณdigo (formato, variables locales) +- [ ] Refactorizaciรณn (no cambios en la funcionalidad, no cambios en el api) +- [ ] Cambios relacionados al build +- [ ] Cambios relacionados al CI (Integraciรณn continua) +- [ ] Cambios en el contenido de la documentaciรณn +- [ ] Cambios en la aplicaciรณn / infraestructura de angular.io +- [ ] Otro... Por favor describe la: + +## ยฟCuรกl es el comportamiento actual? + + + +## ยฟCuรกl es el nuevo comportamiento? + diff --git a/.ng-dev/commit-message.ts b/.ng-dev/commit-message.ts index 5e2215509149..25033dd70403 100644 --- a/.ng-dev/commit-message.ts +++ b/.ng-dev/commit-message.ts @@ -6,7 +6,7 @@ import {CommitMessageConfig} from '../dev-infra/commit-message/config'; export const commitMessage: CommitMessageConfig = { maxLineLength: 120, minBodyLength: 20, - minBodyLengthTypeExcludes: ['docs'], + minBodyLengthTypeExcludes: ['docs', 'upstream'], types: [ 'build', 'ci', @@ -18,6 +18,7 @@ export const commitMessage: CommitMessageConfig = { 'release', 'style', 'test', + 'upstream', ], scopes: [ 'animations', diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 7ea7f3dda0cd..b765ab394d34 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,12 +1,72 @@ -# Contributor Code of Conduct -## Version 0.3b-angular +# Cรณdigo de Conducta -As contributors and maintainers of the Angular project, we pledge to respect everyone who contributes by posting issues, updating documentation, submitting pull requests, providing feedback in comments, and any other activities. +## 1. Propรณsito -Communication through any of Angular's channels (GitHub, Gitter, IRC, mailing lists, Google+, Twitter, etc.) must be constructive and never resort to personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct. +โ€œPrometemos brindar cortesรญa y respeto a cualquier persona involucrada en esta comunidad, sin importar el gรฉnero con el que se identifique, su orientaciรณn sexual, limitaciรณn fรญsica, edad, raza, etnia, religiรณn o nivel de conocimiento. Esperamos que cualquiera que desee contribuir en este proyecto brinde el mismo comportamientoโ€ -We promise to extend courtesy and respect to everyone involved in this project regardless of gender, gender identity, sexual orientation, disability, age, race, ethnicity, religion, or level of experience. We expect anyone contributing to the Angular project to do the same. +Bajo ese principio queremos enfocar esta comunidad, una comunidad de respeto por el otro, donde cualquiera que sienta pasiรณn por Angular y desee involucrarse con cualquier tipo de actividad deberรก ayudar a mantener una atmรณsfera de cortesรญa por el otro, respetando los pensamientos, acciones, ideales y propuestas del otro. -If any member of the community violates this code of conduct, the maintainers of the Angular project may take action, removing issues, comments, and PRs or blocking accounts as deemed appropriate. +## 2. Comportamiento esperado -If you are subject to or witness unacceptable behavior, or have any other concerns, please email us at [conduct@angular.io](mailto:conduct@angular.io). +- Evitar usar expresiones o gestos insultantes, humillantes o intimidatorios para referirnos a otros. +- Ejercita la consideraciรณn y el respeto en tus comunicaciones y acciones. +- Abstรฉnte de adoptar una conducta y un lenguaje degradantes, discriminatorios, abusivos o acosadores. +- Evitar comportamientos que agredan las expresiones de identidad, gรฉnero, creencias religiosas, acciones que lastimen o los aรญslen a otros. +- Evitar comentarios sobre ideas polรญticas. +- No se toleran conductas fรญsicas y actitudes dirigidas al descrรฉdito personal, fรญsico o emocional de cualquier persona. +- No se toleran chistes y comentarios excluyentes, sexistas y racistas. +- Se rechaza actitudes de hostigamiento. +- Se rechaza el acoso: este se entiende como cualquier tipo de comentario verbal que refuerce discriminaciรณn por gรฉnero, identidad y expresiรณn de gรฉnero, orientaciรณn sexual, discapacidad, apariencia fรญsica, tamaรฑo corporal, raza, edad o religiรณn en contextos laborales o sociales. +- No se tolera el contacto fรญsico y/o la atenciรณn sexual no deseada. +- Promover la igualdad de oportunidades de formaciรณn, educaciรณn, intercambio y retroalimentaciรณn antes, durante y despuรฉs de los eventos. +- Intenta colaborar en lugar de generar conflicto. +- Sรฉ consciente de tu entorno y de tus compaรฑeros participantes. Alerta a lรญderes de la comunidad si notas una situaciรณn peligrosa, alguien en apuros, o violaciones de este Cรณdigo de Conducta, incluso si parecen intrascendentes. + +## 3. Comportamiento inaceptable +Comportamientos inaceptables incluyen: intimidaciรณn, acoso, abuso, discriminaciรณn, comunicaciรณn despectiva o degradante o acciones por cualquier participante en nuestra comunidad ya sea virtual, o en las comunicaciones uno-a-uno que se realizan en el contexto de la comunidad. Por favor ser respetuoso con todos. + +El acoso incluye: comentarios nocivos o perjudiciales, verbales o escritos relacionados con el gรฉnero, la orientaciรณn sexual, raza, religiรณn, discapacidad; uso inadecuado de desnudos y / o imรกgenes sexuales en espacios pรบblicos (incluyendo la presentaciรณn diapositivas); intimidaciรณn deliberada, acecho o seguimiento; fotografรญas o grabaciones acosadoras; interrupciรณn sostenida de charlas y otros eventos; contacto fรญsico inapropiado, y atenciรณn sexual no deseada. + +## 4. Consecuencias de comportamiento inaceptable +Se espera que personas a quienes se les solicite que detengan su comportamiento inaceptable lo hagan de manera inmediata esto serรก vรกlido para cualquier miembro de la comunidad. + +En caso de presentarse una violaciรณn al cรณdigo de conducta de manera repetida se tendrรก cero tolerancia a este comportamiento por parte de los organizadores. + +Si un miembro de la comunidad participa en una conducta inaceptable, los organizadores pueden tomar cualquier acciรณn que consideren apropiada, hasta e incluyendo una prohibiciรณn temporal o expulsiรณn permanente de la comunidad, sin previo aviso. + +Priorizamos la seguridad de las personas marginadas sobre la comodidad de las personas privilegiadas. Nos reservamos el derecho de no actuar sobre las quejas relacionadas con: + +- El "racismo inverso", "sexismo inverso" y "cisfobia". +- Comunicaciรณn razonable de lรญmites, como "dรฉjame en paz", "vete" o "no estoy discutiendo esto contigo". +- Al comunicarse en un "tono", no se encuentra agradable. +- Identificando comportamientos o suposiciones racistas, sexistas, cissexistas u opresivas. + +## 5. ยฟQuรฉ hacer si se incumple el cรณdigo de conducta? +Si eres vรญctima o testigo de una conducta inaceptable, o tienes cualquier inquietud, por favor comunรญcate con el equipo organizador lo antes posible: + +- Mensaje directo: Michael Prentice (@splaktar) +- Mensaje directo: Jorge Cano (@jorgeucano) +- Mensaje directo: Andrรฉs Villanueva (@villanuevand) +- Email: [soporte@angular.lat](mailto:soporte@angular.lat) + +### ยฟQuรฉ pasa despuรฉs? +- Una vez haya sido notificada el no cumplimiento de la norma, el equipo de liderazgo se reunirรกn y analizarรกn el caso. +- Los incidentes presentados se manejarรกn con discreciรณn. +- Los organizadores se comunicarรกn con la persona que incumpliรณ la norma y tomarรกn las medidas respectivas. +- Se realizarรก un acompaรฑamiento a la persona agredida y se apoyarรก. +- Si el incidente se hace pรบblico, Angular Hispano no se hace responsable de los perjuicios que esto pueda ocasionar en el agresor o el agredido. + +## 6. Alcance +Esperamos que todos los participantes de la comunidad (organizadores, voluntarios, contribuyentes pagados o de otro modo; patrocinadores; y otros invitados) se atengan a este Cรณdigo de Conducta en todos los espacios virtuales y presenciales, asรญ como en todas las comunicaciones de uno-a-uno pertinentes la comunidad. + +### Colaboradores + +- Alejandra Giraldo +- Vanessa Marely +- Mariano Alvarez +- Andrรฉs Villanueva +- Michael Prentice +- javascript&friends +- Angular +- She Codes Angular +- Colombia dev \ No newline at end of file diff --git a/CONTRIBUTING.en.md b/CONTRIBUTING.en.md new file mode 100644 index 000000000000..3ec3a41f0af1 --- /dev/null +++ b/CONTRIBUTING.en.md @@ -0,0 +1,359 @@ +# Contributing to Angular + +We would love for you to contribute to Angular and help make it even better than it is today! +As a contributor, here are the guidelines we would 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) + + +## Code of Conduct + +Help us keep Angular open and inclusive. +Please read and follow our [Code of Conduct][coc]. + + +## Got a Question or Problem? + +Do not open issues for general support questions as we want to keep GitHub issues for bug reports and feature requests. +Instead, we recommend using [Stack Overflow](https://stackoverflow.com/questions/tagged/angular) to ask support-related questions. When creating a new question on Stack Overflow, make sure to add the `angular` tag. + +Stack Overflow is a much better place to ask questions since: + +- there are thousands of people willing to help on Stack Overflow +- questions and answers stay available for public viewing so your question/answer might help someone else +- Stack Overflow's voting system assures that the best answers are prominently visible. + +To save your and our time, we will systematically close all issues that are requests for general support and redirect people to Stack Overflow. + +If you would like to chat about the question in real-time, you can reach out via [our gitter channel][gitter]. + + +## Found a Bug? + +If you find a bug in the source code, you can help us by [submitting an issue](#submit-issue) to our [GitHub Repository][github]. +Even better, you can [submit a Pull Request](#submit-pr) with a fix. + + +## Missing a Feature? +You can *request* a new feature by [submitting an issue](#submit-issue) to our GitHub Repository. +If you would like to *implement* a new feature, please consider the size of the change in order to determine the right steps to proceed: + +* For a **Major Feature**, first open an issue and outline your proposal so that it can be discussed. + This process allows us to better coordinate our efforts, prevent duplication of work, and help you to craft the change so that it is successfully accepted into the project. + + **Note**: Adding a new topic to the documentation, or significantly re-writing a topic, counts as a major feature. + +* **Small Features** can be crafted and directly [submitted as a Pull Request](#submit-pr). + + +## Submission Guidelines + + +### Submitting an Issue + +Before you submit an issue, please search the issue tracker, maybe an issue for your problem already exists and the discussion might inform you of workarounds readily available. + +We want to fix all the issues as soon as possible, but before fixing a bug we need to reproduce and confirm it. +In order to reproduce bugs, we require that you provide a minimal reproduction. +Having a minimal reproducible scenario gives us a wealth of important information without going back and forth to you with additional questions. + +A minimal reproduction allows us to quickly confirm a bug (or point out a coding problem) as well as confirm that we are fixing the right problem. + +We require a minimal reproduction to save maintainers' time and ultimately be able to fix more bugs. +Often, developers find coding problems themselves while preparing a minimal reproduction. +We understand that sometimes it might be hard to extract essential bits of code from a larger codebase but we really need to isolate the problem before we can fix it. + +Unfortunately, we are not able to investigate / fix bugs without a minimal reproduction, so if we don't hear back from you, we are going to close an issue that doesn't have enough info to be reproduced. + +You can file new issues by selecting from our [new issue templates](https://github.com/angular/angular/issues/new/choose) and filling out the issue template. + + +### Submitting a Pull Request (PR) + +Before you submit your Pull Request (PR) consider the following guidelines: + +1. Search [GitHub](https://github.com/angular/angular/pulls) for an open or closed PR that relates to your submission. + You don't want to duplicate existing efforts. + +2. Be sure that an issue describes the problem you're fixing, or documents the design for the feature you'd like to add. + Discussing the design upfront helps to ensure that we're ready to accept your work. + +3. Please sign our [Contributor License Agreement (CLA)](#cla) before sending PRs. + We cannot accept code without a signed CLA. + Make sure you author all contributed Git commits with email address associated with your CLA signature. + +4. Fork the angular/angular repo. + +5. Make your changes in a new git branch: + + ```shell + git checkout -b my-fix-branch master + ``` + +6. Create your patch, **including appropriate test cases**. + +7. Follow our [Coding Rules](#rules). + +8. Run the full Angular test suite, as described in the [developer documentation][dev-doc], and ensure that all tests pass. + +9. Commit your changes using a descriptive commit message that follows our [commit message conventions](#commit). + Adherence to these conventions is necessary 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. + +10. Push your branch to GitHub: + + ```shell + git push origin my-fix-branch + ``` + +11. In GitHub, send a pull request to `angular:master`. + + If we ask for changes via code reviews then: + + * Make the required updates. + * Re-run the Angular test suites to ensure tests are still passing. + * Rebase your branch and force push to your GitHub repository (this will update your Pull Request): + + ```shell + git rebase master -i + git push -f + ``` + +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 + ``` + + +## 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-tests). +* All public API methods **must be documented**. +* We follow [Google's JavaScript Style Guide][js-style-guide], but wrap all code at **100 characters**. + + An automated formatter is available, see [DEVELOPER.md](docs/DEVELOPER.md#clang-format). + + +## Commit Message Format + +*This specification is inspired and supersedes the [AngularJS commit message format][commit-message-format].* + +We have very precise rules over how our Git commit messages must be formatted. +This format leads to **easier to read commit history**. + +Each commit message consists of a **header**, a **body**, and a **footer**. + + +``` +
+ + + +