From a259bfb72c0cac508c8b52ef0962ba0b0e275b06 Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Sun, 11 Apr 2021 23:52:24 +0100 Subject: [PATCH] Build: Add browserstack workflows --- .github/workflows/browsers-full.yaml | 49 +++++++++ .github/workflows/browsers-quick.yaml | 45 ++++++++ build/browserstack-full.json | 101 +++++++++++++++++ build/browserstack-quick.json | 28 +++++ package-lock.json | 153 ++++++++++++++++++++++++++ package.json | 2 + 6 files changed, 378 insertions(+) create mode 100644 .github/workflows/browsers-full.yaml create mode 100644 .github/workflows/browsers-quick.yaml create mode 100644 build/browserstack-full.json create mode 100644 build/browserstack-quick.json diff --git a/.github/workflows/browsers-full.yaml b/.github/workflows/browsers-full.yaml new file mode 100644 index 000000000..e380aa59d --- /dev/null +++ b/.github/workflows/browsers-full.yaml @@ -0,0 +1,49 @@ +name: browsers-full +on: + # Once a week on Thursday at 02:15 + schedule: + - cron: '15 2 * * 4' + # Or manually + workflow_dispatch: + # Or when developing this workflow + push: + paths: + - .github/workflows/browsers-full.yaml + +jobs: + run: + name: BrowserStack + runs-on: ubuntu-latest + env: + PUPPETEER_DOWNLOAD_PATH: ~/.puppeteer_download + steps: + - uses: actions/checkout@v2 + + - uses: actions/cache@v2 + with: + path: | + ~/.npm + ~/.puppeteer_download + key: ${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} + + - name: Use Node.js 10 + uses: actions/setup-node@v2 + with: + node-version: 10.x + + - name: Prepare + run: | + npm ci + npm run build + + - name: Tests + run: npm run browserstack + env: + BROWSERSTACK_JSON: build/browserstack-full.json + BROWSERSTACK_USERNAME: "${{ secrets.BROWSERSTACK_USERNAME }}" + BROWSERSTACK_KEY: "${{ secrets.BROWSERSTACK_KEY }}" + # Set "project" metadata + TRAVIS_REPO_SLUG: "${{ github.repository }} ${{ github.event_name }}" + # Set "commit" metadata + TRAVIS_COMMIT: "full ${{ github.ref }} ${{ github.sha }}" + TUNNEL_ID: "${{ github.event_name }}-full-${{ github.sha }}" diff --git a/.github/workflows/browsers-quick.yaml b/.github/workflows/browsers-quick.yaml new file mode 100644 index 000000000..30c31f18f --- /dev/null +++ b/.github/workflows/browsers-quick.yaml @@ -0,0 +1,45 @@ +name: browsers-quick +on: + pull_request: + # Or when developing this workflow + push: + paths: + - .github/workflows/browsers-quick.yaml + +jobs: + run: + name: BrowserStack + runs-on: ubuntu-latest + env: + PUPPETEER_DOWNLOAD_PATH: ~/.puppeteer_download + steps: + - uses: actions/checkout@v2 + + - uses: actions/cache@v2 + with: + path: | + ~/.npm + ~/.puppeteer_download + key: ${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} + + - name: Use Node.js 10 + uses: actions/setup-node@v2 + with: + node-version: 10.x + + - name: Prepare + run: | + npm ci + npm run build + + - name: Tests + run: npm run browserstack + env: + BROWSERSTACK_JSON: build/browserstack-quick.json + BROWSERSTACK_USERNAME: "${{ secrets.BROWSERSTACK_USERNAME }}" + BROWSERSTACK_KEY: "${{ secrets.BROWSERSTACK_KEY }}" + # Set "project" metadata + TRAVIS_REPO_SLUG: "${{ github.repository }} ${{ github.event_name}}" + # Set "commit" metadata + TRAVIS_COMMIT: "quick ${{ github.ref }} ${{ github.sha }}" + TUNNEL_ID: "${{ github.event_name }}-quick-${{ github.sha }}" diff --git a/build/browserstack-full.json b/build/browserstack-full.json new file mode 100644 index 000000000..c13c353cb --- /dev/null +++ b/build/browserstack-full.json @@ -0,0 +1,101 @@ +{ + "test_framework": "qunit", + "test_path": ["test/index.html"], + "test_server_port": "8899", + "exit_with_fail": true, + "timeout": 600, + "browsers": [ + "firefox_45", + "firefox_78", + "firefox_previous", + "firefox_current", + "ie_9", + "ie_10", + "ie_11", + "edge_15", + "edge_18", + "edge_previous", + "edge_current", + "safari_9.1", + "safari_10.1", + "safari_11.1", + "safari_12.1", + "safari_13.1", + "safari_current", + "opera_36", + "opera_previous", + "opera_current", + "chrome_58", + "chrome_previous", + "chrome_current", + { + "device": "Samsung Galaxy S20", + "real_mobile": true, + "os": "android", + "os_version": "10.0" + }, + { + "device": null, + "os": "ios", + "os_version": "7" + }, + { + "device": null, + "os": "ios", + "os_version": "8" + }, + { + "device": null, + "os": "ios", + "os_version": "9" + }, + { + "device": null, + "os": "ios", + "os_version": "10" + }, + { + "device": "iPhone SE", + "real_mobile": true, + "os": "ios", + "os_version": "11" + }, + { + "device": "iPhone XR", + "real_mobile": true, + "os": "ios", + "os_version": "12" + } + ], + "@browsers_broken": [ + { + "@ref": [ + "https://github.com/browserstack/browserstack-runner/issues/245", + "Android 4, Android 5, Android 6" + ] + }, + { + "@ref": [ + "https://github.com/browserstack/browserstack-runner/issues/226", + "Android 7-10", + "iOS 13, 14" + ] + }, + { + "device": "Samsung Galaxy S7", + "real_mobile": true, + "os": "android", + "os_version": "6.0" + }, + { + "device": null, + "os": "ios", + "os_version": "13" + }, + { + "device": null, + "os": "ios", + "os_version": "14" + } + ] +} diff --git a/build/browserstack-quick.json b/build/browserstack-quick.json new file mode 100644 index 000000000..54cf01390 --- /dev/null +++ b/build/browserstack-quick.json @@ -0,0 +1,28 @@ +{ + "test_framework": "qunit", + "test_path": ["test/index.html"], + "test_server_port": "8899", + "exit_with_fail": true, + "timeout": 600, + "browsers": [ + "firefox_45", + "firefox_current", + "ie_9", + "safari_9.1", + "safari_current", + "opera_current", + "chrome_current", + { + "device": "Samsung Galaxy S20", + "real_mobile": true, + "os": "android", + "os_version": "10.0" + }, + { + "device": "iPhone SE", + "real_mobile": true, + "os": "ios", + "os_version": "11" + } + ] +} diff --git a/package-lock.json b/package-lock.json index eb6354750..83853ac7b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1118,6 +1118,135 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@qunitjs/browserstack-runner": { + "version": "0.9.4-qunitjs.2", + "resolved": "https://registry.npmjs.org/@qunitjs/browserstack-runner/-/browserstack-runner-0.9.4-qunitjs.2.tgz", + "integrity": "sha512-wJzxjDZVghS6UJo8tyoBjF4aAtGMtAL63DEo2gUEknRXXjpGschueZdEEyUJ98SHi+BtGclEFfjyq/nKYwzSgQ==", + "dev": true, + "requires": { + "browserstack": "1.3.0", + "chalk": "0.4.0", + "circular-json": "0.3.1", + "js-reporters": "1.1.0", + "mime": "1.6.0", + "resolve": "1.1.7", + "send": "0.16.2", + "tunnel": "0.0.3", + "yargs": "15.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "js-reporters": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/js-reporters/-/js-reporters-1.1.0.tgz", + "integrity": "sha1-yDwA/g1Mn2f5RLTt1fOylXSXzWI=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + } + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + }, + "yargs": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" + } + } + } + }, "@rollup/plugin-babel": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", @@ -1675,6 +1804,12 @@ "node-releases": "^1.1.70" } }, + "browserstack": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.3.0.tgz", + "integrity": "sha1-hDgFPvasu4RNxrKRUQwZQznrUN8=", + "dev": true + }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -1777,6 +1912,12 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, + "circular-json": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz", + "integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0=", + "dev": true + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -3691,6 +3832,12 @@ "ansi-regex": "^2.0.0" } }, + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -6393,6 +6540,12 @@ "punycode": "^2.1.1" } }, + "tunnel": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.3.tgz", + "integrity": "sha1-6PmIEVynvp0HbHofrkeIvnCPDPE=", + "dev": true + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", diff --git a/package.json b/package.json index de1d1ec06..8592c52cc 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "@rollup/plugin-commonjs": "^18.0.0", "@rollup/plugin-node-resolve": "^11.2.1", "@rollup/plugin-replace": "^2.4.2", + "@qunitjs/browserstack-runner": "0.9.4-qunitjs.2", "coveralls": "^3.1.0", "eslint-config-jquery": "^3.0.0", "eslint-plugin-html": "^6.1.2", @@ -84,6 +85,7 @@ "test:lint": "grunt eslint", "test:main": "npm run build && grunt test", "test:cli": "npm run build && bin/qunit.js test/cli/*.js", + "browserstack": "browserstack-runner -v", "authors": "grunt authors", "coverage": "npm run build:coverage && npm run coverage:_cli && npm run coverage:_main && nyc report", "coverage:_cli": "nyc --use-spawn-wrap --silent bin/qunit.js test/cli/*.js",