Skip to content
This repository was archived by the owner on Dec 18, 2024. It is now read-only.

Commit 99b0bc3

Browse files
devversionjelbourn
authored andcommitted
chore: add ci setup (#27)
1 parent 940dd26 commit 99b0bc3

20 files changed

+742
-52
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
/coverage/*
2323
/libpeerconnection.log
2424
npm-debug.log
25+
yarn-error.log
2526
testem.log
2627
/typings
2728

.travis.yml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
language: node_js
2+
sudo: false
3+
4+
node_js:
5+
- '6.9.1'
6+
7+
branches:
8+
only:
9+
- master
10+
11+
env:
12+
global:
13+
- LOGS_DIR=/tmp/material-angular-io-build/logs
14+
- SAUCE_USERNAME=angular-ci
15+
- SAUCE_ACCESS_KEY=9b988f434ff8-fbca-8aa4-4ae3-35442987
16+
- BROWSER_STACK_USERNAME=angularteam1
17+
- BROWSER_STACK_ACCESS_KEY=BWCd4SynLzdDcv8xtzsB
18+
- BROWSER_PROVIDER_READY_FILE=/tmp/material-angular-io-build/readyfile
19+
matrix:
20+
- MODE=lint
21+
- MODE=e2e
22+
- MODE=saucelabs
23+
- MODE=browserstack
24+
25+
matrix:
26+
fast_finish: true
27+
28+
install:
29+
- npm install
30+
31+
before_script:
32+
- mkdir -p $LOGS_DIR
33+
34+
script:
35+
- ./scripts/ci/build-and-test.sh
36+
37+
cache:
38+
directories:
39+
- node_modules

angular-cli.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@
3232
"packages": [],
3333
"e2e": {
3434
"protractor": {
35-
"config": "./protractor.conf.js"
35+
"config": "./config/protractor.conf.js"
3636
}
3737
},
3838
"test": {
3939
"karma": {
40-
"config": "./karma.conf.js"
40+
"config": "./config/karma.conf.js"
4141
}
4242
},
4343
"defaults": {

config/browser-providers.js

Lines changed: 300 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,300 @@
1+
2+
// Unique place to configure the browsers which are used in the different CI jobs in Sauce Labs (SL)
3+
// and BrowserStack (BS).
4+
// If the target is set to null, then the browser is not run anywhere during CI.
5+
// If a category becomes empty (e.g. BS and required), then the corresponding job must be commented
6+
// out in Travis configuration.
7+
const configuration = {
8+
'Chrome': { unitTest: {target: 'SL'}, e2e: {target: null}},
9+
'Firefox': { unitTest: {target: 'SL'}, e2e: {target: null}},
10+
'ChromeBeta': { unitTest: {target: null}, e2e: {target: null}},
11+
'FirefoxBeta': { unitTest: {target: null}, e2e: {target: null}},
12+
'ChromeDev': { unitTest: {target: null}, e2e: {target: null}},
13+
'FirefoxDev': { unitTest: {target: null}, e2e: {target: null}},
14+
'IE9': { unitTest: {target: null}, e2e: {target: null}},
15+
'IE10': { unitTest: {target: null}, e2e: {target: null}},
16+
'IE11': { unitTest: {target: null}, e2e: {target: null}},
17+
'Edge': { unitTest: {target: 'SL'}, e2e: {target: null}},
18+
'Android4.1': { unitTest: {target: null}, e2e: {target: null}},
19+
'Android4.2': { unitTest: {target: null}, e2e: {target: null}},
20+
'Android4.3': { unitTest: {target: null}, e2e: {target: null}},
21+
'Android4.4': { unitTest: {target: null}, e2e: {target: null}},
22+
'Android5': { unitTest: {target: null}, e2e: {target: null}},
23+
'Safari7': { unitTest: {target: null}, e2e: {target: null}},
24+
'Safari8': { unitTest: {target: null}, e2e: {target: null}},
25+
'Safari9': { unitTest: {target: 'BS'}, e2e: {target: null}},
26+
'iOS7': { unitTest: {target: null}, e2e: {target: null}},
27+
'iOS8': { unitTest: {target: null}, e2e: {target: null}},
28+
'iOS9': { unitTest: {target: 'BS'}, e2e: {target: null}},
29+
'WindowsPhone': { unitTest: {target: 'BS'}, e2e: {target: null}}
30+
};
31+
32+
exports.customLaunchers = {
33+
'ChromeNoSandbox': {
34+
base: 'Chrome',
35+
flags: ['--no-sandbox']
36+
},
37+
'SL_CHROME': {
38+
base: 'SauceLabs',
39+
browserName: 'chrome',
40+
version: 'latest'
41+
},
42+
'SL_CHROMEBETA': {
43+
base: 'SauceLabs',
44+
browserName: 'chrome',
45+
version: 'beta'
46+
},
47+
'SL_CHROMEDEV': {
48+
base: 'SauceLabs',
49+
browserName: 'chrome',
50+
version: 'dev'
51+
},
52+
'SL_FIREFOX': {
53+
base: 'SauceLabs',
54+
browserName: 'firefox',
55+
version: 'latest'
56+
},
57+
'SL_FIREFOXBETA': {
58+
base: 'SauceLabs',
59+
browserName: 'firefox',
60+
version: 'beta'
61+
},
62+
'SL_FIREFOXDEV': {
63+
base: 'SauceLabs',
64+
browserName: 'firefox',
65+
version: 'dev'
66+
},
67+
'SL_SAFARI7': {
68+
base: 'SauceLabs',
69+
browserName: 'safari',
70+
platform: 'OS X 10.9',
71+
version: '7'
72+
},
73+
'SL_SAFARI8': {
74+
base: 'SauceLabs',
75+
browserName: 'safari',
76+
platform: 'OS X 10.10',
77+
version: '8'
78+
},
79+
'SL_SAFARI9': {
80+
base: 'SauceLabs',
81+
browserName: 'safari',
82+
platform: 'OS X 10.11',
83+
version: '9.0'
84+
},
85+
'SL_IOS7': {
86+
base: 'SauceLabs',
87+
browserName: 'iphone',
88+
platform: 'OS X 10.10',
89+
version: '7.1'
90+
},
91+
'SL_IOS8': {
92+
base: 'SauceLabs',
93+
browserName: 'iphone',
94+
platform: 'OS X 10.10',
95+
version: '8.4'
96+
},
97+
'SL_IOS9': {
98+
base: 'SauceLabs',
99+
browserName: 'iphone',
100+
platform: 'OS X 10.10',
101+
version: '9.1'
102+
},
103+
'SL_IE9': {
104+
base: 'SauceLabs',
105+
browserName: 'internet explorer',
106+
platform: 'Windows 2008',
107+
version: '9'
108+
},
109+
'SL_IE10': {
110+
base: 'SauceLabs',
111+
browserName: 'internet explorer',
112+
platform: 'Windows 2012',
113+
version: '10'
114+
},
115+
'SL_IE11': {
116+
base: 'SauceLabs',
117+
browserName: 'internet explorer',
118+
platform: 'Windows 8.1',
119+
version: '11'
120+
},
121+
'SL_EDGE': {
122+
base: 'SauceLabs',
123+
browserName: 'microsoftedge',
124+
platform: 'Windows 10',
125+
version: '14'
126+
},
127+
'SL_ANDROID4.1': {
128+
base: 'SauceLabs',
129+
browserName: 'android',
130+
platform: 'Linux',
131+
version: '4.1'
132+
},
133+
'SL_ANDROID4.2': {
134+
base: 'SauceLabs',
135+
browserName: 'android',
136+
platform: 'Linux',
137+
version: '4.2'
138+
},
139+
'SL_ANDROID4.3': {
140+
base: 'SauceLabs',
141+
browserName: 'android',
142+
platform: 'Linux',
143+
version: '4.3'
144+
},
145+
'SL_ANDROID4.4': {
146+
base: 'SauceLabs',
147+
browserName: 'android',
148+
platform: 'Linux',
149+
version: '4.4'
150+
},
151+
'SL_ANDROID5': {
152+
base: 'SauceLabs',
153+
browserName: 'android',
154+
platform: 'Linux',
155+
version: '5.1'
156+
},
157+
158+
'BS_CHROME': {
159+
base: 'BrowserStack',
160+
browser: 'chrome',
161+
os: 'OS X',
162+
os_version: 'Yosemite'
163+
},
164+
'BS_FIREFOX': {
165+
base: 'BrowserStack',
166+
browser: 'firefox',
167+
os: 'Windows',
168+
os_version: '10'
169+
},
170+
'BS_SAFARI7': {
171+
base: 'BrowserStack',
172+
browser: 'safari',
173+
os: 'OS X',
174+
os_version: 'Mavericks'
175+
},
176+
'BS_SAFARI8': {
177+
base: 'BrowserStack',
178+
browser: 'safari',
179+
os: 'OS X',
180+
os_version: 'Yosemite'
181+
},
182+
'BS_SAFARI9': {
183+
base: 'BrowserStack',
184+
browser: 'safari',
185+
os: 'OS X',
186+
os_version: 'El Capitan'
187+
},
188+
'BS_IOS7': {
189+
base: 'BrowserStack',
190+
device: 'iPhone 5S',
191+
os: 'ios',
192+
os_version: '7.0',
193+
resolution: '1024x768'
194+
},
195+
'BS_IOS8': {
196+
base: 'BrowserStack',
197+
device: 'iPhone 6',
198+
os: 'ios',
199+
os_version: '8.3',
200+
resolution: '1024x768'
201+
},
202+
'BS_IOS9': {
203+
base: 'BrowserStack',
204+
device: 'iPhone 6S',
205+
os: 'ios',
206+
os_version: '9.0',
207+
resolution: '1024x768'
208+
},
209+
'BS_IE9': {
210+
base: 'BrowserStack',
211+
browser: 'ie',
212+
browser_version: '9.0',
213+
os: 'Windows',
214+
os_version: '7'
215+
},
216+
'BS_IE10': {
217+
base: 'BrowserStack',
218+
browser: 'ie',
219+
browser_version: '10.0',
220+
os: 'Windows',
221+
os_version: '8'
222+
},
223+
'BS_IE11': {
224+
base: 'BrowserStack',
225+
browser: 'ie',
226+
browser_version: '11.0',
227+
os: 'Windows',
228+
os_version: '10'
229+
},
230+
'BS_EDGE': {
231+
base: 'BrowserStack',
232+
browser: 'edge',
233+
os: 'Windows',
234+
os_version: '10'
235+
},
236+
'BS_WINDOWSPHONE' : {
237+
base: 'BrowserStack',
238+
device: 'Nokia Lumia 930',
239+
os: 'winphone',
240+
os_version: '8.1'
241+
},
242+
'BS_ANDROID5': {
243+
base: 'BrowserStack',
244+
device: 'Google Nexus 5',
245+
os: 'android',
246+
os_version: '5.0'
247+
},
248+
'BS_ANDROID4.4': {
249+
base: 'BrowserStack',
250+
device: 'HTC One M8',
251+
os: 'android',
252+
os_version: '4.4'
253+
},
254+
'BS_ANDROID4.3': {
255+
base: 'BrowserStack',
256+
device: 'Samsung Galaxy S4',
257+
os: 'android',
258+
os_version: '4.3'
259+
},
260+
'BS_ANDROID4.2': {
261+
base: 'BrowserStack',
262+
device: 'Google Nexus 4',
263+
os: 'android',
264+
os_version: '4.2'
265+
},
266+
'BS_ANDROID4.1': {
267+
base: 'BrowserStack',
268+
device: 'Google Nexus 7',
269+
os: 'android',
270+
os_version: '4.1'
271+
}
272+
};
273+
274+
exports.platformMap = {
275+
'saucelabs': buildConfiguration('unitTest', 'SL'),
276+
'browserstack': buildConfiguration('unitTest', 'BS'),
277+
};
278+
279+
280+
/** Decode the token for Travis to use. */
281+
function decode(str) {
282+
return (str || '').split('').reverse().join('');
283+
}
284+
285+
/** Setup the access keys */
286+
if (process.env.TRAVIS) {
287+
process.env.SAUCE_ACCESS_KEY = decode(process.env.SAUCE_ACCESS_KEY);
288+
process.env.BROWSER_STACK_ACCESS_KEY = decode(process.env.BROWSER_STACK_ACCESS_KEY);
289+
}
290+
291+
/**
292+
* Build a list of configuration for the specified type and tunnel target.
293+
* @returns {string[]}
294+
*/
295+
function buildConfiguration(type, target) {
296+
return Object.keys(configuration)
297+
.map(item => [item, configuration[item][type]])
298+
.filter(([item, conf]) => conf.target == target)
299+
.map(([item, conf]) => `${target}_${item.toUpperCase()}`);
300+
}

0 commit comments

Comments
 (0)