Skip to content

Commit 6bd522b

Browse files
authoredMar 6, 2025··
misc: convert server/lib/modes files to ts + add more cli options to Cloud terminal error outputs (#31211)
* chore: convert server/lib/modes files to ts * update snapshots * add back require * fix call to errors.warning * Add changelog entry.
1 parent 17e76f8 commit 6bd522b

File tree

15 files changed

+219
-181
lines changed

15 files changed

+219
-181
lines changed
 

‎cli/CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33

44
_Released 3/11/2025 (PENDING)_
55

6+
**Misc:**
7+
8+
- Additional CLI options will be displayed in the terminal for some Cloud error messages. Addressed in [#31211](https://github.com/cypress-io/cypress/pull/31211).
9+
610
**Dependency Updates:**
711

812
- Upgraded `cli-table3` from `0.5.1` to `0.6.5`. Addressed in [#31166](https://github.com/cypress-io/cypress/pull/31166).

‎packages/errors/src/errors.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ export const AllCypressErrors = {
240240
241241
https://on.cypress.io/stale-run`
242242
},
243-
CLOUD_ALREADY_COMPLETE: (props: {runUrl: string}) => {
243+
CLOUD_ALREADY_COMPLETE: (props: {runUrl: string, tags: string, group: string, parallel: string, ciBuildId: string}) => {
244244
return errTemplate`\
245245
The run you are attempting to access is already complete and will not accept new groups.
246246
@@ -257,7 +257,7 @@ export const AllCypressErrors = {
257257
258258
https://on.cypress.io/already-complete`
259259
},
260-
CLOUD_PARALLEL_REQUIRED: (arg1: {runUrl: string}) => {
260+
CLOUD_PARALLEL_REQUIRED: (arg1: {tags: string, group: string, runUrl: string, ciBuildId: string }) => {
261261
return errTemplate`\
262262
You did not pass the ${fmt.flag(`--parallel`)} flag, but this run's group was originally created with the --parallel flag.
263263
@@ -274,13 +274,14 @@ export const AllCypressErrors = {
274274
275275
https://on.cypress.io/parallel-required`
276276
},
277-
CLOUD_PARALLEL_DISALLOWED: (arg1: {runUrl: string}) => {
277+
CLOUD_PARALLEL_DISALLOWED: (arg1: {tags: string, group: string, runUrl: string, ciBuildId: string}) => {
278278
return errTemplate`\
279279
You passed the ${fmt.flag(`--parallel`)} flag, but this run group was originally created without the --parallel flag.
280280
281281
The existing run is: ${fmt.url(arg1.runUrl)}
282282
283283
${fmt.listFlags(arg1, {
284+
tags: '--tag',
284285
group: '--group',
285286
parallel: '--parallel',
286287
ciBuildId: '--ciBuildId',
@@ -290,7 +291,7 @@ export const AllCypressErrors = {
290291
291292
https://on.cypress.io/parallel-disallowed`
292293
},
293-
CLOUD_PARALLEL_GROUP_PARAMS_MISMATCH: (arg1: {runUrl: string, parameters: any, payload: any }) => {
294+
CLOUD_PARALLEL_GROUP_PARAMS_MISMATCH: (arg1: {group: string, runUrl: string, ciBuildId: string, parameters: any, payload: any }) => {
294295
let params: any = arg1.parameters
295296

296297
if (arg1.payload?.differentParams) {
@@ -344,7 +345,7 @@ export const AllCypressErrors = {
344345
345346
https://on.cypress.io/parallel-group-params-mismatch`
346347
},
347-
CLOUD_RUN_GROUP_NAME_NOT_UNIQUE: (arg1: {runUrl: string, ciBuildId?: string | null}) => {
348+
CLOUD_RUN_GROUP_NAME_NOT_UNIQUE: (arg1: {group: string, runUrl: string, ciBuildId?: string | null}) => {
348349
return errTemplate`\
349350
You passed the ${fmt.flag(`--group`)} flag, but this group name has already been used for this run.
350351
@@ -370,7 +371,7 @@ export const AllCypressErrors = {
370371
371372
${fmt.off(arg1.link)}`
372373
},
373-
CLOUD_AUTO_CANCEL_MISMATCH: (arg1: {runUrl: string}) => {
374+
CLOUD_AUTO_CANCEL_MISMATCH: (arg1: {runUrl: string, tags: string, group: string, parallel: string, ciBuildId: string, autoCancelAfterFailures: string }) => {
374375
return errTemplate`\
375376
You passed the ${fmt.flag(`--auto-cancel-after-failures`)} flag, but this run originally started with a different value for the ${fmt.flag(`--auto-cancel-after-failures`)} flag.
376377
@@ -1397,7 +1398,6 @@ export const AllCypressErrors = {
13971398
https://on.cypress.io/test-retries
13981399
`
13991400
},
1400-
// TODO: test this
14011401
INVALID_CONFIG_OPTION: (arg1: string[]) => {
14021402
const phrase = arg1.length > 1 ? 'options are' : 'option is'
14031403

@@ -1886,7 +1886,7 @@ export const AllCypressErrors = {
18861886
// eslint-disable-next-line @typescript-eslint/no-unused-vars
18871887
const _typeCheck: Record<keyof AllCypressErrorObj, (...args: any[]) => ErrTemplateResult> = AllCypressErrors
18881888

1889-
type AllCypressErrorObj = typeof AllCypressErrors
1889+
export type AllCypressErrorObj = typeof AllCypressErrors
18901890

18911891
export type AllCypressErrorNames = keyof typeof AllCypressErrors
18921892

‎packages/server/__snapshots__/cypress_spec.js

+12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ exports['RECORD_PARAMS_WITHOUT_RECORDING-ciBuildId 1'] = `
22
You passed the --ci-build-id, --group, --tag, --parallel, or --auto-cancel-after-failures flag without also passing the --record flag.
33
44
The --ci-build-id flag you passed was: ciBuildId123
5+
The --parallel flag you passed was: undefined
6+
The --auto-cancel-after-failures flag you passed was: undefined
57
68
These flags can only be used when recording to Cypress Cloud.
79
@@ -22,6 +24,8 @@ exports['RECORD_PARAMS_WITHOUT_RECORDING-group 1'] = `
2224
You passed the --ci-build-id, --group, --tag, --parallel, or --auto-cancel-after-failures flag without also passing the --record flag.
2325
2426
The --group flag you passed was: e2e-tests
27+
The --parallel flag you passed was: undefined
28+
The --auto-cancel-after-failures flag you passed was: undefined
2529
2630
These flags can only be used when recording to Cypress Cloud.
2731
@@ -32,6 +36,7 @@ exports['RECORD_PARAMS_WITHOUT_RECORDING-parallel 1'] = `
3236
You passed the --ci-build-id, --group, --tag, --parallel, or --auto-cancel-after-failures flag without also passing the --record flag.
3337
3438
The --parallel flag you passed was: true
39+
The --auto-cancel-after-failures flag you passed was: undefined
3540
3641
These flags can only be used when recording to Cypress Cloud.
3742
@@ -43,6 +48,7 @@ You passed the --ci-build-id, --group, --tag, --parallel, or --auto-cancel-after
4348
4449
The --group flag you passed was: electron-smoke-tests
4550
The --parallel flag you passed was: true
51+
The --auto-cancel-after-failures flag you passed was: undefined
4652
4753
These flags can only be used when recording to Cypress Cloud.
4854
@@ -53,6 +59,7 @@ exports['INDETERMINATE_CI_BUILD_ID-group 1'] = `
5359
You passed the --group or --parallel flag but we could not automatically determine or generate a ciBuildId.
5460
5561
The --group flag you passed was: e2e-tests
62+
The --parallel flag you passed was: undefined
5663
5764
In order to use either of these features a ciBuildId must be determined.
5865
@@ -221,6 +228,7 @@ You passed the --parallel flag, but this run group was originally created withou
221228
222229
The existing run is: https://cloud.cypress.io/runs/12345
223230
231+
The --tag flag you passed was:
224232
The --group flag you passed was: electron-smoke-tests
225233
The --ciBuildId flag you passed was: ciBuildId123
226234
@@ -275,6 +283,9 @@ https://on.cypress.io/stale-run
275283
exports['RECORD_PARAMS_WITHOUT_RECORDING-tag 1'] = `
276284
You passed the --ci-build-id, --group, --tag, --parallel, or --auto-cancel-after-failures flag without also passing the --record flag.
277285
286+
The --parallel flag you passed was: undefined
287+
The --auto-cancel-after-failures flag you passed was: undefined
288+
278289
These flags can only be used when recording to Cypress Cloud.
279290
280291
https://on.cypress.io/record-params-without-recording
@@ -422,6 +433,7 @@ https://on.cypress.io/record-params-without-recording
422433
exports['RECORD_PARAMS_WITHOUT_RECORDING-auto-cancel-after-failures 1'] = `
423434
You passed the --ci-build-id, --group, --tag, --parallel, or --auto-cancel-after-failures flag without also passing the --record flag.
424435
436+
The --parallel flag you passed was: undefined
425437
The --auto-cancel-after-failures flag you passed was: 4
426438
427439
These flags can only be used when recording to Cypress Cloud.

‎packages/server/lib/cloud/api/index.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,10 @@ const isRetriableError = (err) => {
239239

240240
export type CreateRunOptions = {
241241
projectRoot: string
242-
ci: string
242+
ci: {
243+
params: string
244+
provider: string
245+
}
243246
ciBuildId: string
244247
projectId: string
245248
recordKey: string
@@ -253,6 +256,7 @@ export type CreateRunOptions = {
253256
testingType: 'e2e' | 'component'
254257
timeout?: number
255258
project: ProjectBase
259+
autoCancelAfterFailures?: number | undefined
256260
}
257261

258262
type CreateRunResponse = {

‎packages/server/lib/cloud/artifacts/upload_artifacts.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ const toUploadReportPayload = (acc: {
6868
type UploadArtifactOptions = {
6969
protocolManager?: ProtocolManager
7070
videoUploadUrl?: string
71-
video?: string // filepath to the video artifact
71+
video?: string | null // filepath to the video artifact
7272
screenshots?: {
7373
screenshotId: string
7474
path: string

‎packages/server/lib/cypress.js ‎packages/server/lib/cypress.ts

+30-26
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,17 @@ require('./environment')
99
// essentially do it all again when we boot the correct
1010
// mode.
1111

12-
const Promise = require('bluebird')
13-
const debug = require('debug')('cypress:server:cypress')
14-
const { getPublicConfigKeys } = require('@packages/config')
15-
const argsUtils = require('./util/args')
16-
const { telemetry } = require('@packages/telemetry')
17-
const { getCtx, hasCtx } = require('@packages/data-context')
18-
19-
const warning = (code, args) => {
20-
return require('./errors').warning(code, args)
21-
}
12+
import Promise from 'bluebird'
13+
import Debug from 'debug'
14+
import { getPublicConfigKeys } from '@packages/config'
15+
import argsUtils from './util/args'
16+
import { telemetry } from '@packages/telemetry'
17+
import { getCtx, hasCtx } from '@packages/data-context'
18+
import { warning as errorsWarning } from './errors'
19+
20+
const debug = Debug('cypress:server:cypress')
21+
22+
type Mode = 'exit' | 'info' | 'interactive' | 'pkg' | 'record' | 'results' | 'run' | 'smokeTest' | 'version' | 'returnPkg' | 'exitWithCode'
2223

2324
const exit = async (code = 0) => {
2425
// TODO: we shouldn't have to do this
@@ -27,7 +28,7 @@ const exit = async (code = 0) => {
2728
debug('about to exit with code', code)
2829

2930
if (hasCtx()) {
30-
await getCtx().lifecycleManager.mainProcessWillDisconnect().catch((err) => {
31+
await getCtx().lifecycleManager.mainProcessWillDisconnect().catch((err: any) => {
3132
debug('mainProcessWillDisconnect errored with: ', err)
3233
})
3334
}
@@ -37,14 +38,14 @@ const exit = async (code = 0) => {
3738
span?.setAttribute('exitCode', code)
3839
span?.end()
3940

40-
await telemetry.shutdown().catch((err) => {
41+
await telemetry.shutdown().catch((err: any) => {
4142
debug('telemetry shutdown errored with: ', err)
4243
})
4344

4445
return process.exit(code)
4546
}
4647

47-
const showWarningForInvalidConfig = (options) => {
48+
const showWarningForInvalidConfig = (options: any) => {
4849
const publicConfigKeys = getPublicConfigKeys()
4950
const invalidConfigOptions = require('lodash').keys(options.config).reduce((invalid, option) => {
5051
if (!publicConfigKeys.find((configKey) => configKey === option)) {
@@ -55,15 +56,17 @@ const showWarningForInvalidConfig = (options) => {
5556
}, [])
5657

5758
if (invalidConfigOptions.length && options.invokedFromCli) {
58-
return warning('INVALID_CONFIG_OPTION', invalidConfigOptions)
59+
return errorsWarning('INVALID_CONFIG_OPTION', invalidConfigOptions)
5960
}
61+
62+
return undefined
6063
}
6164

6265
const exit0 = () => {
6366
return exit(0)
6467
}
6568

66-
const exitErr = (err) => {
69+
const exitErr = (err: any) => {
6770
// log errors to the console
6871
// and potentially raygun
6972
// and exit with 1
@@ -77,12 +80,12 @@ const exitErr = (err) => {
7780
})
7881
}
7982

80-
module.exports = {
83+
export = {
8184
isCurrentlyRunningElectron () {
8285
return require('./util/electron-app').isRunning()
8386
},
8487

85-
runElectron (mode, options) {
88+
runElectron (mode: Mode, options: any) {
8689
// wrap all of this in a promise to force the
8790
// promise interface - even if it doesn't matter
8891
// in dev mode due to cp.spawn
@@ -95,7 +98,7 @@ module.exports = {
9598
// if we weren't invoked from the CLI
9699
// then display a warning to the user
97100
if (!options.invokedFromCli) {
98-
warning('INVOKED_BINARY_OUTSIDE_NPM_MODULE')
101+
errorsWarning('INVOKED_BINARY_OUTSIDE_NPM_MODULE')
99102
}
100103

101104
debug('running Electron currently')
@@ -107,7 +110,7 @@ module.exports = {
107110
debug('starting Electron')
108111
const cypressElectron = require('@packages/electron')
109112

110-
const fn = (code) => {
113+
const fn = (code: number) => {
111114
// juggle up the totalFailed since our outer
112115
// promise is expecting this object structure
113116
debug('electron finished with', code)
@@ -131,7 +134,7 @@ module.exports = {
131134
})
132135
},
133136

134-
start (argv = []) {
137+
start (argv: any = []) {
135138
debug('starting cypress with argv %o', argv)
136139

137140
// if the CLI passed "--" somewhere, we need to remove it
@@ -144,7 +147,7 @@ module.exports = {
144147
options = argsUtils.toObject(argv)
145148

146149
showWarningForInvalidConfig(options)
147-
} catch (argumentsError) {
150+
} catch (argumentsError: any) {
148151
debug('could not parse CLI arguments: %o', argv)
149152

150153
// note - this is promise-returned call
@@ -153,6 +156,7 @@ module.exports = {
153156

154157
debug('from argv %o got options %o', argv, options)
155158

159+
// @ts-expect-error TODO: Fix type that says attachRecordKey is not a function
156160
telemetry.exporter()?.attachRecordKey(options.key)
157161

158162
if (options.headless) {
@@ -202,14 +206,14 @@ module.exports = {
202206
})
203207
},
204208

205-
startInMode (mode, options) {
209+
startInMode (mode: Mode, options: any) {
206210
debug('starting in mode %s with options %o', mode, options)
207211

208212
switch (mode) {
209213
case 'version':
210214
return require('./modes/pkg')(options)
211215
.get('version')
212-
.then((version) => {
216+
.then((version: any) => {
213217
return console.log(version) // eslint-disable-line no-console
214218
}).then(exit0)
215219
.catch(exitErr)
@@ -221,7 +225,7 @@ module.exports = {
221225

222226
case 'smokeTest':
223227
return this.runElectron(mode, options)
224-
.then((pong) => {
228+
.then((pong: any) => {
225229
if (!this.isCurrentlyRunningElectron()) {
226230
return pong
227231
}
@@ -236,7 +240,7 @@ module.exports = {
236240

237241
case 'returnPkg':
238242
return require('./modes/pkg')(options)
239-
.then((pkg) => {
243+
.then((pkg: any) => {
240244
return console.log(JSON.stringify(pkg)) // eslint-disable-line no-console
241245
}).then(exit0)
242246
.catch(exitErr)
@@ -250,7 +254,7 @@ module.exports = {
250254
// run headlessly and exit
251255
// with num of totalFailed
252256
return this.runElectron(mode, options)
253-
.then((results) => {
257+
.then((results: any) => {
254258
if (results.runs) {
255259
const isCanceled = results.runs.filter((run) => run.skippedSpec).length
256260

‎packages/server/lib/modes/exit.js

-8
This file was deleted.

‎packages/server/lib/modes/exit.ts

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { toNumber } from 'lodash'
2+
import Promise from 'bluebird'
3+
4+
export = (options) => {
5+
return Promise.try(() => {
6+
return toNumber(options.exitWithCode)
7+
})
8+
}

‎packages/server/lib/modes/info.js ‎packages/server/lib/modes/info.ts

+18-16
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
/* eslint-disable no-console */
2-
const debug = require('debug')('cypress:server:info')
3-
const launcher = require('@packages/launcher')
4-
const pluralize = require('pluralize')
5-
const { stripIndent } = require('common-tags')
6-
const browserUtils = require('../browsers/utils')
7-
const _ = require('lodash')
8-
const chalk = require('chalk')
9-
const { fs } = require('../util/fs')
10-
2+
import Debug from 'debug'
3+
import { detect as launcherDetect } from '@packages/launcher'
4+
import pluralize from 'pluralize'
5+
import { stripIndent } from 'common-tags'
6+
import browserUtils from '../browsers/utils'
7+
import _ from 'lodash'
8+
import chalk from 'chalk'
9+
import { fs } from '../util/fs'
10+
import type { FoundBrowser } from '@packages/types/src/browser'
11+
12+
const debug = Debug('cypress:server:info')
1113
// color for numbers and short values
1214
const n = chalk.green
1315
// color for paths
@@ -21,7 +23,7 @@ const link = chalk.blue.underline
2123
* If the list has at least 1 item, picks a random item
2224
* and returns it AND the remaining items.
2325
*/
24-
const pickRandomItem = (list) => {
26+
const pickRandomItem = (list: any) => {
2527
if (!list.length) {
2628
return {
2729
item: null,
@@ -40,7 +42,7 @@ const pickRandomItem = (list) => {
4042
// Usually the full browser name to pass via --browser
4143
// is <name>:<channel>. If the channel is stable, you
4244
// can just do "--browser <name>"
43-
const formBrowserName = (browser) => {
45+
const formBrowserName = (browser: FoundBrowser) => {
4446
if (browser.channel === 'stable') {
4547
return browser.name
4648
}
@@ -51,9 +53,9 @@ const formBrowserName = (browser) => {
5153
// for each browser computes the profile folder
5254
// and checks if the folder exists. If exists,
5355
// adds it to the browser object as a property
54-
const addProfilePath = async (browsers = []) => {
56+
const addProfilePath = async (browsers: FoundBrowser[] = []) => {
5557
for (const browser of browsers) {
56-
const profilePath = browserUtils.getBrowserPath(browser)
58+
const profilePath: string = browserUtils.getBrowserPath(browser)
5759

5860
debug('checking profile path %s for browser %s:%s', profilePath, browser.name, browser.channel)
5961
try {
@@ -71,11 +73,11 @@ const addProfilePath = async (browsers = []) => {
7173
return browsers
7274
}
7375

74-
const print = (browsers = []) => {
76+
const print = (browsers: FoundBrowser[] = []) => {
7577
console.log('Displaying Cypress info...')
7678
console.log('')
7779
if (browsers.length) {
78-
console.log('Detected %s %s installed:', n(browsers.length), pluralize('browser', browsers.length))
80+
console.log('Detected %s %s installed:', n(`${browsers.length}`), pluralize('browser', browsers.length))
7981
} else {
8082
console.log('Detected no known browsers installed')
8183
}
@@ -126,7 +128,7 @@ const print = (browsers = []) => {
126128
}
127129

128130
const info = () => {
129-
return launcher.detect()
131+
return launcherDetect()
130132
.then(addProfilePath)
131133
.then(print)
132134
}

‎packages/server/lib/modes/pkg.js

-6
This file was deleted.

‎packages/server/lib/modes/pkg.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import Promise from 'bluebird'
2+
import pkg from '@packages/root'
3+
4+
export = () => {
5+
return Promise.resolve(pkg)
6+
}

‎packages/server/lib/modes/record.js ‎packages/server/lib/modes/record.ts

+118-99
Large diffs are not rendered by default.

‎packages/server/lib/modes/results.ts

+3-11
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import type { FoundBrowser, SpecWithRelativeRoot } from '@packages/types'
55
import path from 'path'
66

77
import type { Cfg } from '../project-base'
8+
import type { ScreenshotMetadata } from './run'
89

910
type dateTimeISO = string
1011
type ms = number
11-
type pixels = number
1212

1313
interface TestError {
1414
message: string
@@ -48,20 +48,12 @@ interface HookInformation {
4848
body: string
4949
}
5050

51-
interface ScreenshotInformation {
52-
height: pixels
53-
name: string
54-
path: string
55-
takenAt: dateTimeISO
56-
width: pixels
57-
}
58-
59-
interface RunResult {
51+
export interface RunResult {
6052
error: string | null
6153
hooks: HookInformation[]
6254
reporter: string
6355
reporterStats: object
64-
screenshots: ScreenshotInformation[]
56+
screenshots: ScreenshotMetadata[]
6557
skippedSpec: boolean
6658
spec: SpecWithRelativeRoot
6759
stats: {

‎packages/server/lib/modes/run.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ import { CDPFailedToStartFirefox } from '../browsers/firefox'
3232
import type { CypressError } from '@packages/errors'
3333

3434
type SetScreenshotMetadata = (data: TakeScreenshotProps) => void
35-
type ScreenshotMetadata = ReturnType<typeof screenshotMetadata>
35+
export type ScreenshotMetadata = ReturnType<typeof screenshotMetadata>
36+
3637
type TakeScreenshotProps = any
3738
type RunEachSpec = any
3839
type BeforeSpecRun = any
@@ -753,7 +754,7 @@ async function waitForTestsToFinishRunning (options: { project: Project, screens
753754
return results
754755
}
755756

756-
function screenshotMetadata (data, resp) {
757+
function screenshotMetadata (data: any, resp: any) {
757758
return {
758759
screenshotId: random.id(),
759760
name: data.name || null,
@@ -1006,7 +1007,7 @@ async function runSpec (config, spec: SpecWithRelativeRoot, options: { project:
10061007
return { results }
10071008
}
10081009

1009-
interface ReadyOptions {
1010+
export interface ReadyOptions {
10101011
autoCancelAfterFailures: number | false
10111012
browser: string
10121013
browsers?: FoundBrowser[]

‎packages/server/lib/modes/smoke_test.js ‎packages/server/lib/modes/smoke_test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
module.exports = {
2-
run (options) {
1+
export = {
2+
run (options: any) {
33
// eslint-disable-next-line no-console
44
console.log(options.pong)
55

5 commit comments

Comments
 (5)

cypress-bot[bot] commented on Mar 6, 2025

@cypress-bot[bot]
Contributor

Circle has built the linux arm64 version of the Test Runner.

Learn more about this pre-release build at https://on.cypress.io/advanced-installation#Install-pre-release-version

Run this command to install the pre-release locally:

npm install https://cdn.cypress.io/beta/npm/14.1.1/linux-arm64/develop-6bd522bb7475a04030431a919c07dba0bc056e36/cypress.tgz

cypress-bot[bot] commented on Mar 6, 2025

@cypress-bot[bot]
Contributor

Circle has built the linux x64 version of the Test Runner.

Learn more about this pre-release build at https://on.cypress.io/advanced-installation#Install-pre-release-version

Run this command to install the pre-release locally:

npm install https://cdn.cypress.io/beta/npm/14.1.1/linux-x64/develop-6bd522bb7475a04030431a919c07dba0bc056e36/cypress.tgz

cypress-bot[bot] commented on Mar 6, 2025

@cypress-bot[bot]
Contributor

Circle has built the darwin arm64 version of the Test Runner.

Learn more about this pre-release build at https://on.cypress.io/advanced-installation#Install-pre-release-version

Run this command to install the pre-release locally:

npm install https://cdn.cypress.io/beta/npm/14.1.1/darwin-arm64/develop-6bd522bb7475a04030431a919c07dba0bc056e36/cypress.tgz

cypress-bot[bot] commented on Mar 6, 2025

@cypress-bot[bot]
Contributor

Circle has built the win32 x64 version of the Test Runner.

Learn more about this pre-release build at https://on.cypress.io/advanced-installation#Install-pre-release-version

Run this command to install the pre-release locally:

npm install https://cdn.cypress.io/beta/npm/14.1.1/win32-x64/develop-6bd522bb7475a04030431a919c07dba0bc056e36/cypress.tgz

cypress-bot[bot] commented on Mar 6, 2025

@cypress-bot[bot]
Contributor

Circle has built the darwin x64 version of the Test Runner.

Learn more about this pre-release build at https://on.cypress.io/advanced-installation#Install-pre-release-version

Run this command to install the pre-release locally:

npm install https://cdn.cypress.io/beta/npm/14.1.1/darwin-x64/develop-6bd522bb7475a04030431a919c07dba0bc056e36/cypress.tgz
Please sign in to comment.