|
| 1 | +# Configuration file for https://circleci.com/gh/angular/angular |
| 2 | + |
| 3 | +# Note: YAML anchors allow an object to be re-used, reducing duplication. |
| 4 | +# The ampersand declares an alias for an object, then later the `<<: *name` |
| 5 | +# syntax dereferences it. |
| 6 | +# See http://blog.daemonl.com/2016/02/yaml.html |
| 7 | +# To validate changes, use an online parser, eg. |
| 8 | +# http://yaml-online-parser.appspot.com/ |
| 9 | + |
| 10 | +# CircleCI configuration version |
| 11 | +# Version 2.1 allows for extra config reuse features |
| 12 | +# https://circleci.com/docs/2.0/reusing-config/#getting-started-with-config-reuse |
| 13 | +version: 2.1 |
| 14 | + |
| 15 | +# Workspace initially persisted by the `setup` job, and then enhanced by `build-npm-packages` and |
| 16 | +# `build-ivy-npm-packages`. |
| 17 | +# https://circleci.com/docs/2.0/workflows/#using-workspaces-to-share-data-among-jobs |
| 18 | +# https://circleci.com/blog/deep-diving-into-circleci-workspaces/ |
| 19 | +var_workspace_location: &workspace_location ~/ |
| 20 | + |
| 21 | +# Filter to run a job on builds for pull requests only. |
| 22 | +var_only_on_pull_requests: &only_on_pull_requests |
| 23 | + filters: |
| 24 | + branches: |
| 25 | + only: |
| 26 | + - /pull\/\d+/ |
| 27 | + |
| 28 | +# Filter to skip a job on builds for pull requests. |
| 29 | +var_skip_on_pull_requests: &skip_on_pull_requests |
| 30 | + filters: |
| 31 | + branches: |
| 32 | + ignore: |
| 33 | + - /pull\/\d+/ |
| 34 | + |
| 35 | +# Filter to run a job on builds for the master branch only. |
| 36 | +var_only_on_master: &only_on_master |
| 37 | + filters: |
| 38 | + branches: |
| 39 | + only: |
| 40 | + - master |
| 41 | + |
| 42 | +# Executor Definitions |
| 43 | +# https://circleci.com/docs/2.0/reusing-config/#authoring-reusable-executors |
| 44 | +# **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. |
| 45 | +# (Using the tag in not necessary when pinning by ID, but include it anyway for documentation purposes.) |
| 46 | +# **NOTE 2**: If you change the version of the docker images, also change the `cache_key` suffix. |
| 47 | +# **NOTE 3**: If you change the version of the `*-browsers` docker image, make sure the |
| 48 | +# `--versions.chrome` arg in `integration/bazel-schematics/test.sh` specifies a |
| 49 | +# ChromeDriver version that is compatible with the Chrome version in the image. |
| 50 | +executors: |
| 51 | + default-executor: |
| 52 | + parameters: |
| 53 | + resource_class: |
| 54 | + type: string |
| 55 | + default: medium |
| 56 | + docker: |
| 57 | + - image: circleci/node:12.16.3 |
| 58 | + resource_class: << parameters.resource_class >> |
| 59 | + working_directory: ~/ng |
| 60 | + cloud-sdk: |
| 61 | + description: The docker container to use when running gcp-gcs commands |
| 62 | + docker: |
| 63 | + - image: google/cloud-sdk:alpine |
| 64 | + |
| 65 | + |
| 66 | +# Command Definitions |
| 67 | +# https://circleci.com/docs/2.0/reusing-config/#authoring-reusable-commands |
| 68 | +commands: |
| 69 | + custom_attach_workspace: |
| 70 | + description: Attach workspace at a predefined location |
| 71 | + steps: |
| 72 | + - attach_workspace: |
| 73 | + at: *workspace_location |
| 74 | + |
| 75 | + # Install shared libs used by Chrome. |
| 76 | + install_chrome_libs: |
| 77 | + description: Install shared Chrome libs |
| 78 | + steps: |
| 79 | + - run: |
| 80 | + name: Install shared Chrome libs |
| 81 | + command: | |
| 82 | + sudo apt-get update |
| 83 | + # Install GTK+ graphical user interface (libgtk-3-0), advanced linux sound architecture (libasound2) |
| 84 | + # and network security service libraries (libnss3) & X11 Screen Saver extension library (libssx1) |
| 85 | + # which are dependendies of chrome & needed for karma & protractor headless chrome tests. |
| 86 | + # This is a very small install which takes around 7s in comparing to using the full |
| 87 | + # circleci/node:x.x.x-browsers image. |
| 88 | + sudo apt-get -y install libgtk-3-0 libasound2 libnss3 libxss1 |
| 89 | +
|
| 90 | + install_java: |
| 91 | + description: Install java |
| 92 | + steps: |
| 93 | + - run: |
| 94 | + name: Install java |
| 95 | + command: | |
| 96 | + sudo apt-get update |
| 97 | + # Install java runtime |
| 98 | + sudo apt-get install default-jre |
| 99 | +
|
| 100 | + # Initializes the CI environment by setting up common environment variables. |
| 101 | + init_environment: |
| 102 | + description: Initializing environment (setting up variables) |
| 103 | + steps: |
| 104 | + - run: |
| 105 | + name: Set up environment |
| 106 | + environment: |
| 107 | + CIRCLE_GIT_BASE_REVISION: << pipeline.git.base_revision >> |
| 108 | + CIRCLE_GIT_REVISION: << pipeline.git.revision >> |
| 109 | + command: ./.circleci/env.sh |
| 110 | + - run: |
| 111 | + # Configure git as the CircleCI `checkout` command does. |
| 112 | + # This is needed because we only checkout on the setup job. |
| 113 | + # Add GitHub to known hosts |
| 114 | + name: Configure git |
| 115 | + command: | |
| 116 | + mkdir -p ~/.ssh |
| 117 | + echo 'github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==' >> ~/.ssh/known_hosts |
| 118 | + git config --global url."ssh://[email protected]".insteadOf "https://github.com" || true |
| 119 | + git config --global gc.auto 0 || true |
| 120 | + - install_java |
| 121 | + |
| 122 | + init_saucelabs_environment: |
| 123 | + description: Sets up a domain that resolves to the local host. |
| 124 | + steps: |
| 125 | + - run: |
| 126 | + name: Preparing environment for running tests on Saucelabs. |
| 127 | + command: | |
| 128 | + # For SauceLabs jobs, we set up a domain which resolves to the machine which launched |
| 129 | + # the tunnel. We do this because devices are sometimes not able to properly resolve |
| 130 | + # `localhost` or `127.0.0.1` through the SauceLabs tunnel. Using a domain that does not |
| 131 | + # resolve to anything on SauceLabs VMs ensures that such requests are always resolved |
| 132 | + # through the tunnel, and resolve to the actual tunnel host machine (i.e. the CircleCI VM). |
| 133 | + # More context can be found in: https://github.com/angular/angular/pull/35171. |
| 134 | + setPublicVar SAUCE_LOCALHOST_ALIAS_DOMAIN "angular-ci.local" |
| 135 | + setSecretVar SAUCE_ACCESS_KEY $(echo $SAUCE_ACCESS_KEY | rev) |
| 136 | + - run: |
| 137 | + # Sets up a local domain in the machine's host file that resolves to the local |
| 138 | + # host. This domain is helpful in Saucelabs tests where devices are not able to |
| 139 | + # properly resolve `localhost` or `127.0.0.1` through the sauce-connect tunnel. |
| 140 | + name: Setting up alias domain for local host. |
| 141 | + command: echo "127.0.0.1 $SAUCE_LOCALHOST_ALIAS_DOMAIN" | sudo tee -a /etc/hosts |
| 142 | + |
| 143 | + start_saucelabs: |
| 144 | + steps: |
| 145 | + - run: |
| 146 | + name: Starting Saucelabs tunnel service |
| 147 | + command: ./lib/saucelabs/sauce-service.sh start-ready-wait |
| 148 | + |
| 149 | + stop_saucelabs: |
| 150 | + steps: |
| 151 | + - run: |
| 152 | + name: Stopping Saucelabs tunnel service |
| 153 | + command: ./lib/saucelabs/sauce-service.sh stop |
| 154 | + |
| 155 | + |
| 156 | + run_e2e_tests: |
| 157 | + parameters: |
| 158 | + specs: |
| 159 | + type: string |
| 160 | + steps: |
| 161 | + - custom_attach_workspace |
| 162 | + - init_environment |
| 163 | + - init_saucelabs_environment |
| 164 | + - start_saucelabs |
| 165 | + - run: |
| 166 | + command: yarn grunt test:circleci-protractor --specs="<< parameters.specs >>" |
| 167 | + no_output_timeout: 30m |
| 168 | + - stop_saucelabs |
| 169 | + |
| 170 | + run_e2e_tests_jquery: |
| 171 | + parameters: |
| 172 | + specs: |
| 173 | + type: string |
| 174 | + steps: |
| 175 | + - custom_attach_workspace |
| 176 | + - init_environment |
| 177 | + - init_saucelabs_environment |
| 178 | + - start_saucelabs |
| 179 | + - run: |
| 180 | + environment: |
| 181 | + USE_JQUERY: 1 |
| 182 | + command: yarn grunt test:circleci-protractor --specs="<< parameters.specs >>" |
| 183 | + no_output_timeout: 30m |
| 184 | + - stop_saucelabs |
| 185 | + |
| 186 | +# Job definitions |
| 187 | +# Jobs can include parameters that are passed in the workflow job invocation. |
| 188 | +# https://circleci.com/docs/2.0/reusing-config/#authoring-parameterized-jobs |
| 189 | +jobs: |
| 190 | + setup: |
| 191 | + executor: default-executor |
| 192 | + steps: |
| 193 | + - checkout |
| 194 | + - init_environment |
| 195 | + - run: |
| 196 | + name: Running Yarn install |
| 197 | + command: yarn install --frozen-lockfile --non-interactive |
| 198 | + # Yarn's requests sometimes take more than 10mins to complete. |
| 199 | + no_output_timeout: 45m |
| 200 | + - run: yarn grunt package |
| 201 | + # Persist any changes at this point to be reused by further jobs. |
| 202 | + # **NOTE**: To add new content to the workspace, always persist on the same root. |
| 203 | + - persist_to_workspace: |
| 204 | + root: *workspace_location |
| 205 | + paths: |
| 206 | + - ./ng |
| 207 | + |
| 208 | + lint: |
| 209 | + executor: default-executor |
| 210 | + steps: |
| 211 | + - custom_attach_workspace |
| 212 | + - init_environment |
| 213 | + - run: yarn -s grunt ci-checks |
| 214 | + - run: yarn commitplease "${CI_COMMIT_RANGE/.../..}" |
| 215 | + - run: yarn grunt validate-angular-files |
| 216 | + |
| 217 | + unit-test: |
| 218 | + executor: |
| 219 | + name: default-executor |
| 220 | + steps: |
| 221 | + - custom_attach_workspace |
| 222 | + - init_environment |
| 223 | + - init_saucelabs_environment |
| 224 | + - run: yarn grunt test:promises-aplus |
| 225 | + - run: |
| 226 | + command: yarn grunt test:jqlite --browsers="$BROWSERS" --reporters=spec |
| 227 | + no_output_timeout: 10m |
| 228 | + - run: |
| 229 | + command: yarn grunt test:modules --browsers="$BROWSERS" --reporters=spec |
| 230 | + no_output_timeout: 10m |
| 231 | + - run: |
| 232 | + command: yarn grunt test:docs --browsers="$BROWSERS" --reporters=spec |
| 233 | + no_output_timeout: 10m |
| 234 | + |
| 235 | + unit-test-jquery: |
| 236 | + executor: |
| 237 | + name: default-executor |
| 238 | + steps: |
| 239 | + - custom_attach_workspace |
| 240 | + - init_environment |
| 241 | + - init_saucelabs_environment |
| 242 | + - run: |
| 243 | + command: yarn grunt test:jquery --browsers="$BROWSERS" --reporters=spec |
| 244 | + no_output_timeout: 10m |
| 245 | + - run: |
| 246 | + command: yarn grunt test:jquery-2.2 --browsers="$BROWSERS" --reporters=spec |
| 247 | + no_output_timeout: 10m |
| 248 | + - run: |
| 249 | + command: yarn grunt test:jquery-2.1 --browsers="$BROWSERS" --reporters=spec |
| 250 | + no_output_timeout: 10m |
| 251 | + |
| 252 | + e2e-test-1: |
| 253 | + executor: |
| 254 | + name: default-executor |
| 255 | + steps: |
| 256 | + - run_e2e_tests: |
| 257 | + specs: test/e2e/tests/**/*.js |
| 258 | + |
| 259 | + e2e-test-2a: |
| 260 | + executor: |
| 261 | + name: default-executor |
| 262 | + steps: |
| 263 | + - run_e2e_tests: |
| 264 | + specs: build/docs/ptore2e/example-ng*/**/default_test.js |
| 265 | + |
| 266 | + e2e-test-2b: |
| 267 | + executor: |
| 268 | + name: default-executor |
| 269 | + steps: |
| 270 | + - run_e2e_tests: |
| 271 | + specs: "build/docs/ptore2e/!(example-ng*)/**/default_test.js" |
| 272 | + |
| 273 | + e2e-test-jquery-1: |
| 274 | + executor: |
| 275 | + name: default-executor |
| 276 | + steps: |
| 277 | + - run_e2e_tests_jquery: |
| 278 | + specs: test/e2e/tests/**/*.js |
| 279 | + |
| 280 | + e2e-test-jquery-2a: |
| 281 | + executor: |
| 282 | + name: default-executor |
| 283 | + steps: |
| 284 | + - run_e2e_tests_jquery: |
| 285 | + specs: build/docs/ptore2e/example-ng*/**/jquery_test.js |
| 286 | + |
| 287 | + e2e-test-jquery-2b: |
| 288 | + executor: |
| 289 | + name: default-executor |
| 290 | + steps: |
| 291 | + - run_e2e_tests_jquery: |
| 292 | + specs: build/docs/ptore2e/!(example-ng*)/**/jquery_test.js |
| 293 | + |
| 294 | + deploy-docs: |
| 295 | + executor: |
| 296 | + name: default-executor |
| 297 | + steps: |
| 298 | + - custom_attach_workspace |
| 299 | + - init_environment |
| 300 | + - run: yarn grunt prepareDeploy |
| 301 | + # Install dependencies for Firebase functions to prevent parsing errors during deployment |
| 302 | + # See https://github.com/angular/angular.js/pull/16453 |
| 303 | + - run: yarn -cwd $PROJECT_ROOT/scripts/docs.angularjs.org-firebase/functions |
| 304 | + - run: yarn firebase deploy --token "$FIREBASE_TOKEN" --only hosting |
| 305 | + |
| 306 | + deploy-code: |
| 307 | + executor: |
| 308 | + name: default-executor |
| 309 | + steps: |
| 310 | + - run: |
| 311 | + name: Authenticate and configure Docker |
| 312 | + command: | |
| 313 | + echo $GCLOUD_SERVICE_KEY | gcloud auth activate-service-account --key-file=- |
| 314 | + gcloud --quiet config set project ${GOOGLE_PROJECT_ID} |
| 315 | + - run: |
| 316 | + name: Sync files to code.angularjs.org |
| 317 | + command: | |
| 318 | + gsutil -m rsync $PROJECT_ROOT/deploy/code gs://code-angularjs-org-338b8.appspot.com |
| 319 | +
|
| 320 | +workflows: |
| 321 | + version: 2 |
| 322 | + default_workflow: |
| 323 | + jobs: |
| 324 | + - setup |
| 325 | + - lint: |
| 326 | + requires: |
| 327 | + - setup |
| 328 | + - unit-test: |
| 329 | + requires: |
| 330 | + - setup |
| 331 | + - unit-test-jquery: |
| 332 | + requires: |
| 333 | + - setup |
| 334 | + - e2e-test-1: |
| 335 | + requires: |
| 336 | + - setup |
| 337 | + - e2e-test-2a: |
| 338 | + requires: |
| 339 | + - setup |
| 340 | + - e2e-test-2b: |
| 341 | + requires: |
| 342 | + - setup |
| 343 | + - e2e-test-jquery-1: |
| 344 | + requires: |
| 345 | + - setup |
| 346 | + - e2e-test-jquery-2a: |
| 347 | + requires: |
| 348 | + - setup |
| 349 | + - e2e-test-jquery-2b: |
| 350 | + requires: |
| 351 | + - setup |
| 352 | + - deploy-docs: |
| 353 | + filters: |
| 354 | + branches: |
| 355 | + only: |
| 356 | + - latest |
| 357 | + requires: |
| 358 | + - unit-test |
| 359 | + - unit-test-jquery |
| 360 | + - e2e-test-1 |
| 361 | + - e2e-test-2a |
| 362 | + - e2e-test-2b |
| 363 | + - e2e-test-jquery-1 |
| 364 | + - e2e-test-jquery-2a |
| 365 | + - e2e-test-jquery-2b |
| 366 | + - deploy-code: |
| 367 | + filters: |
| 368 | + branches: |
| 369 | + only: |
| 370 | + - master |
| 371 | + - latest |
| 372 | + requires: |
| 373 | + - unit-test |
| 374 | + - unit-test-jquery |
| 375 | + - e2e-test-1 |
| 376 | + - e2e-test-2a |
| 377 | + - e2e-test-2b |
| 378 | + - e2e-test-jquery-1 |
| 379 | + - e2e-test-jquery-2a |
| 380 | + - e2e-test-jquery-2b |
0 commit comments