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
2024-01-25 05:26:48 +00:00
PERCY_POSTINSTALL_BROWSER : "true" # Needed to store the percy browser in cache deps
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 :
2024-01-25 05:26:48 +00:00
description : "Set this with the CircleCI UI Trigger Workflow button (boolean = true) to bust the cache!"
2021-12-14 21:43:44 +00:00
default : false
type : boolean
commands :
build_and_install :
2024-01-25 05:26:48 +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 :
2024-01-25 05:26:48 +00:00
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 :
2024-01-25 05:26:48 +00:00
description : "Custom command for saving cache."
2021-12-14 21:43:44 +00:00
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 :
2024-01-25 05:26:48 +00:00
description : "Track important packages and files"
2021-12-14 21:43:44 +00:00
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 :
2024-01-25 05:26:48 +00:00
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"
2022-06-30 18:50:47 +00:00
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
2024-01-30 22:21:52 +00:00
- run :
command : |
mkdir -p dist/reports/tests/
TESTFILES=$(circleci tests glob "src/**/*Spec.js")
echo "$TESTFILES" | circleci tests run --command="xargs npm run test" --verbose
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 :
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
2024-01-30 22:21:52 +00:00
parallelism : 7
2021-11-30 00:34:47 +00:00
steps :
2021-12-14 21:43:44 +00:00
- build_and_install :
2023-12-19 00:48:13 +00:00
node-version : lts/hydrogen
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 :
2024-01-25 05:26:48 +00:00
equal : [ "full" , <<parameters.suite>>]
2022-06-30 18:50:47 +00:00
steps :
- run : npx playwright install chrome-beta
2024-01-30 22:21:52 +00:00
- run :
command : |
mkdir test-results
TESTFILES=$(circleci tests glob "e2e/**/*.spec.js")
echo "$TESTFILES" | circleci tests run --command="xargs npm run test:e2e:<<parameters.suite>>" --verbose --split-by=timings
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
2024-02-21 23:29:38 +00:00
e2e-mobile :
executor : pw-focal-development
steps :
- build_and_install :
node-version : lts/hydrogen
- run : npm run test:e2e:mobile
- 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
- store_test_results :
path : test-results/results.xml
- store_artifacts :
path : test-results
- store_artifacts :
path : coverage
- store_artifacts :
path : html-test-results
- 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 :
2023-04-17 21:26:13 +00:00
executor : ubuntu
2023-04-10 19:25:17 +00:00
steps :
- build_and_install :
2023-12-19 00:48:13 +00:00
node-version : lts/hydrogen
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
2023-12-19 00:48:13 +00:00
mem-test :
2022-05-25 22:45:11 +00:00
executor : pw-focal-development
steps :
- build_and_install :
2023-12-19 00:48:13 +00:00
node-version : lts/hydrogen
2023-09-20 17:34:05 +00:00
- run : npm run test:perf:memory
2023-12-19 00:48:13 +00:00
- store_test_results :
path : test-results/results.xml
- store_artifacts :
path : test-results
- store_artifacts :
path : html-test-results
- 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
perf-test :
executor : pw-focal-development
steps :
- build_and_install :
node-version : lts/hydrogen
2023-09-20 17:34:05 +00:00
- 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
2023-12-19 22:16:08 +00:00
visual-a11y-tests :
2022-07-30 00:35:43 +00:00
parameters :
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 :
2023-12-19 00:48:13 +00:00
node-version : lts/hydrogen
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
2024-01-30 22:21:52 +00:00
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
suite : stable
2024-02-21 23:29:38 +00:00
- e2e-mobile
2023-12-19 22:16:08 +00:00
- visual-a11y-tests :
2024-02-21 23:29:38 +00:00
name : visual-a11y-test-ci
2023-08-12 00:18:08 +00:00
suite : ci
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
2021-11-30 00:34:47 +00:00
suite : full
2024-02-21 23:29:38 +00:00
- e2e-mobile
2023-12-19 00:48:13 +00:00
- perf-test
2024-02-21 23:29:38 +00:00
- mem-test
2023-12-19 22:16:08 +00:00
- visual-a11y-tests :
2024-02-21 23:29:38 +00:00
name : visual-a11y-test-nightly
2023-08-12 00:18:08 +00:00
suite : full
2023-12-19 00:48:13 +00:00
- e2e-couchdb
2021-08-18 20:16:15 +00:00
triggers :
- schedule :
2024-01-25 05:26:48 +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