Skip to content

Commit cb9d740

Browse files
committed
enable external partner testing
add names to external partner tests use shallow cloning, use bower if necessary, add more external partners nice names smoke tests prettier and storefront use execa fix bower command use node 10 in travis
1 parent 3a5632f commit cb9d740

4 files changed

Lines changed: 166 additions & 15 deletions

File tree

.travis.yml

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ language: node_js
33
sudo: false
44
dist: trusty
55
node_js:
6-
- "6"
6+
- "10"
77

88
addons:
99
chrome: stable
@@ -24,7 +24,8 @@ branches:
2424
stages:
2525
- test
2626
- additional tests
27-
- older version tests
27+
- ember version tests
28+
- external partner tests
2829
- name: deploy
2930
if: type = push AND (branch IN (master, beta, release) OR tag IS present)
3031

@@ -34,18 +35,18 @@ jobs:
3435
include:
3536
# runs tests with current locked deps and linting
3637
- stage: test
37-
env: NAME=test # used only to make Travis UI show description
38+
name: "Basic Tests"
3839
script:
3940
- ./bin/lint-features
4041
- yarn lint:js
4142
- yarn test
4243

4344
- stage: additional tests
44-
env: NAME=optional-features # used only to make Travis UI show description
45+
name: "Optional Features"
4546
install: yarn install
4647
script: yarn test:optional-features
4748

48-
- env: NAME=floating dependencies # used only to make Travis UI show description
49+
- name: "Floating Dependencies"
4950
install: yarn install --no-lockfile --non-interactive
5051
script: yarn test
5152

@@ -54,24 +55,48 @@ jobs:
5455
env: TARGET_IE11=true
5556
script: yarn test
5657

57-
- env: NAME=production # used only to make Travis UI show description
58+
- name: "Production"
5859
install: yarn install
5960
script: yarn test:production
6061

61-
- env: NAME=node-tests # used only to make Travis UI show description
62+
- name: "Node Tests"
6263
install: yarn install
6364
script: yarn test:node
6465

6566
# runs tests against each supported Ember version
66-
- stage: older version tests
67+
- stage: ember version tests
68+
name: "Ember LTS 2.16"
6769
env: EMBER_TRY_SCENARIO=ember-lts-2.16
68-
- env: EMBER_TRY_SCENARIO=ember-lts-2.18
69-
- env: EMBER_TRY_SCENARIO=ember-release
70-
- env: EMBER_TRY_SCENARIO=ember-beta
71-
- env: EMBER_TRY_SCENARIO=ember-canary
70+
- name: "Ember LTS 2.18"
71+
env: EMBER_TRY_SCENARIO=ember-lts-2.18
72+
- name: "Ember Release"
73+
env: EMBER_TRY_SCENARIO=ember-release
74+
- name: "Ember Beta"
75+
env: EMBER_TRY_SCENARIO=ember-beta
76+
- name: "Ember Canary"
77+
env: EMBER_TRY_SCENARIO=ember-canary
78+
79+
# runs tests against various open-source projects for early-warning regression analysis
80+
- stage: external partner tests
81+
name: "Ember Data Model Fragments"
82+
script: yarn test-external:model-fragments
83+
- name: "Ember Observer"
84+
script: yarn test-external:ember-observer
85+
- name: "Travis Web"
86+
script: yarn test-external:travis-web
87+
- name: "emberaddons.com"
88+
script: yarn test-external:emberaddons.com
89+
- name: "Ember Data Change Tracker"
90+
script: yarn test-external:ember-data-change-tracker
91+
- name: "ember-m3"
92+
script: yarn test-external:ember-m3
93+
- name: "Ember Data Storefront"
94+
script: yarn test-external:storefront
95+
- name: "Ember Data Factory Guy"
96+
script: yarn test-external:factory-guy
7297

7398
- stage: deploy
74-
env: NAME=publish # used only to make Travis UI show description
99+
name: "Publish"
75100
install: yarn install
76101
script:
77102
- node_modules/.bin/ember try:reset
@@ -85,6 +110,7 @@ before_install:
85110

86111
install:
87112
- yarn install
113+
- yarn add global bower
88114

89115
script:
90116
- node_modules/.bin/ember try:one $EMBER_TRY_SCENARIO --skip-cleanup

lib/scripts/test-external.js

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
'use strict';
2+
/* eslint-disable no-console, node/no-extraneous-require, node/no-unpublished-require */
3+
const fs = require('fs');
4+
const path = require('path');
5+
const { shellSync } = require('execa');
6+
// apparently violates no-extraneous require? /shrug
7+
const debug = require('debug')('test-external');
8+
const rimraf = require('rimraf');
9+
10+
const projectRoot = path.resolve(__dirname, '../../');
11+
const externalProjectName = process.argv[2];
12+
const gitUrl = process.argv[3];
13+
const tempDir = path.join(projectRoot, '../__external-test-cache');
14+
const projectTempDir = path.join(tempDir, externalProjectName);
15+
16+
if (!gitUrl) {
17+
throw new Error(
18+
'No git url provided to `node ./lib/scripts/test-external`. An https git url should be the first argument.'
19+
);
20+
} else if (gitUrl.indexOf('https') !== 0) {
21+
throw new Error(
22+
`The git url provided to \`node ./lib/scripts/test-external\` should use https. Received '${gitUrl}'`
23+
);
24+
}
25+
26+
console.log(
27+
`Preparing to test external project ${externalProjectName} located at ${gitUrl} against this ember-data commit.`
28+
);
29+
30+
function execWithLog(command, force) {
31+
if (debug.enabled || force) {
32+
return shellSync(command, { stdio: [0, 1, 2] });
33+
}
34+
35+
return shellSync(command);
36+
}
37+
38+
if (!fs.existsSync(tempDir)) {
39+
fs.mkdirSync(tempDir);
40+
}
41+
42+
if (fs.existsSync(projectTempDir)) {
43+
rimraf.sync(projectTempDir);
44+
}
45+
46+
// install the project
47+
try {
48+
execWithLog(
49+
`cd ../__external-test-cache && git clone --depth=1 ${gitUrl} ./${externalProjectName}`
50+
);
51+
} catch (e) {
52+
debug(e);
53+
throw new Error(
54+
`Install of ${gitUrl} for external project ${externalProjectName} testing failed.`
55+
);
56+
}
57+
58+
const useYarn = fs.existsSync(path.join(projectTempDir, 'yarn.lock'));
59+
const useBower = fs.existsSync(path.join(projectTempDir, 'bower.json'));
60+
61+
// install project dependencies and link our local version of ember-data
62+
try {
63+
execWithLog(
64+
`${
65+
useYarn ? 'yarn link' : 'npm link'
66+
} && cd ../__external-test-cache/${externalProjectName} && ${useYarn ? 'yarn' : 'npm install'}${
67+
useBower ? ' && bower install' : ''
68+
}`
69+
);
70+
} catch (e) {
71+
debug(e);
72+
throw new Error(
73+
`Unable to complete install of dependencies for external project ${externalProjectName}`
74+
);
75+
}
76+
77+
// run project tests
78+
console.log(`Running tests for ${externalProjectName}`);
79+
80+
let smokeTestPassed = true;
81+
let commitTestPassed = true;
82+
83+
try {
84+
debug('Running Smoke Test');
85+
execWithLog(`cd ../__external-test-cache/${externalProjectName} && ember test`);
86+
} catch (e) {
87+
smokeTestPassed = false;
88+
}
89+
90+
try {
91+
execWithLog(`${useYarn ? 'yarn link ember-data' : 'npm link ember-data'}`);
92+
} catch (e) {
93+
debug(e);
94+
throw new Error(
95+
`Unable to \`${useYarn ? 'yarn' : 'npm'} link ember-data\` for ${externalProjectName}`
96+
);
97+
}
98+
99+
try {
100+
debug('Re-running tests against EmberData commit');
101+
execWithLog(`cd ../__external-test-cache/${externalProjectName} && ember test`, true);
102+
} catch (e) {
103+
commitTestPassed = false;
104+
}
105+
106+
if (!smokeTestPassed && !commitTestPassed) {
107+
throw new Error(
108+
`Commit may result in a regression, but the smoke test for ${externalProjectName} also failed.`
109+
);
110+
} else if (smokeTestPassed && !commitTestPassed) {
111+
throw new Error(`Commit results in a regression in ${externalProjectName}`);
112+
} else if (!smokeTestPassed) {
113+
console.log(`Commit may resolve issues present in the smoke test for ${externalProjectName}`);
114+
} else {
115+
console.log(`Commit does not regress ${externalProjectName}`);
116+
}

package.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,15 @@
1616
"test:all": "ember try:each",
1717
"test:node": "node node-tests/nodetest-runner.js",
1818
"test:production": "ember test -e production && ember test -e production --record-data-rfc-build",
19-
"test:optional-features": "ember test -e test-optional-features && ember test -e test-optional-features --record-data-rfc-build"
19+
"test:optional-features": "ember test -e test-optional-features && ember test -e test-optional-features --record-data-rfc-build",
20+
"test-external:ember-m3": "node ./lib/scripts/test-external ember-m3 https://github.com/hjdivad/ember-m3.git",
21+
"test-external:ember-data-change-tracker": "node ./lib/scripts/test-external ember-data-change-tracker https://github.com/danielspaniel/ember-data-change-tracker.git",
22+
"test-external:emberaddons.com": "node ./lib/scripts/test-external ember-cli-addon-search https://github.com/gcollazo/ember-cli-addon-search.git",
23+
"test-external:model-fragments": "node ./lib/scripts/test-external ember-data-model-fragments https://github.com/lytics/ember-data-model-fragments.git",
24+
"test-external:ember-observer": "node ./lib/scripts/test-external ember-observer https://github.com/emberobserver/client.git",
25+
"test-external:travis-web": "node ./lib/scripts/test-external travis-web https://github.com/travis-ci/travis-web.git",
26+
"test-external:storefront": "node ./lib/scripts/test-external storefront https://github.com/embermap/ember-data-storefront.git",
27+
"test-external:factory-guy": "node ./lib/scripts/test-external factory-guy https://github.com/danielspaniel/ember-data-factory-guy.git"
2028
},
2129
"author": "",
2230
"license": "MIT",
@@ -92,6 +100,7 @@
92100
"eslint-config-prettier": "^2.9.0",
93101
"eslint-plugin-node": "^7.0.1",
94102
"eslint-plugin-prettier": "2.6.2",
103+
"execa": "^0.10.0",
95104
"fs-extra": "^7.0.0",
96105
"github": "^1.1.1",
97106
"glob": "^7.1.2",

yarn.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3157,7 +3157,7 @@ exec-sh@^0.2.0:
31573157

31583158
execa@^0.10.0:
31593159
version "0.10.0"
3160-
resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"
3160+
resolved "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"
31613161
dependencies:
31623162
cross-spawn "^6.0.0"
31633163
get-stream "^3.0.0"

0 commit comments

Comments
 (0)