157 lines
4.0 KiB
YAML
157 lines
4.0 KiB
YAML
# Run tests against supported Node versions, and (except for pull requests)
|
|
# against supported browsers that are available on Saucelabs.
|
|
|
|
version: 2.1
|
|
|
|
orbs:
|
|
win: circleci/windows@5.0.0
|
|
|
|
executors:
|
|
node24:
|
|
docker:
|
|
- image: cimg/node:24.0.0
|
|
working_directory: ~/workspace
|
|
node22:
|
|
docker:
|
|
- image: cimg/node:22.0.0
|
|
working_directory: ~/workspace
|
|
node20:
|
|
docker:
|
|
- image: cimg/node:20.0.0
|
|
working_directory: ~/workspace
|
|
|
|
jobs:
|
|
build:
|
|
parameters:
|
|
executor:
|
|
type: executor
|
|
executor: << parameters.executor >>
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
name: Report Node and NPM versions
|
|
command: echo "Using Node $(node --version) and NPM $(npm --version)"
|
|
- run:
|
|
name: Install dependencies
|
|
command: npm install
|
|
- run:
|
|
name: Build
|
|
command: npm run build
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- .
|
|
|
|
test_node: &test_node
|
|
parameters:
|
|
executor:
|
|
type: executor
|
|
executor: << parameters.executor >>
|
|
steps:
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Report Node and NPM versions
|
|
command: echo "Using Node $(node --version) and NPM $(npm --version)"
|
|
- run:
|
|
name: Run tests
|
|
command: npm test
|
|
|
|
test_win:
|
|
executor:
|
|
name: win/default
|
|
shell: bash.exe
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
name: Install Node.js
|
|
command: nvm install 20.0.0 && nvm use 20.0.0
|
|
- run:
|
|
name: Report Node and NPM versions
|
|
command: echo "Using Node $(node --version) and NPM $(npm --version)"
|
|
- run:
|
|
name: Install dependencies
|
|
command: npm install
|
|
- run:
|
|
name: Build
|
|
command: npm run build
|
|
- run:
|
|
name: Run tests
|
|
command: npm test
|
|
|
|
test_parallel: &test_parallel
|
|
parameters:
|
|
executor:
|
|
type: executor
|
|
executor: << parameters.executor >>
|
|
steps:
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Report Node and NPM versions
|
|
command: echo "Using Node $(node --version) and NPM $(npm --version)"
|
|
- run:
|
|
name: Run tests in parallel
|
|
command: npm run test:parallel
|
|
|
|
test_browsers: &test_browsers
|
|
executor: node20
|
|
steps:
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Install Sauce Connect
|
|
command: |
|
|
tmpdir=$(mktemp -d)
|
|
cd "$tmpdir"
|
|
curl https://saucelabs.com/downloads/sauce-connect/5.2.2/sauce-connect-5.2.2_linux.x86_64.tar.gz | tar zxf -
|
|
chmod +x sc
|
|
mkdir ~/workspace/bin
|
|
cp sc ~/workspace/bin
|
|
echo "Sauce Connect version info:"
|
|
~/workspace/bin/sc version
|
|
- run:
|
|
name: Run tests
|
|
command: |
|
|
# Do everything in one step because Sauce Connect won't exit
|
|
# cleanly if we kill it from a different step than it started in.
|
|
|
|
export PATH=$PATH:$HOME/workspace/bin
|
|
export SAUCE_TUNNEL_NAME=$CIRCLE_WORKFLOW_JOB_ID
|
|
scripts/start-sauce-connect
|
|
set +o errexit
|
|
scripts/run-sauce-browsers
|
|
exitcode=$?
|
|
set -o errexit
|
|
scripts/stop-sauce-connect
|
|
exit $exitcode
|
|
|
|
workflows:
|
|
version: 2
|
|
|
|
push:
|
|
jobs:
|
|
- build:
|
|
matrix:
|
|
parameters:
|
|
executor: [node20, node22, node24]
|
|
- test_node:
|
|
matrix:
|
|
parameters:
|
|
executor: [node20, node22, node24]
|
|
requires:
|
|
- build-<< matrix.executor >>
|
|
- test_parallel:
|
|
matrix:
|
|
parameters:
|
|
executor: [node20, node22, node24]
|
|
requires:
|
|
- build-<< matrix.executor >>
|
|
- test_browsers:
|
|
requires:
|
|
- build-node20
|
|
filters:
|
|
branches:
|
|
ignore: /pull\/.*/ # Don't run on pull requests.
|
|
- test_win
|