2021-07-14 16:26:38 +00:00
version : 2.1
executors :
2021-12-14 21:43:44 +00:00
pw-focal-development :
2018-07-20 23:00:13 +00:00
docker :
2023-11-05 00:20:35 +00:00
- image : mcr.microsoft.com/playwright:v1.39.0-focal
2021-12-14 21:43:44 +00:00
environment :
NODE_ENV : development # Needed to ensure 'dist' folder created and devDependencies installed
2022-07-30 00:35:43 +00:00
PERCY_POSTINSTALL_BROWSER : 'true' # Needed to store the percy browser in cache deps
2022-09-09 20:29:03 +00:00
PERCY_LOGLEVEL: 'debug' # Enable DEBUG level logging for Percy (Issue : https://github.com/nasa/openmct/issues/5742)
2023-04-17 21:26:13 +00:00
ubuntu :
machine :
image : ubuntu-2204:current
docker_layer_caching : true
2021-12-14 21:43:44 +00:00
parameters :
BUST_CACHE :
description : 'Set this with the CircleCI UI Trigger Workflow button (boolean = true) to bust the cache!'
default : false
type : boolean
commands :
build_and_install :
2022-06-30 18:50:47 +00:00
description : 'All steps used to build and install. Will use cache if found'
2021-12-14 21:43:44 +00:00
parameters :
node-version :
type : string
2021-11-04 13:53:55 +00:00
steps :
- checkout
2021-12-14 21:43:44 +00:00
- restore_cache_cmd :
node-version : << parameters.node-version >>
2021-11-04 13:53:55 +00:00
- node/install :
2022-01-03 21:44:57 +00:00
node-version : << parameters.node-version >>
2023-04-17 21:26:13 +00:00
- run : npm install --no-audit --progress=false
2021-12-14 21:43:44 +00:00
restore_cache_cmd :
description : 'Custom command for restoring cache with the ability to bust cache. When BUST_CACHE is set to true, jobs will not restore cache'
2021-07-14 16:26:38 +00:00
parameters :
node-version :
type : string
2021-12-14 21:43:44 +00:00
steps :
- when :
2022-06-03 16:46:27 +00:00
condition :
2021-12-14 21:43:44 +00:00
equal : [ false , << pipeline.parameters.BUST_CACHE >>]
steps :
- restore_cache :
2023-04-17 21:26:13 +00:00
key : deps--{{ arch }}--{{ .Branch }}--<< parameters.node-version >>--{{ checksum "package.json" }}-{{ checksum ".circleci/config.yml" }}
2021-12-14 21:43:44 +00:00
save_cache_cmd :
description : 'Custom command for saving cache.'
parameters :
node-version :
2021-07-14 16:26:38 +00:00
type : string
2022-06-03 16:46:27 +00:00
steps :
2021-12-14 21:43:44 +00:00
- save_cache :
2023-04-17 21:26:13 +00:00
key : deps--{{ arch }}--{{ .Branch }}--<< parameters.node-version >>--{{ checksum "package.json" }}-{{ checksum ".circleci/config.yml" }}
2021-12-14 21:43:44 +00:00
paths :
- ~/.npm
- node_modules
generate_and_store_version_and_filesystem_artifacts :
description : 'Track important packages and files'
steps :
- run : |
2023-04-17 21:26:13 +00:00
[ [ $EUID -ne 0 ]] && (sudo mkdir -p /tmp/artifacts && sudo chmod 777 /tmp/artifacts) || (mkdir -p /tmp/artifacts && chmod 777 /tmp/artifacts)
printenv NODE_ENV >> /tmp/artifacts/NODE_ENV.txt || true
2021-12-14 21:43:44 +00:00
npm -v >> /tmp/artifacts/npm-version.txt
node -v >> /tmp/artifacts/node-version.txt
ls -latR >> /tmp/artifacts/dir.txt
- store_artifacts :
path : /tmp/artifacts/
2022-06-30 18:50:47 +00:00
generate_e2e_code_cov_report :
description : 'Generate e2e code coverage artifacts and publish to codecov.io. Needed to that we can ignore the exit code status of the npm run test'
parameters :
suite :
type : string
steps :
2022-07-30 00:35:43 +00:00
- run : npm run cov:e2e:report || true
- run : npm run cov:e2e:<<parameters.suite>>:publish
2021-12-14 21:43:44 +00:00
orbs :
2023-04-17 21:26:13 +00:00
node : circleci/node@5.1.0
2022-05-03 00:34:07 +00:00
browser-tools : circleci/browser-tools@1.3.0
2021-12-14 21:43:44 +00:00
jobs :
npm-audit :
parameters :
node-version :
type : string
executor : pw-focal-development
steps :
- build_and_install :
node-version : <<parameters.node-version>>
- run : npm audit --audit-level=low
- generate_and_store_version_and_filesystem_artifacts
2022-02-15 22:08:53 +00:00
lint :
2022-01-07 19:39:25 +00:00
parameters :
node-version :
type : string
2021-12-14 21:43:44 +00:00
executor : pw-focal-development
2018-07-20 23:00:13 +00:00
steps :
2022-01-07 19:39:25 +00:00
- build_and_install :
node-version : <<parameters.node-version>>
2021-12-14 21:43:44 +00:00
- run : npm run lint
- generate_and_store_version_and_filesystem_artifacts
unit-test :
parameters :
node-version :
type : string
executor : pw-focal-development
steps :
- build_and_install :
node-version : <<parameters.node-version>>
2022-07-27 21:31:18 +00:00
- browser-tools/install-chrome :
replace-existing : false
- run : npm run test
2022-06-30 18:50:47 +00:00
- run : npm run cov:unit:publish
2021-12-14 21:43:44 +00:00
- save_cache_cmd :
node-version : <<parameters.node-version>>
- store_test_results :
path : dist/reports/tests/
- store_artifacts :
2022-06-30 18:50:47 +00:00
path : coverage
2023-04-17 21:26:13 +00:00
- when :
condition :
equal : [ 42 , 42 ] # Always generate version artifacts regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
steps :
- generate_and_store_version_and_filesystem_artifacts
2021-12-14 21:43:44 +00:00
e2e-test :
2021-11-30 00:34:47 +00:00
parameters :
node-version :
type : string
2022-07-27 21:31:18 +00:00
suite : #stable or full
2021-11-30 00:34:47 +00:00
type : string
2021-12-14 21:43:44 +00:00
executor : pw-focal-development
2022-05-25 22:45:11 +00:00
parallelism : 4
2021-11-30 00:34:47 +00:00
steps :
2021-12-14 21:43:44 +00:00
- build_and_install :
node-version : <<parameters.node-version>>
2022-07-27 21:31:18 +00:00
- when : #Only install chrome-beta when running the 'full' suite to save $$$
2022-06-30 18:50:47 +00:00
condition :
equal : [ 'full' , <<parameters.suite>>]
steps :
- run : npx playwright install chrome-beta
2022-05-25 22:45:11 +00:00
- run : SHARD="$((${CIRCLE_NODE_INDEX}+1))"; npm run test:e2e:<<parameters.suite>> -- --shard=${SHARD}/${CIRCLE_NODE_TOTAL}
2023-04-17 21:26:13 +00:00
- when :
condition :
equal : [ 42 , 42 ] # Always run codecov reports regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
steps :
- generate_e2e_code_cov_report :
suite : <<parameters.suite>>
2021-11-30 00:34:47 +00:00
- store_test_results :
path : test-results/results.xml
- store_artifacts :
path : test-results
2022-06-30 18:50:47 +00:00
- store_artifacts :
path : coverage
- store_artifacts :
path : html-test-results
2023-04-17 21:26:13 +00:00
- when :
condition :
equal : [ 42 , 42 ] # Always generate version artifacts regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
steps :
- generate_and_store_version_and_filesystem_artifacts
2023-04-10 19:25:17 +00:00
e2e-couchdb :
parameters :
node-version :
type : string
2023-04-17 21:26:13 +00:00
executor : ubuntu
2023-04-10 19:25:17 +00:00
steps :
- build_and_install :
node-version : <<parameters.node-version>>
2023-11-05 00:20:35 +00:00
- run : npx playwright@1.39.0 install #Necessary for bare ubuntu machine
2023-04-10 19:25:17 +00:00
- run : |
export $(cat src/plugins/persistence/couch/.env.ci | xargs)
docker-compose -f src/plugins/persistence/couch/couchdb-compose.yaml up --detach
sleep 3
bash src/plugins/persistence/couch/setup-couchdb.sh
2023-04-17 21:26:13 +00:00
- run : sh src/plugins/persistence/couch/replace-localstorage-with-couchdb-indexhtml.sh #Replace LocalStorage Plugin with CouchDB
2023-04-10 19:25:17 +00:00
- run : npm run test:e2e:couchdb
2023-04-17 21:26:13 +00:00
- when :
condition :
equal : [ 42 , 42 ] # Always run codecov reports regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
steps :
- generate_e2e_code_cov_report :
suite : full #add to full suite
2023-04-10 19:25:17 +00:00
- store_test_results :
path : test-results/results.xml
- store_artifacts :
path : test-results
- store_artifacts :
path : coverage
- store_artifacts :
path : html-test-results
2023-04-17 21:26:13 +00:00
- when :
condition :
equal : [ 42 , 42 ] # Always generate version artifacts regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
steps :
- generate_and_store_version_and_filesystem_artifacts
2022-05-25 22:45:11 +00:00
perf-test :
parameters :
node-version :
type : string
executor : pw-focal-development
steps :
- build_and_install :
node-version : <<parameters.node-version>>
2023-09-20 17:34:05 +00:00
- run : npm run test:perf:memory
- run : npm run test:perf:localhost
- run : npm run test:perf:contract
2022-05-25 22:45:11 +00:00
- store_test_results :
path : test-results/results.xml
- store_artifacts :
path : test-results
2022-06-30 18:50:47 +00:00
- store_artifacts :
path : html-test-results
2023-04-17 21:26:13 +00:00
- when :
condition :
equal : [ 42 , 42 ] # Always run codecov reports regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
steps :
- generate_and_store_version_and_filesystem_artifacts
2022-07-30 00:35:43 +00:00
visual-test :
parameters :
node-version :
type : string
2023-08-12 00:18:08 +00:00
suite :
type : string # ci or full
2022-07-30 00:35:43 +00:00
executor : pw-focal-development
steps :
- build_and_install :
node-version : <<parameters.node-version>>
2023-08-12 00:18:08 +00:00
- run : npm run test:e2e:visual:<<parameters.suite>>
2022-07-30 00:35:43 +00:00
- store_test_results :
path : test-results/results.xml
- store_artifacts :
path : test-results
- store_artifacts :
path : html-test-results
2023-04-17 21:26:13 +00:00
- when :
condition :
equal : [ 42 , 42 ] # Always generate version artifacts regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
steps :
- generate_and_store_version_and_filesystem_artifacts
2018-07-20 23:00:13 +00:00
workflows :
2021-12-14 21:43:44 +00:00
overall-circleci-commit-status : #These jobs run on every commit
2018-07-20 23:00:13 +00:00
jobs :
2023-05-18 21:29:20 +00:00
- lint :
2023-11-28 21:05:28 +00:00
name : node20-lint
node-version : lts/iron
2022-04-19 22:05:08 +00:00
- unit-test :
name : node18-chrome
2023-03-30 20:53:44 +00:00
node-version : lts/hydrogen
2021-12-14 21:43:44 +00:00
- e2e-test :
2022-07-27 21:31:18 +00:00
name : e2e-stable
2023-04-17 21:26:13 +00:00
node-version : lts/hydrogen
2022-07-27 21:31:18 +00:00
suite : stable
2023-07-29 00:20:06 +00:00
- perf-test :
node-version : lts/hydrogen
- visual-test :
2023-08-12 00:18:08 +00:00
name : visual-test-ci
suite : ci
2023-07-29 00:20:06 +00:00
node-version : lts/hydrogen
2023-05-18 21:54:46 +00:00
2021-12-14 21:43:44 +00:00
the-nightly : #These jobs do not run on PRs, but against master at night
2021-08-18 20:16:15 +00:00
jobs :
2022-02-15 22:08:53 +00:00
- unit-test :
2023-11-28 21:05:28 +00:00
name : node20-chrome-nightly
node-version : lts/iron
2022-04-19 22:05:08 +00:00
- unit-test :
name : node18-chrome
2023-03-30 20:53:44 +00:00
node-version : lts/hydrogen
2021-12-14 21:43:44 +00:00
- npm-audit :
2023-04-17 21:26:13 +00:00
node-version : lts/hydrogen
2021-12-14 21:43:44 +00:00
- e2e-test :
name : e2e-full-nightly
2023-04-17 21:26:13 +00:00
node-version : lts/hydrogen
2021-11-30 00:34:47 +00:00
suite : full
2022-07-30 00:35:43 +00:00
- perf-test :
2023-04-17 21:26:13 +00:00
node-version : lts/hydrogen
2022-07-30 00:35:43 +00:00
- visual-test :
2023-08-12 00:18:08 +00:00
name : visual-test-nightly
suite : full
2023-04-17 21:26:13 +00:00
node-version : lts/hydrogen
2023-04-10 19:25:17 +00:00
- e2e-couchdb :
2023-04-17 21:26:13 +00:00
node-version : lts/hydrogen
2021-08-18 20:16:15 +00:00
triggers :
- schedule :
2022-07-15 15:58:03 +00:00
cron : '0 0 * * *'
2021-08-18 20:16:15 +00:00
filters :
branches :
only :
2021-11-30 00:34:47 +00:00
- master