version: 2.1 executors: default: docker: - image: circleci/node:10-stretch-browsers environment: - FIREFOX_VERSION: "68.0esr" - GECKODRIVER_VERSION: "0.24.0" working_directory: ~ commands: install_firefox: steps: - restore_cache: key: firefox-bin paths: - ~/firefox - run: name: Install Firefox command: | test -d ~/firefox/${FIREFOX_VERSION} && exit 0 url=https://ftp.mozilla.org/pub/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/firefox-${FIREFOX_VERSION}.tar.bz2 curl -sSL -o- "$url" | tar xvfj - mkdir -p ~/firefox mv firefox ~/firefox/${FIREFOX_VERSION} - save_cache: key: firefox-bin paths: - ~/firefox - run: echo 'export PATH=~/firefox/$FIREFOX_VERSION:$PATH' >> $BASH_ENV install_geckodriver: steps: - run: name: Install geckodriver command: | mkdir -p geckodriver url=https://github.com/mozilla/geckodriver/releases/download/v0.24.0/geckodriver-v${GECKODRIVER_VERSION}-linux64.tar.gz curl -sSLf "$url" | tar -C geckodriver xvf - echo 'export PATH=~/geckodriver/$GECKODRIVER_VERSION:$PATH' >> $BASH_ENV setup_npm: steps: - restore_cache: key: dependency-cache-{{ checksum "package-lock.json" }} - run: name: Install dependencies command: npm install - save_cache: key: dependency-cache-{{ checksum "package-lock.json" }} paths: - node_modules jobs: build: executor: name: default steps: - install_firefox - checkout - setup_npm - run: npm run lint - run: # NOTE: Karma loads ts-node automatically and treats karma.conf.js as a TypeScript. # Karma does not starts by karma.conf.js transpile failure, and this hack removes # ts-node module from the local before test. # See: https://github.com/karma-runner/karma/issues/3329 name: Remove node-ts from node_modules command: mv node_modules/ts-node node_modules/ts-node.orig - run: npm test - run: npm run package e2e: executor: name: default steps: - run: sudo apt-get update && sudo apt-get -y install xsel - install_firefox - checkout - setup_npm - run: npm run build - run: npm run test:e2e deploy: executor: name: default steps: - checkout - setup_npm - run: npm run package - run: name: Deploy to AMO command: | version=$(jq -r '.version' manifest.json) ./script/deploy vim-vixen@i-beam.org "$version" "vim-vixen-${version}.zip" workflows: version: 2 build_and_test: jobs: - build - e2e: filters: branches: ignore: /^greenkeeper\/.*/ deploy: jobs: - build: filters: tags: only: /^.*/ branches: ignore: /.*/ - e2e: filters: tags: only: /^.*/ branches: ignore: /.*/ - deploy: requires: - build - e2e filters: tags: only: /^.*/ branches: ignore: /.*/