This repository has been archived by the owner on Apr 13, 2022. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
chore(ci): move over to CircleCi config
This commit gets rid of all references to Travis and, belatedly, Jenkins. Now all CI is done on CircleCI and releases are run locally. The CI no longer updates the docs and code.angularjs.org for jobs that are not on the `master` branch. During releases, the docs and code should be uploaded manually.
- Loading branch information
1 parent
974700a
commit a0488b3
Showing
43 changed files
with
6,511 additions
and
4,057 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,380 @@ | ||
# Configuration file for https://circleci.com/gh/angular/angular | ||
|
||
# Note: YAML anchors allow an object to be re-used, reducing duplication. | ||
# The ampersand declares an alias for an object, then later the `<<: *name` | ||
# syntax dereferences it. | ||
# See http://blog.daemonl.com/2016/02/yaml.html | ||
# To validate changes, use an online parser, eg. | ||
# http://yaml-online-parser.appspot.com/ | ||
|
||
# CircleCI configuration version | ||
# Version 2.1 allows for extra config reuse features | ||
# https://circleci.com/docs/2.0/reusing-config/#getting-started-with-config-reuse | ||
version: 2.1 | ||
|
||
# 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 | ||
# https://circleci.com/blog/deep-diving-into-circleci-workspaces/ | ||
var_workspace_location: &workspace_location ~/ | ||
|
||
# Filter to run a job on builds for pull requests only. | ||
var_only_on_pull_requests: &only_on_pull_requests | ||
filters: | ||
branches: | ||
only: | ||
- /pull\/\d+/ | ||
|
||
# Filter to skip a job on builds for pull requests. | ||
var_skip_on_pull_requests: &skip_on_pull_requests | ||
filters: | ||
branches: | ||
ignore: | ||
- /pull\/\d+/ | ||
|
||
# Filter to run a job on builds for the master branch only. | ||
var_only_on_master: &only_on_master | ||
filters: | ||
branches: | ||
only: | ||
- master | ||
|
||
# Executor Definitions | ||
# https://circleci.com/docs/2.0/reusing-config/#authoring-reusable-executors | ||
# **NOTE 1**: Pin to exact images using an ID (SHA). See https://circleci.com/docs/2.0/circleci-images/#using-a-docker-image-id-to-pin-an-image-to-a-fixed-version. | ||
# (Using the tag in not necessary when pinning by ID, but include it anyway for documentation purposes.) | ||
# **NOTE 2**: If you change the version of the docker images, also change the `cache_key` suffix. | ||
# **NOTE 3**: If you change the version of the `*-browsers` docker image, make sure the | ||
# `--versions.chrome` arg in `integration/bazel-schematics/test.sh` specifies a | ||
# ChromeDriver version that is compatible with the Chrome version in the image. | ||
executors: | ||
default-executor: | ||
parameters: | ||
resource_class: | ||
type: string | ||
default: medium | ||
docker: | ||
- image: circleci/node:12.16.3 | ||
resource_class: << parameters.resource_class >> | ||
working_directory: ~/ng | ||
cloud-sdk: | ||
description: The docker container to use when running gcp-gcs commands | ||
docker: | ||
- image: google/cloud-sdk:alpine | ||
|
||
|
||
# Command Definitions | ||
# https://circleci.com/docs/2.0/reusing-config/#authoring-reusable-commands | ||
commands: | ||
custom_attach_workspace: | ||
description: Attach workspace at a predefined location | ||
steps: | ||
- attach_workspace: | ||
at: *workspace_location | ||
|
||
# Install shared libs used by Chrome. | ||
install_chrome_libs: | ||
description: Install shared Chrome libs | ||
steps: | ||
- run: | ||
name: Install shared Chrome libs | ||
command: | | ||
sudo apt-get update | ||
# Install GTK+ graphical user interface (libgtk-3-0), advanced linux sound architecture (libasound2) | ||
# and network security service libraries (libnss3) & X11 Screen Saver extension library (libssx1) | ||
# which are dependendies of chrome & needed for karma & protractor headless chrome tests. | ||
# This is a very small install which takes around 7s in comparing to using the full | ||
# circleci/node:x.x.x-browsers image. | ||
sudo apt-get -y install libgtk-3-0 libasound2 libnss3 libxss1 | ||
install_java: | ||
description: Install java | ||
steps: | ||
- run: | ||
name: Install java | ||
command: | | ||
sudo apt-get update | ||
# Install java runtime | ||
sudo apt-get install default-jre | ||
# Initializes the CI environment by setting up common environment variables. | ||
init_environment: | ||
description: Initializing environment (setting up variables) | ||
steps: | ||
- run: | ||
name: Set up environment | ||
environment: | ||
CIRCLE_GIT_BASE_REVISION: << pipeline.git.base_revision >> | ||
CIRCLE_GIT_REVISION: << pipeline.git.revision >> | ||
command: ./.circleci/env.sh | ||
- run: | ||
# Configure git as the CircleCI `checkout` command does. | ||
# This is needed because we only checkout on the setup job. | ||
# Add GitHub to known hosts | ||
name: Configure git | ||
command: | | ||
mkdir -p ~/.ssh | ||
echo 'github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==' >> ~/.ssh/known_hosts | ||
git config --global url."ssh://git@github.com".insteadOf "https://github.com" || true | ||
git config --global gc.auto 0 || true | ||
- install_java | ||
|
||
init_saucelabs_environment: | ||
description: Sets up a domain that resolves to the local host. | ||
steps: | ||
- run: | ||
name: Preparing environment for running tests on Saucelabs. | ||
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 Saucelabs 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 | ||
|
||
start_saucelabs: | ||
steps: | ||
- run: | ||
name: Starting Saucelabs tunnel service | ||
command: ./lib/saucelabs/sauce-service.sh start-ready-wait | ||
|
||
stop_saucelabs: | ||
steps: | ||
- run: | ||
name: Stopping Saucelabs tunnel service | ||
command: ./lib/saucelabs/sauce-service.sh stop | ||
|
||
|
||
run_e2e_tests: | ||
parameters: | ||
specs: | ||
type: string | ||
steps: | ||
- custom_attach_workspace | ||
- init_environment | ||
- init_saucelabs_environment | ||
- start_saucelabs | ||
- run: | ||
command: yarn grunt test:circleci-protractor --specs="<< parameters.specs >>" | ||
no_output_timeout: 30m | ||
- stop_saucelabs | ||
|
||
run_e2e_tests_jquery: | ||
parameters: | ||
specs: | ||
type: string | ||
steps: | ||
- custom_attach_workspace | ||
- init_environment | ||
- init_saucelabs_environment | ||
- start_saucelabs | ||
- run: | ||
environment: | ||
USE_JQUERY: 1 | ||
command: yarn grunt test:circleci-protractor --specs="<< parameters.specs >>" | ||
no_output_timeout: 30m | ||
- stop_saucelabs | ||
|
||
# Job definitions | ||
# Jobs can include parameters that are passed in the workflow job invocation. | ||
# https://circleci.com/docs/2.0/reusing-config/#authoring-parameterized-jobs | ||
jobs: | ||
setup: | ||
executor: default-executor | ||
steps: | ||
- checkout | ||
- init_environment | ||
- run: | ||
name: Running Yarn install | ||
command: yarn install --frozen-lockfile --non-interactive | ||
# Yarn's requests sometimes take more than 10mins to complete. | ||
no_output_timeout: 45m | ||
- run: yarn grunt package | ||
# Persist any changes at this point to be reused by further jobs. | ||
# **NOTE**: To add new content to the workspace, always persist on the same root. | ||
- persist_to_workspace: | ||
root: *workspace_location | ||
paths: | ||
- ./ng | ||
|
||
lint: | ||
executor: default-executor | ||
steps: | ||
- custom_attach_workspace | ||
- init_environment | ||
- run: yarn -s grunt ci-checks | ||
- run: yarn commitplease "${CI_COMMIT_RANGE/.../..}" | ||
- run: yarn grunt validate-angular-files | ||
|
||
unit-test: | ||
executor: | ||
name: default-executor | ||
steps: | ||
- custom_attach_workspace | ||
- init_environment | ||
- init_saucelabs_environment | ||
- run: yarn grunt test:promises-aplus | ||
- run: | ||
command: yarn grunt test:jqlite --browsers="$BROWSERS" --reporters=spec | ||
no_output_timeout: 10m | ||
- run: | ||
command: yarn grunt test:modules --browsers="$BROWSERS" --reporters=spec | ||
no_output_timeout: 10m | ||
- run: | ||
command: yarn grunt test:docs --browsers="$BROWSERS" --reporters=spec | ||
no_output_timeout: 10m | ||
|
||
unit-test-jquery: | ||
executor: | ||
name: default-executor | ||
steps: | ||
- custom_attach_workspace | ||
- init_environment | ||
- init_saucelabs_environment | ||
- run: | ||
command: yarn grunt test:jquery --browsers="$BROWSERS" --reporters=spec | ||
no_output_timeout: 10m | ||
- run: | ||
command: yarn grunt test:jquery-2.2 --browsers="$BROWSERS" --reporters=spec | ||
no_output_timeout: 10m | ||
- run: | ||
command: yarn grunt test:jquery-2.1 --browsers="$BROWSERS" --reporters=spec | ||
no_output_timeout: 10m | ||
|
||
e2e-test-1: | ||
executor: | ||
name: default-executor | ||
steps: | ||
- run_e2e_tests: | ||
specs: test/e2e/tests/**/*.js | ||
|
||
e2e-test-2a: | ||
executor: | ||
name: default-executor | ||
steps: | ||
- run_e2e_tests: | ||
specs: build/docs/ptore2e/example-ng*/**/default_test.js | ||
|
||
e2e-test-2b: | ||
executor: | ||
name: default-executor | ||
steps: | ||
- run_e2e_tests: | ||
specs: "build/docs/ptore2e/!(example-ng*)/**/default_test.js" | ||
|
||
e2e-test-jquery-1: | ||
executor: | ||
name: default-executor | ||
steps: | ||
- run_e2e_tests_jquery: | ||
specs: test/e2e/tests/**/*.js | ||
|
||
e2e-test-jquery-2a: | ||
executor: | ||
name: default-executor | ||
steps: | ||
- run_e2e_tests_jquery: | ||
specs: build/docs/ptore2e/example-ng*/**/jquery_test.js | ||
|
||
e2e-test-jquery-2b: | ||
executor: | ||
name: default-executor | ||
steps: | ||
- run_e2e_tests_jquery: | ||
specs: build/docs/ptore2e/!(example-ng*)/**/jquery_test.js | ||
|
||
deploy-docs: | ||
executor: | ||
name: default-executor | ||
steps: | ||
- custom_attach_workspace | ||
- init_environment | ||
- run: yarn grunt prepareDeploy | ||
# Install dependencies for Firebase functions to prevent parsing errors during deployment | ||
# See https://github.com/angular/angular.js/pull/16453 | ||
- run: yarn -cwd $PROJECT_ROOT/scripts/docs.angularjs.org-firebase/functions | ||
- run: yarn firebase deploy --token "$FIREBASE_TOKEN" --only hosting | ||
|
||
deploy-code: | ||
executor: | ||
name: default-executor | ||
steps: | ||
- run: | ||
name: Authenticate and configure Docker | ||
command: | | ||
echo $GCLOUD_SERVICE_KEY | gcloud auth activate-service-account --key-file=- | ||
gcloud --quiet config set project ${GOOGLE_PROJECT_ID} | ||
- run: | ||
name: Sync files to code.angularjs.org | ||
command: | | ||
gsutil -m rsync $PROJECT_ROOT/deploy/code gs://code-angularjs-org-338b8.appspot.com | ||
workflows: | ||
version: 2 | ||
default_workflow: | ||
jobs: | ||
- setup | ||
- lint: | ||
requires: | ||
- setup | ||
- unit-test: | ||
requires: | ||
- setup | ||
- unit-test-jquery: | ||
requires: | ||
- setup | ||
- e2e-test-1: | ||
requires: | ||
- setup | ||
- e2e-test-2a: | ||
requires: | ||
- setup | ||
- e2e-test-2b: | ||
requires: | ||
- setup | ||
- e2e-test-jquery-1: | ||
requires: | ||
- setup | ||
- e2e-test-jquery-2a: | ||
requires: | ||
- setup | ||
- e2e-test-jquery-2b: | ||
requires: | ||
- setup | ||
- deploy-docs: | ||
filters: | ||
branches: | ||
only: | ||
- latest | ||
requires: | ||
- unit-test | ||
- unit-test-jquery | ||
- e2e-test-1 | ||
- e2e-test-2a | ||
- e2e-test-2b | ||
- e2e-test-jquery-1 | ||
- e2e-test-jquery-2a | ||
- e2e-test-jquery-2b | ||
- deploy-code: | ||
filters: | ||
branches: | ||
only: | ||
- master | ||
- latest | ||
requires: | ||
- unit-test | ||
- unit-test-jquery | ||
- e2e-test-1 | ||
- e2e-test-2a | ||
- e2e-test-2b | ||
- e2e-test-jquery-1 | ||
- e2e-test-jquery-2a | ||
- e2e-test-jquery-2b |
Oops, something went wrong.