Setup docker to produce visual regression tests for linux on non-linux hosts
This commit is contained in:
parent
654f5d60a3
commit
546a71d24f
6 changed files with 112 additions and 7 deletions
|
@ -4,7 +4,7 @@
|
||||||
"outDir": "dist",
|
"outDir": "dist",
|
||||||
"lib": ["ESNext", "DOM"],
|
"lib": ["ESNext", "DOM"],
|
||||||
"rootDir": ".",
|
"rootDir": ".",
|
||||||
"types": ["node"],
|
"types": ["node", "jest"],
|
||||||
"noEmit": true,
|
"noEmit": true,
|
||||||
"target": "es6",
|
"target": "es6",
|
||||||
"composite": true
|
"composite": true
|
||||||
|
|
57
devEnv/verify-docker-compose.test.ts
Normal file
57
devEnv/verify-docker-compose.test.ts
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
import * as fs from 'fs'
|
||||||
|
import * as path from 'path'
|
||||||
|
import * as yaml from 'yaml'
|
||||||
|
|
||||||
|
describe(`Docker-compose`, () => {
|
||||||
|
test(`should exclude all node_modules folders`, () => {
|
||||||
|
const dockerComposeFile = fs.readFileSync(
|
||||||
|
path.join(__dirname, '../docker-compose.yml'),
|
||||||
|
{encoding: 'utf8'},
|
||||||
|
)
|
||||||
|
|
||||||
|
const yamlContent = yaml.parse(dockerComposeFile)
|
||||||
|
const dockerVolumes = yamlContent.services['node'].volumes
|
||||||
|
const dockerVolumesThatExludeNodeModules = dockerVolumes.filter(
|
||||||
|
(volume: string) => volume.includes('node_modules'),
|
||||||
|
)
|
||||||
|
|
||||||
|
const allFoldersToExclude = findAllNodejsFoldersAt(
|
||||||
|
path.join(__dirname, '..'),
|
||||||
|
).map((fullPath) => {
|
||||||
|
return path.join(
|
||||||
|
'/app',
|
||||||
|
path.relative(path.join(__dirname, '..'), fullPath),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
const missingExclusions = allFoldersToExclude.filter(
|
||||||
|
(folder) => !dockerVolumesThatExludeNodeModules.includes(folder),
|
||||||
|
)
|
||||||
|
|
||||||
|
if (missingExclusions.length > 0) {
|
||||||
|
throw new Error(
|
||||||
|
`Some node_modules folders are not excluded from docker-compose.yml. You should add them
|
||||||
|
to the voluems section of the node service:\n${missingExclusions
|
||||||
|
.map((s) => '- ' + s)
|
||||||
|
.join('\n')}`,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
function findAllNodejsFoldersAt(dir: string): string[] {
|
||||||
|
const files = fs.readdirSync(dir)
|
||||||
|
const found: string[] = []
|
||||||
|
for (const file of files) {
|
||||||
|
if (file === 'package.json') {
|
||||||
|
found.push(path.join(dir, 'node_modules'))
|
||||||
|
} else if (file !== 'node_modules') {
|
||||||
|
const filePath = path.join(dir, file)
|
||||||
|
const stats = fs.statSync(filePath)
|
||||||
|
if (stats.isDirectory()) {
|
||||||
|
found.push(...findAllNodejsFoldersAt(filePath))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return found
|
||||||
|
}
|
40
docker-compose.yml
Normal file
40
docker-compose.yml
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
# The docker-compose file is only used to *test* the repo on a local linux vm. You don't have
|
||||||
|
# to use docker or know docker to develop the repo.
|
||||||
|
version: '3.8'
|
||||||
|
name: theatre-monorepo
|
||||||
|
services:
|
||||||
|
node:
|
||||||
|
image: mcr.microsoft.com/playwright:v1.36.0-jammy
|
||||||
|
volumes:
|
||||||
|
- .:/app
|
||||||
|
# This ignores all node_modules folders/sub-folders so that we can have a separate installation
|
||||||
|
# of node_modules in host and in the container.
|
||||||
|
# If a folder is missing, the test at devEnv/verify-docker-compose.test.ts will fail, and it'll
|
||||||
|
# tell you which folder(s) are missing.
|
||||||
|
- /app/node_modules
|
||||||
|
- /app/compat-tests/fixtures/basic-react17/package/node_modules
|
||||||
|
- /app/compat-tests/fixtures/r3f-cra/package/node_modules
|
||||||
|
- /app/compat-tests/fixtures/r3f-next-latest/package/.next/node_modules
|
||||||
|
- /app/compat-tests/fixtures/r3f-next-latest/package/.next/types/node_modules
|
||||||
|
- /app/compat-tests/fixtures/r3f-next-latest/package/node_modules
|
||||||
|
- /app/compat-tests/fixtures/r3f-parcel1/package/node_modules
|
||||||
|
- /app/compat-tests/fixtures/r3f-react18/package/node_modules
|
||||||
|
- /app/compat-tests/fixtures/r3f-vite2/package/node_modules
|
||||||
|
- /app/compat-tests/fixtures/r3f-vite4/package/node_modules
|
||||||
|
- /app/compat-tests/node_modules
|
||||||
|
- /app/examples/basic-dom/node_modules
|
||||||
|
- /app/examples/dom-cra/node_modules
|
||||||
|
- /app/examples/r3f-cra/node_modules
|
||||||
|
- /app/packages/benchmarks/node_modules
|
||||||
|
- /app/packages/browser-bundles/node_modules
|
||||||
|
- /app/packages/dataverse/node_modules
|
||||||
|
- /app/packages/dataverse-experiments/node_modules
|
||||||
|
- /app/packages/playground/node_modules
|
||||||
|
- /app/packages/r3f/node_modules
|
||||||
|
- /app/packages/react/node_modules
|
||||||
|
- /app/packages/theatric/node_modules
|
||||||
|
- /app/theatre/core/node_modules
|
||||||
|
- /app/theatre/node_modules
|
||||||
|
- /app/theatre/shared/node_modules
|
||||||
|
- /app/theatre/studio/node_modules
|
||||||
|
command: ['bash', '-c', 'while true; do sleep 1; done']
|
|
@ -37,6 +37,7 @@
|
||||||
"@microsoft/api-documenter": "^7.19.0",
|
"@microsoft/api-documenter": "^7.19.0",
|
||||||
"@microsoft/api-extractor": "^7.28.6",
|
"@microsoft/api-extractor": "^7.28.6",
|
||||||
"@types/eslint": "^8.44.1",
|
"@types/eslint": "^8.44.1",
|
||||||
|
"@types/jest": "^26.0.23",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.30.7",
|
"@typescript-eslint/eslint-plugin": "^5.30.7",
|
||||||
"@typescript-eslint/parser": "^5.30.7",
|
"@typescript-eslint/parser": "^5.30.7",
|
||||||
"esbuild": "^0.18.18",
|
"esbuild": "^0.18.18",
|
||||||
|
@ -56,7 +57,8 @@
|
||||||
"lint-staged": "^13.0.3",
|
"lint-staged": "^13.0.3",
|
||||||
"node-gyp": "^9.1.0",
|
"node-gyp": "^9.1.0",
|
||||||
"prettier": "^2.3.2",
|
"prettier": "^2.3.2",
|
||||||
"typescript": "4.6.4"
|
"typescript": "4.6.4",
|
||||||
|
"yaml": "^2.3.1"
|
||||||
},
|
},
|
||||||
"packageManager": "yarn@3.2.0",
|
"packageManager": "yarn@3.2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -19,11 +19,8 @@ const config: PlaywrightTestConfig = {
|
||||||
/* Maximum time one test can run for. */
|
/* Maximum time one test can run for. */
|
||||||
timeout: 4000,
|
timeout: 4000,
|
||||||
expect: {
|
expect: {
|
||||||
/**
|
// maximum timeout for expect assertions. If longer than the test timeout above, it'll still fail.
|
||||||
* Maximum time expect() should wait for the condition to be met.
|
timeout: 10000,
|
||||||
* For example in `await expect(locator).toHaveText();`
|
|
||||||
*/
|
|
||||||
timeout: 1000,
|
|
||||||
},
|
},
|
||||||
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
||||||
forbidOnly: !!process.env.CI,
|
forbidOnly: !!process.env.CI,
|
||||||
|
|
|
@ -31440,6 +31440,7 @@ fsevents@^1.2.7:
|
||||||
"@microsoft/api-documenter": ^7.19.0
|
"@microsoft/api-documenter": ^7.19.0
|
||||||
"@microsoft/api-extractor": ^7.28.6
|
"@microsoft/api-extractor": ^7.28.6
|
||||||
"@types/eslint": ^8.44.1
|
"@types/eslint": ^8.44.1
|
||||||
|
"@types/jest": ^26.0.23
|
||||||
"@typescript-eslint/eslint-plugin": ^5.30.7
|
"@typescript-eslint/eslint-plugin": ^5.30.7
|
||||||
"@typescript-eslint/parser": ^5.30.7
|
"@typescript-eslint/parser": ^5.30.7
|
||||||
esbuild: ^0.18.18
|
esbuild: ^0.18.18
|
||||||
|
@ -31460,6 +31461,7 @@ fsevents@^1.2.7:
|
||||||
node-gyp: ^9.1.0
|
node-gyp: ^9.1.0
|
||||||
prettier: ^2.3.2
|
prettier: ^2.3.2
|
||||||
typescript: 4.6.4
|
typescript: 4.6.4
|
||||||
|
yaml: ^2.3.1
|
||||||
languageName: unknown
|
languageName: unknown
|
||||||
linkType: soft
|
linkType: soft
|
||||||
|
|
||||||
|
@ -34210,6 +34212,13 @@ fsevents@^1.2.7:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"yaml@npm:^2.3.1":
|
||||||
|
version: 2.3.1
|
||||||
|
resolution: "yaml@npm:2.3.1"
|
||||||
|
checksum: 2c7bc9a7cd4c9f40d3b0b0a98e370781b68b8b7c4515720869aced2b00d92f5da1762b4ffa947f9e795d6cd6b19f410bd4d15fdd38aca7bd96df59bd9486fb54
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"yargs-parser@npm:^13.1.2":
|
"yargs-parser@npm:^13.1.2":
|
||||||
version: 13.1.2
|
version: 13.1.2
|
||||||
resolution: "yargs-parser@npm:13.1.2"
|
resolution: "yargs-parser@npm:13.1.2"
|
||||||
|
|
Loading…
Reference in a new issue