chore(ci): Migrate CI jobs to circleci (#256)
This commit is contained in:
parent
716c90bca4
commit
614a1f3f36
|
@ -0,0 +1,170 @@
|
||||||
|
# These environment variables must be set in CircleCI UI
|
||||||
|
#
|
||||||
|
# NPM_TOKEN - A valid NPM token for releases
|
||||||
|
#
|
||||||
|
# NOTE:
|
||||||
|
# - to validate changes to this file locally using the circleci CLI tool:
|
||||||
|
#
|
||||||
|
# circleci config process .circleci/config.yml
|
||||||
|
#
|
||||||
|
# - to try run jobs locally:
|
||||||
|
#
|
||||||
|
# circleci config process .circleci/config.yml > tmp/processed.yml
|
||||||
|
# circleci local execute -c tmp/processed.yml --job build-nodejs-current
|
||||||
|
#
|
||||||
|
version: 2.1
|
||||||
|
|
||||||
|
references:
|
||||||
|
nodejs_current: &nodejs_current "10"
|
||||||
|
repo_path: &repo_path ~/webextension-polyfill
|
||||||
|
defaults: &defaults
|
||||||
|
working_directory: *repo_path
|
||||||
|
parameters:
|
||||||
|
nodejs_current:
|
||||||
|
type: string
|
||||||
|
default: *nodejs_current
|
||||||
|
|
||||||
|
commands:
|
||||||
|
run_npm_install:
|
||||||
|
description: install npm dependencies
|
||||||
|
steps:
|
||||||
|
- run: npm i
|
||||||
|
|
||||||
|
run_npm_build:
|
||||||
|
description: build project in << parameters.node_env >> mode
|
||||||
|
parameters:
|
||||||
|
node_env:
|
||||||
|
type: enum
|
||||||
|
default: production
|
||||||
|
enum: ["production", "test"]
|
||||||
|
steps:
|
||||||
|
- run:
|
||||||
|
command: npm run build --if-present
|
||||||
|
environment:
|
||||||
|
NODE_ENV: << parameters.node_env >>
|
||||||
|
|
||||||
|
run_test_minified:
|
||||||
|
description: rerun unit tests on minified file
|
||||||
|
steps:
|
||||||
|
- run:
|
||||||
|
command: npm run test-minified
|
||||||
|
|
||||||
|
run_test_bundlers:
|
||||||
|
description: rerun unit tests on webpack and browserify bundled files
|
||||||
|
steps:
|
||||||
|
- configure_global_npm
|
||||||
|
- run: npm install -g browserify webpack webpack-cli
|
||||||
|
- run: |
|
||||||
|
export PATH=$PATH:../.npm-global/bin
|
||||||
|
node ./scripts/run-module-bundlers-smoketests.js
|
||||||
|
|
||||||
|
run_xephyr:
|
||||||
|
description: run Xephyr on DISPLAY=:10
|
||||||
|
steps:
|
||||||
|
- run: |
|
||||||
|
sudo apt install xserver-xephyr
|
||||||
|
Xephyr -ac -br -noreset -screen 1280x1024x24 :10 &
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
run_functional_tests:
|
||||||
|
description: run integration tests on Firefox and Chrome browsers
|
||||||
|
steps:
|
||||||
|
# circleci browsers image variant does include and run Xvfb
|
||||||
|
# unfortunately Chrome seems to intermittently fail to connect
|
||||||
|
# to it successfully:
|
||||||
|
#
|
||||||
|
# ERROR:browser_main_loop.cc(1434)] Unable to open X display
|
||||||
|
#
|
||||||
|
# On the contrary it seems to don't happen with Xephyr.
|
||||||
|
- run_xephyr
|
||||||
|
- run:
|
||||||
|
command: node ./scripts/run-browsers-smoketests.js
|
||||||
|
environment:
|
||||||
|
DISPLAY: :10.0
|
||||||
|
CHROMEDRIVER_VERBOSE_LOGFILE: /tmp/chromedriver.log
|
||||||
|
- store_artifacts:
|
||||||
|
# chromedriver verbose logs stored in the artifacts to make
|
||||||
|
# it easier investigate CI jobs chromedriver issues.
|
||||||
|
path: /tmp/chromedriver.log
|
||||||
|
run_tests:
|
||||||
|
description: run tests
|
||||||
|
steps:
|
||||||
|
- run:
|
||||||
|
name: run linting check and unit tests with coverage
|
||||||
|
command: npm run test-coverage
|
||||||
|
- store_artifacts:
|
||||||
|
path: coverage
|
||||||
|
- run:
|
||||||
|
name: publish coverage data
|
||||||
|
command: npm run publish-coverage
|
||||||
|
- run_test_minified
|
||||||
|
- run_test_bundlers
|
||||||
|
- run_functional_tests
|
||||||
|
|
||||||
|
# This is required to avoid a `EACCES` when running `npm install -g` (which is
|
||||||
|
# executed in the test suite).
|
||||||
|
configure_global_npm:
|
||||||
|
description: create custom directory for global npm installs
|
||||||
|
steps:
|
||||||
|
- run: mkdir ../.npm-global
|
||||||
|
- run: npm config set prefix '../.npm-global'
|
||||||
|
|
||||||
|
attach_project_repo:
|
||||||
|
description: attach repo from workspace
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: *repo_path
|
||||||
|
|
||||||
|
persist_project_repo:
|
||||||
|
description: persist repo in workspace
|
||||||
|
steps:
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: *repo_path
|
||||||
|
paths: .
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
<<: *defaults
|
||||||
|
docker:
|
||||||
|
# Image variant including Firefox, Chrome and Xvfb
|
||||||
|
- image: circleci/node:<< parameters.nodejs_current >>-browsers
|
||||||
|
steps:
|
||||||
|
- attach_project_repo
|
||||||
|
- checkout
|
||||||
|
- run_npm_install
|
||||||
|
- run_npm_build:
|
||||||
|
node_env: test
|
||||||
|
- run_tests
|
||||||
|
- persist_project_repo
|
||||||
|
|
||||||
|
release-tag:
|
||||||
|
<<: *defaults
|
||||||
|
docker:
|
||||||
|
- image: circleci/node:<< parameters.nodejs_current >>
|
||||||
|
steps:
|
||||||
|
- attach_project_repo
|
||||||
|
- run_npm_build:
|
||||||
|
node_env: production
|
||||||
|
- run:
|
||||||
|
name: npm registry auth
|
||||||
|
command: echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' > .npmrc
|
||||||
|
- run:
|
||||||
|
name: npm registry publish
|
||||||
|
command: npm publish
|
||||||
|
|
||||||
|
workflows:
|
||||||
|
default-workflow:
|
||||||
|
jobs:
|
||||||
|
- build:
|
||||||
|
name: build-nodejs-current
|
||||||
|
filters:
|
||||||
|
tags:
|
||||||
|
only: /.*/
|
||||||
|
- release-tag:
|
||||||
|
requires:
|
||||||
|
- build-nodejs-current
|
||||||
|
filters:
|
||||||
|
tags:
|
||||||
|
only: /.*/
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
39
.travis.yml
39
.travis.yml
|
@ -1,39 +0,0 @@
|
||||||
language: node_js
|
|
||||||
node_js:
|
|
||||||
## Some of the ES6 syntax used in the browser-polyfill sources is only supported on nodejs >= 6
|
|
||||||
## and the selenium-webdriver dependency used by the integration tests requires nodejs >= 8.
|
|
||||||
## and the chromedriver dependency requires Node >= 10.
|
|
||||||
- '10'
|
|
||||||
|
|
||||||
script:
|
|
||||||
- npm run build
|
|
||||||
- npm run test-coverage
|
|
||||||
- echo "RE-RUN tests on the minified file" && npm run test-minified
|
|
||||||
- echo "RE-RUN tests on the webpack and browserify bundled files" &&
|
|
||||||
npm install -g browserify webpack webpack-cli &&
|
|
||||||
node ./scripts/run-module-bundlers-smoketests.js
|
|
||||||
- export DISPLAY=:99.0
|
|
||||||
- echo "RUN integration tests on real browsers" &&
|
|
||||||
TRAVIS_CI=true node ./scripts/run-browsers-smoketests.js
|
|
||||||
|
|
||||||
## See https://docs.travis-ci.com/user/chrome
|
|
||||||
sudo: required
|
|
||||||
|
|
||||||
addons:
|
|
||||||
firefox: 'latest'
|
|
||||||
chrome: 'stable'
|
|
||||||
|
|
||||||
services: ["xvfb"]
|
|
||||||
|
|
||||||
after_script: npm run publish-coverage
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
provider: npm
|
|
||||||
email: addons-dev-automation+npm@mozilla.com
|
|
||||||
skip_cleanup: true
|
|
||||||
on:
|
|
||||||
tags: true
|
|
||||||
repo: mozilla/webextension-polyfill
|
|
||||||
branch: master
|
|
||||||
api_key:
|
|
||||||
secure: K4rZPsnERK4hiVJICp2MGjLSiL64AeDc0yxmr54/ZlbAYy5OhtDrtaZ0L65eGx+HuIgVQbduSNn1zBN/Bx7w8zmYVyXdTVD1HqXuopS+vmBTrwW/d28uKdpCcMo311ODbk//AL3ylTCeOMkSsLsbb5Io6zcEpuw0VLtSNSrytaA85vcUIj2l8iurLrThN3r7iIsIEHceCzDo3KDx/o4yh7cEKs0FP9Jl8A6jm8sTt/j3jLmsxFFXp/SWOvPCQFX1hCu2uLgCtoLbFJlaDq2+RzsEXv4K5Ee5coVtc4vLRiNjC1UP7cHqfN8VZ0I2LeVT79MRmLqRAccGCSMdarFgoA2SW1laNch0vXy6hBSluh+OVJVPDrz7Xdyy70rt+57tJYFCtpZ24E6X+GNyOOMYfIsatvv59h5R6vE3hWvNZVtiOhYw9wMrKBA9rLkzyoCXeEVu4BuU834RbeeYUAg9VR6WZ1U2nD4IxGr33mSPDqsA6tOhr7tM0kEmg2eVe8qHop8BRtUAhQfkY6C+kfRkPE0OZBq4kiWcfugRJyKI7rAp9T5JNUSLW5X1KrvRv0RBaDr8SKFaWHE4N5Dbt/u2zluq+wJn/n5IxvEFDHSAzxLWBDz+LsmZ1eXRdfA+Pu4cyIKjMX1O8yPAnX8RCTc9oq8Qj74l5rXzCJtmygRdf2I=
|
|
|
@ -63,7 +63,7 @@ The integration tests use selenium-webdriver to run a set of test extensions
|
||||||
supported by this library) and Firefox (to compare the polyfilled APIs with the ones natively
|
supported by this library) and Firefox (to compare the polyfilled APIs with the ones natively
|
||||||
provided on Firefox).
|
provided on Firefox).
|
||||||
|
|
||||||
The shell script `test/run-browsers-smoketests.sh` (executed by the Travis CI service on every
|
The shell script `test/run-browsers-smoketests.sh` (executed by the CI service on every
|
||||||
pull request) runs this test suite on both the browsers.
|
pull request) runs this test suite on both the browsers.
|
||||||
|
|
||||||
To run the integration tests on a single browser:
|
To run the integration tests on a single browser:
|
||||||
|
|
|
@ -12,12 +12,6 @@ module.exports = function(grunt) {
|
||||||
grunt.initConfig({
|
grunt.initConfig({
|
||||||
pkg: grunt.file.readJSON("package.json"),
|
pkg: grunt.file.readJSON("package.json"),
|
||||||
|
|
||||||
coveralls: {
|
|
||||||
all: {
|
|
||||||
src: "coverage/lcov.info",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
eslint: {
|
eslint: {
|
||||||
src: ["src/browser-polyfill.js", "Gruntfile.js"],
|
src: ["src/browser-polyfill.js", "Gruntfile.js"],
|
||||||
test: ["test/**/*.js", "scripts/**/*.js"],
|
test: ["test/**/*.js", "scripts/**/*.js"],
|
||||||
|
@ -99,7 +93,6 @@ module.exports = function(grunt) {
|
||||||
|
|
||||||
grunt.loadNpmTasks("gruntify-eslint");
|
grunt.loadNpmTasks("gruntify-eslint");
|
||||||
grunt.loadNpmTasks("grunt-replace");
|
grunt.loadNpmTasks("grunt-replace");
|
||||||
grunt.loadNpmTasks("grunt-coveralls");
|
|
||||||
grunt.loadNpmTasks("grunt-contrib-concat");
|
grunt.loadNpmTasks("grunt-contrib-concat");
|
||||||
grunt.loadNpmTasks("grunt-babel");
|
grunt.loadNpmTasks("grunt-babel");
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,13 @@
|
||||||
# WebExtension `browser` API Polyfill [![Build Status](https://travis-ci.org/mozilla/webextension-polyfill.svg?branch=master)](https://travis-ci.org/mozilla/webextension-polyfill) [![npm version](https://badge.fury.io/js/webextension-polyfill.svg)](https://www.npmjs.com/package/webextension-polyfill)
|
# WebExtension `browser` API Polyfill
|
||||||
|
|
||||||
This library allows extensions that use the Promise-based WebExtension/BrowserExt API being standardized by the
|
This library allows extensions that use the Promise-based WebExtension/BrowserExt API being standardized by the
|
||||||
[W3 Browser Extensions][w3-browserext] group to run on Google Chrome with minimal or no changes.
|
[W3 Browser Extensions][w3-browserext] group to run on Google Chrome with minimal or no changes.
|
||||||
|
|
||||||
|
[![CircleCI](https://circleci.com/gh/mozilla/webextension-polyfill.svg?style=svg)](https://circleci.com/gh/mozilla/webextension-polyfill)
|
||||||
|
[![codecov](https://codecov.io/gh/mozilla/webextension-polyfill/branch/master/graph/badge.svg)](https://codecov.io/gh/mozilla/webextension-polyfill)
|
||||||
|
[![devDependency Status](https://david-dm.org/mozilla/webextension-polyfill/dev-status.svg)](https://david-dm.org/mozilla/webextension-polyfill#info=devDependencies)
|
||||||
|
[![npm version](https://badge.fury.io/js/webextension-polyfill.svg)](https://badge.fury.io/js/webextension-polyfill)
|
||||||
|
|
||||||
> This library doesn't (and it is not going to) polyfill API methods or options that are missing on Chrome but natively provided
|
> This library doesn't (and it is not going to) polyfill API methods or options that are missing on Chrome but natively provided
|
||||||
> on Firefox, and so the extension has to do its own "runtime feature detection" in those cases (and then eventually polyfill the
|
> on Firefox, and so the extension has to do its own "runtime feature detection" in those cases (and then eventually polyfill the
|
||||||
> missing feature on its own or enable/disable some of the features accordingly).
|
> missing feature on its own or enable/disable some of the features accordingly).
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
"browserify": "^16.2.2",
|
"browserify": "^16.2.2",
|
||||||
"chai": "^4.2.0",
|
"chai": "^4.2.0",
|
||||||
"chromedriver": "^87.0.2",
|
"chromedriver": "^87.0.2",
|
||||||
|
"codecov": "^3.8.1",
|
||||||
"cross-env": "^6.0.3",
|
"cross-env": "^6.0.3",
|
||||||
"eslint": "^6.6.0",
|
"eslint": "^6.6.0",
|
||||||
"finalhandler": "^1.1.0",
|
"finalhandler": "^1.1.0",
|
||||||
|
@ -34,7 +35,6 @@
|
||||||
"grunt": "^1.0.1",
|
"grunt": "^1.0.1",
|
||||||
"grunt-babel": "^8.0.0",
|
"grunt-babel": "^8.0.0",
|
||||||
"grunt-contrib-concat": "^1.0.1",
|
"grunt-contrib-concat": "^1.0.1",
|
||||||
"grunt-coveralls": "^2.0.0",
|
|
||||||
"grunt-replace": "^1.0.1",
|
"grunt-replace": "^1.0.1",
|
||||||
"gruntify-eslint": "^5.0.0",
|
"gruntify-eslint": "^5.0.0",
|
||||||
"istanbul-lib-instrument": "^3.3.0",
|
"istanbul-lib-instrument": "^3.3.0",
|
||||||
|
@ -61,7 +61,7 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "grunt",
|
"build": "grunt",
|
||||||
"prepublish": "npm run build && npm run test",
|
"prepublish": "npm run build && npm run test",
|
||||||
"publish-coverage": "grunt coveralls",
|
"publish-coverage": "codecov",
|
||||||
"test": "mocha",
|
"test": "mocha",
|
||||||
"test-coverage": "cross-env COVERAGE=y nyc mocha",
|
"test-coverage": "cross-env COVERAGE=y nyc mocha",
|
||||||
"test-minified": "cross-env TEST_MINIFIED_POLYFILL=1 mocha",
|
"test-minified": "cross-env TEST_MINIFIED_POLYFILL=1 mocha",
|
||||||
|
|
|
@ -34,7 +34,7 @@ const launchBrowser = async (launchOptions) => {
|
||||||
const options = new chrome.Options();
|
const options = new chrome.Options();
|
||||||
options.addArguments([
|
options.addArguments([
|
||||||
`--load-extension=${extensionPath}`,
|
`--load-extension=${extensionPath}`,
|
||||||
// See https://docs.travis-ci.com/user/chrome and issue #85 for a rationale.
|
// See issue #85 for a rationale.
|
||||||
"--no-sandbox",
|
"--no-sandbox",
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
@ -49,10 +49,21 @@ const launchBrowser = async (launchOptions) => {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const service = new chrome.ServiceBuilder(chromedriver.path);
|
||||||
|
|
||||||
|
if (process.env.CHROMEDRIVER_VERBOSE_LOGFILE) {
|
||||||
|
// Prevent intermittent failures due to limited resources while running
|
||||||
|
// in small VMs / docker containers (See #256 for a rationale).
|
||||||
|
const logsPath = process.env.CHROMEDRIVER_VERBOSE_LOGFILE;
|
||||||
|
console.warn(`NOTE: Verbose chromedriver logs: ${logsPath}`);
|
||||||
|
service.loggingTo(logsPath);
|
||||||
|
service.enableVerboseLogging();
|
||||||
|
}
|
||||||
|
|
||||||
driver = await new Builder()
|
driver = await new Builder()
|
||||||
.forBrowser("chrome")
|
.forBrowser("chrome")
|
||||||
.setChromeOptions(options)
|
.setChromeOptions(options)
|
||||||
.setChromeService(new chrome.ServiceBuilder(chromedriver.path))
|
.setChromeService(service)
|
||||||
.build();
|
.build();
|
||||||
} else if (browser === "firefox") {
|
} else if (browser === "firefox") {
|
||||||
const firefox = require("selenium-webdriver/firefox");
|
const firefox = require("selenium-webdriver/firefox");
|
||||||
|
|
Loading…
Reference in New Issue