forked from cypress-io/netlify-plugin-cypress
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathonPreBuild.js
125 lines (109 loc) · 3.23 KB
/
onPreBuild.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// @ts-check
const debug = require('debug')('netlify-plugin-cypress')
const {
ping,
startServerMaybe,
runCypressTests,
processCypressResults,
hasRecordKey,
waitOnMaybe,
} = require('./utils')
const { DEFAULT_BROWSER } = require('./constants')
async function install(arg) {
debug('installing Cypress binary just in case')
const runOptions = debug.enabled ? {} : { stdio: 'ignore' }
try {
await arg.utils.run('cypress', ['install'], runOptions)
} catch (error) {
debug('error installing Cypress: %s', error.message)
const buildUtils = arg.utils.build
console.error('')
console.error('Failed to install Cypress')
console.error('Did you forget to add Cypress as a dev dependency?')
console.error(' npm i -D cypress')
console.error('or')
console.error(' yarn add -D cypress')
console.error('')
console.error(
'See https://github.com/cypress-io/netlify-plugin-cypress#readme',
)
console.error('')
buildUtils.failBuild(
'Failed to install Cypress. Did you forget to add Cypress as a dev dependency?',
{ error },
)
}
}
async function cypressVerify(arg) {
debug('verifying Cypress can run')
try {
await arg.utils.run('cypress', ['verify'])
} catch (error) {
debug('error verifying Cypress: %s', error.message)
const buildUtils = arg.utils.build
console.error('')
console.error('Failed to verify Cypress')
console.error('')
buildUtils.failBuild('Failed to verify Cypress', { error })
}
}
async function cypressInfo(arg) {
debug('Cypress info')
try {
await arg.utils.run('cypress', ['info'])
} catch (error) {
debug('error in Cypress info command: %s', error.message)
const buildUtils = arg.utils.build
console.error('')
console.error('Failed to run Cypress info')
console.error('')
buildUtils.failBuild('Failed Cypress info', { error })
}
}
module.exports = async (arg) => {
// we need to install everything to be ready
await install(arg)
await cypressVerify(arg)
await cypressInfo(arg)
const { inputs, utils } = arg
const preBuildInputs = inputs.preBuild || {}
debug('preBuild inputs %o', preBuildInputs)
const enablePreBuildTests = Boolean(preBuildInputs.enable)
if (!enablePreBuildTests) {
debug('Skipping preBuild tests')
return
}
const browser = preBuildInputs.browser || DEFAULT_BROWSER
const closeServer = startServerMaybe(utils.run, preBuildInputs)
await waitOnMaybe(utils.build, preBuildInputs)
const baseUrl = preBuildInputs['wait-on']
const record = hasRecordKey() && Boolean(preBuildInputs.record)
const spec = preBuildInputs.spec
let group
let tag
if (record) {
group = preBuildInputs.group || 'preBuild'
if (preBuildInputs.tag) {
tag = preBuildInputs.tag
} else {
tag = process.env.CONTEXT
}
}
const configFile = preBuildInputs.configFile
const results = await runCypressTests(
baseUrl,
record,
spec,
group,
tag,
browser,
configFile,
)
if (closeServer) {
debug('closing server')
closeServer()
}
const errorCallback = utils.build.failBuild.bind(utils.build)
const summaryCallback = utils.status.show.bind(utils.status)
processCypressResults(results, errorCallback, summaryCallback)
}