Files
cypress/system-tests/scripts/scaffold.js
Adam Stone-Lord 4c11731ee1 chore: optimize task execution (#27848)
* Revert "chore: simplify build script (#27547)"

This reverts commit 0a86ec686e.

* Revert "chore: upgrade lerna to 6, cache build step (#26913)"

This reverts commit 9e60aeba8f.

* [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>
2023-10-04 12:25:00 -05:00

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()
}