Files
KaTeX/.circleci/config.yml
ylemkimon 36f9788cd6 chore(screenshotter): support Browserstack and test on Safari 13.1 (#2306)
* Support Browserstack in screenshotter

* Support Browserstack in CircleCI

* Test screenshots on Safari 13.1

* Don't run Safari screenshotter on forked PRs

* Update a screenshot

* Ignore *.log in .gitignore
2020-08-04 01:45:10 +09:00

147 lines
3.8 KiB
YAML

version: 2.1
executors:
node:
docker:
- image: circleci/node:10
firefox:
docker:
- image: circleci/node:10
- image: selenium/standalone-firefox:3.141.59-20200525
chrome:
docker:
- image: circleci/node:10
- image: selenium/standalone-chrome:3.141.59-20200525
commands:
checkout_repo:
steps:
- checkout
- run:
name: Checkout submodule
command: |
git submodule sync
git submodule update --init --recursive
skip_if_only_changed:
parameters:
filter:
type: string
steps:
- run:
name: Skip tests if only "<< parameters.filter >>" are changed
command: git diff --name-only << pipeline.git.base_revision >>... | grep -qvE '<< parameters.filter >>' || circleci step halt
install_dependencies:
steps:
- restore_cache:
keys:
- yarn-deps-v5-{{ checksum "yarn.lock" }}
- yarn-deps-v5-
- run:
name: Install dependencies
command: yarn --immutable
- save_cache:
key: yarn-deps-v5-{{ checksum "yarn.lock" }}
paths:
- .yarn
- .pnp.js
screenshot:
parameters:
flags:
type: string
default: ""
steps:
- run:
name: Verify screenshots and generate diffs and new screenshots
command: yarn node dockers/screenshotter/screenshotter.js -b $CIRCLE_JOB --verify --diff --new << parameters.flags >>
jobs:
test:
executor: node
steps:
- run:
name: Check whether the build is running on the main repository
command: |
if [[ $CIRCLE_PULL_REQUEST && $CIRCLE_PROJECT_USERNAME != "KaTeX" ]]; then
echo "Please disable CircleCI on your forked repository!"
exit 1
fi
- checkout_repo
- skip_if_only_changed:
filter: '^docs/|^LICENSE|\.md$'
- install_dependencies
- run:
name: Lint code
command: yarn test:lint
- skip_if_only_changed:
filter: '^static/|^website/'
- run:
name: Run Flow and Jest tests
command: |
yarn test:flow
yarn test:jest --coverage --runInBand
- run:
name: Upload code coverage reports to Codecov
command: yarn codecov
screenshotter:
parameters:
browser:
type: executor
browserstack:
type: string
default: ""
executor: << parameters.browser >>
steps:
- checkout_repo
- skip_if_only_changed:
filter: '^docs/|^static/|^website/|^LICENSE|\.md$'
- install_dependencies
- when:
condition: << parameters.browserstack >>
steps:
- screenshot:
flags: --browserstack --selenium-capabilities '<< parameters.browserstack >>'
- unless:
condition: << parameters.browserstack >>
steps:
- screenshot:
flags: --selenium-ip localhost
- store_artifacts:
path: test/screenshotter/new
destination: new
- store_artifacts:
path: test/screenshotter/diff
destination: diff
workflows:
test:
jobs:
- test
- screenshotter:
name: firefox
browser: firefox
- screenshotter:
name: chrome
browser: chrome
- screenshotter:
name: safari
browser: node
browserstack: |
{
"browserName": "Safari",
"browser_version": "13.1",
"os": "OS X",
"os_version": "Catalina"
}
filters:
branches:
# Forked pull requests don't have access to Browserstack credentials
ignore: /pull\/[0-9]+/