mirror of
https://github.com/cypress-io/cypress.git
synced 2026-01-17 04:29:57 -06:00
* Revert "chore: simplify build script (#27547)" This reverts commit0a86ec686e. * Revert "chore: upgrade lerna to 6, cache build step (#26913)" This reverts commit9e60aeba8f. * [run ci] * chore: upgrade lerna to 6, cache build step (#26913) * chore: update build-npm-modules script * chore: update build-npm-modules script * chore: update build-npm-modules script * chore: update build-npm-modules script * chore: update lerna to 6 * [run ci] * try caching build step * we can't clean without building after * add dependencies on scripts for npm packages * update commands * add config for data-context build step * fix output configurations for npm packages, add gitignores * revert changes to config and data-context build steps * fix outputs * run with cache * fix outputs for cli * actually fix outputs * test with cache --------- Co-authored-by: astone123 <adams@cypress.io> * chore: simplify build script (#27547) * chore: simplify build script * update CI workflows * fix workflows * empty commit because Percy weirdness * chore: add driver, reporter, config as implicit dependencies for runner package (#27559) * run all workflows on branch * chore: parallelize test-binary-against-recipes CI step (#27570) * chore: fix some easy circular dependencies in dep graph (#27612) * chore: remove gulp tasks from postinstall (#27616) * empty commit * chore: minor improvements to node_modules_install (#27647) * chore: fix cypress:open and dev scripts * run with cache [run ci] * exclude mochaawesome assets from .yarnclean [run ci] * bump cache again [run ci] * run cached [run ci] * chore: do not cache cli build step [run ci] * update workflow command and docs for build-cli [run ci] * fix commands that use scope [run ci] * use different branch for publish repo [run ci] * percy weirdness? [run ci] * fix postbuild cli script [run ci] * try to remove typescript from production binary [run ci] * fix circular dependency [run ci] * try removing ts from node_modules [run ci] * remove typescript resolution [run ci] * remove redundant target scripts * update to lerna scoped commands * remove unneeded yarn in lerna command * try to fix Electron install in Windows workflow --------- Co-authored-by: Jordan <jordan@jpdesigning.com> Co-authored-by: Dave Kasper <dave.m.kasper@gmail.com>
118 lines
2.7 KiB
JavaScript
118 lines
2.7 KiB
JavaScript
const chokidar = require('chokidar')
|
|
const path = require('path')
|
|
const fs = require('fs-extra')
|
|
const _ = require('lodash')
|
|
const minimist = require('minimist')
|
|
|
|
const toolingRoot = path.join(__dirname, '..')
|
|
|
|
const PROJECT_FIXTURE_DIRECTORY = 'projects'
|
|
|
|
const DIR_PATH = path.join(toolingRoot, PROJECT_FIXTURE_DIRECTORY)
|
|
const OUTPUT_PATH = path.join(toolingRoot, 'lib/fixtureDirs.ts')
|
|
|
|
async function e2eTestScaffold () {
|
|
return _e2eTestScaffold(true)
|
|
}
|
|
|
|
async function _e2eTestScaffold (cleanupEmpty = true) {
|
|
const possibleDirectories = await fs.readdir(DIR_PATH)
|
|
const dirs = await Promise.all(possibleDirectories.map(async (dir) => {
|
|
const fullPath = path.join(DIR_PATH, dir)
|
|
const stat = await fs.stat(fullPath)
|
|
|
|
if (stat.isDirectory()) {
|
|
if (await hasVisibleFileRecursive(fullPath)) {
|
|
return fullPath
|
|
}
|
|
|
|
if (cleanupEmpty) {
|
|
await fs.remove(fullPath)
|
|
}
|
|
|
|
return null
|
|
}
|
|
}))
|
|
const allDirs = dirs.filter((dir) => dir)
|
|
|
|
await fs.writeFile(
|
|
OUTPUT_PATH,
|
|
`/* eslint-disable */
|
|
// Auto-generated by ${path.basename(__filename)} (run yarn gulp e2eTestScaffold)
|
|
export const fixtureDirs = [
|
|
${allDirs
|
|
.map((dir) => ` '${path.basename(dir)}'`).join(',\n')}
|
|
] as const
|
|
|
|
export type ProjectFixtureDir = typeof fixtureDirs[number]
|
|
`,
|
|
)
|
|
|
|
return allDirs
|
|
}
|
|
|
|
async function e2eTestScaffoldWatch () {
|
|
const fixtureWatcher = chokidar.watch(PROJECT_FIXTURE_DIRECTORY, {
|
|
cwd: toolingRoot,
|
|
// ignoreInitial: true,
|
|
depth: 0,
|
|
})
|
|
|
|
fixtureWatcher.on('unlinkDir', () => {
|
|
e2eTestScaffold()
|
|
})
|
|
|
|
fixtureWatcher.on('addDir', _.debounce(() => {
|
|
_e2eTestScaffold(false)
|
|
}))
|
|
|
|
await e2eTestScaffold()
|
|
}
|
|
|
|
/**
|
|
* From the basePath, checks for a valid file within that directory. Used to ignore empty
|
|
* system tests directories left over from switching branches
|
|
*/
|
|
async function hasVisibleFileRecursive (basePath) {
|
|
if (basePath.endsWith('node_modules')) {
|
|
return false
|
|
}
|
|
|
|
const files = await fs.readdir(basePath)
|
|
|
|
const toCheck = await Promise.all(files.filter((f) => !f.startsWith('.')).map(async (f) => {
|
|
try {
|
|
return {
|
|
file: f,
|
|
stat: await fs.stat(path.join(basePath, f)),
|
|
}
|
|
} catch {
|
|
return null
|
|
}
|
|
}))
|
|
|
|
if (toCheck.some((f) => f?.stat.isFile())) {
|
|
return true
|
|
}
|
|
|
|
const directories = toCheck.filter((f) => f?.stat.isDirectory())
|
|
|
|
if (directories.length) {
|
|
for (const dir of directories) {
|
|
if (dir?.file && await hasVisibleFileRecursive(path.join(basePath, dir?.file))) {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
const options = minimist(process.argv)
|
|
|
|
if (options.watch) {
|
|
e2eTestScaffoldWatch()
|
|
} else {
|
|
e2eTestScaffold()
|
|
}
|