Playwright docker improvements (#33213)
* Clean up playwright-common Dockerfile * Speed up element-web docker build * Wire up element-desktop playwright tests via nx * Better debug logs for Element Desktop playwright in CI * Iterate * Iterate * Fix element-desktop screenshot docker * @electron/fuses * Partial revert
This commit is contained in:
committed by
GitHub
parent
b06422d848
commit
133a56da65
+13
-12
@@ -28,7 +28,7 @@
|
||||
"mkdirs": "mkdirp packages deploys",
|
||||
"fetch": "pnpm run mkdirs && node scripts/fetch-package.ts",
|
||||
"asar-webapp": "asar p webapp webapp.asar",
|
||||
"start": "pnpm run build:ts && pnpm run build:res && electron .",
|
||||
"start": "nx start",
|
||||
"lint": "pnpm lint:types && pnpm lint:js",
|
||||
"lint:js": "eslint --max-warnings 0 src hak playwright scripts",
|
||||
"lint:js-fix": "eslint --fix --max-warnings 0 src hak playwright scripts && prettier --log-level=warn --write .",
|
||||
@@ -39,22 +39,19 @@
|
||||
"lint:types:hak": "tsc --noEmit -p hak/tsconfig.json",
|
||||
"build:native": "pnpm run hak",
|
||||
"build:native:universal": "pnpm run hak --target x86_64-apple-darwin fetchandbuild && pnpm run hak --target aarch64-apple-darwin fetchandbuild && pnpm run hak --target x86_64-apple-darwin --target aarch64-apple-darwin copyandlink",
|
||||
"build:32": "pnpm run build:ts && pnpm run build:res && electron-builder --ia32",
|
||||
"build:64": "pnpm run build:ts && pnpm run build:res && electron-builder --x64",
|
||||
"build:universal": "pnpm run build:ts && pnpm run build:res && electron-builder --universal",
|
||||
"build": "pnpm run build:ts && pnpm run build:res && electron-builder",
|
||||
"build:ts": "tsc",
|
||||
"build:res": "node scripts/copy-res.ts",
|
||||
"build:32": "nx build --ia32",
|
||||
"build:64": "nx build --x64",
|
||||
"build:universal": "nx build --universal",
|
||||
"build": "nx build --",
|
||||
"docker:setup": "docker build --platform linux/amd64 -t element-desktop-dockerbuild -f dockerbuild/Dockerfile .",
|
||||
"docker:build:native": "scripts/in-docker.sh pnpm run hak",
|
||||
"docker:build": "scripts/in-docker.sh pnpm run build",
|
||||
"docker:install": "scripts/in-docker.sh pnpm install",
|
||||
"clean": "rimraf webapp.asar dist packages deploys lib",
|
||||
"hak": "node scripts/hak/index.ts",
|
||||
"test": "playwright test",
|
||||
"test:open": "pnpm test --ui",
|
||||
"test:screenshots:build": "docker build playwright -t element-desktop-playwright --platform linux/amd64",
|
||||
"test:screenshots:run": "docker run --rm --network host -v $(pwd):/work/element-desktop -v element-desktop-playwright:/work/element-desktop/node_modules -v /var/run/docker.sock:/var/run/docker.sock --platform linux/amd64 -it element-desktop-playwright",
|
||||
"test:playwright": "nx test:playwright --",
|
||||
"test:playwright:open": "nx test:playwright -- --ui",
|
||||
"test:playwright:screenshots": "nx test:playwright:screenshots --",
|
||||
"sane-postinstall": "electron-builder install-app-deps"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -72,6 +69,7 @@
|
||||
"@babel/preset-env": "^7.18.10",
|
||||
"@babel/preset-typescript": "^7.18.6",
|
||||
"@electron/asar": "4.1.2",
|
||||
"@electron/fuses": "^2.1.1",
|
||||
"@playwright/test": "catalog:",
|
||||
"@stylistic/eslint-plugin": "^5.0.0",
|
||||
"@types/auto-launch": "^5.0.1",
|
||||
@@ -107,5 +105,8 @@
|
||||
"hakDependencies": {
|
||||
"matrix-seshat": "4.2.0"
|
||||
},
|
||||
"packageManager": "pnpm@10.33.0+sha512.10568bb4a6afb58c9eb3630da90cc9516417abebd3fabbe6739f0ae795728da1491e9db5a544c76ad8eb7570f5c4bb3d6c637b2cb41bfdcdb47fa823c8649319"
|
||||
"packageManager": "pnpm@10.33.0+sha512.10568bb4a6afb58c9eb3630da90cc9516417abebd3fabbe6739f0ae795728da1491e9db5a544c76ad8eb7570f5c4bb3d6c637b2cb41bfdcdb47fa823c8649319",
|
||||
"nx": {
|
||||
"includedScripts": []
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,19 @@
|
||||
FROM mcr.microsoft.com/playwright:v1.59.1-jammy@sha256:8a0360d39d1973be506dd59002904a774f6d697d4946c94063b3fd006461c8ff
|
||||
|
||||
WORKDIR /work/element-desktop
|
||||
WORKDIR /work
|
||||
|
||||
RUN apt-get update && apt-get -y install xvfb dbus-x11 && apt-get purge -y --auto-remove && rm -rf /var/lib/apt/lists/*
|
||||
RUN apt-get update && \
|
||||
apt-get -y install xvfb dbus-x11 && \
|
||||
apt-get purge -y --auto-remove && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
corepack enable
|
||||
|
||||
# Create node_modules & dist dirs so that the volumes have the correct permissions
|
||||
RUN mkdir node_modules dist && chown 1000:1000 node_modules dist
|
||||
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
ENV GITHUB_ACTIONS=1
|
||||
ENV DEBUG=pw:browser
|
||||
|
||||
# switch to node user
|
||||
USER 1000:1000
|
||||
|
||||
COPY docker-entrypoint.sh /opt/docker-entrypoint.sh
|
||||
COPY apps/desktop/playwright/docker-entrypoint.sh /opt/docker-entrypoint.sh
|
||||
ENTRYPOINT ["bash", "/opt/docker-entrypoint.sh"]
|
||||
|
||||
@@ -8,11 +8,5 @@ sleep 2
|
||||
|
||||
export DISPLAY=:99
|
||||
|
||||
pnpm install --frozen-lockfile
|
||||
pnpm build -l --dir
|
||||
|
||||
PLAYWRIGHT_HTML_OPEN=never ELEMENT_DESKTOP_EXECUTABLE="./dist/linux-unpacked/element-desktop" \
|
||||
npx playwright test --update-snapshots --reporter line,html "$1"
|
||||
|
||||
# Clean up
|
||||
rm -R core qemu_* || exit 0
|
||||
exec pnpm -C apps/desktop exec playwright test --update-snapshots --reporter line,html "$1"
|
||||
|
||||
@@ -69,7 +69,13 @@ export const test = base.extend<Fixtures>({
|
||||
const args = ["--profile-dir", tmpDir, ...extraArgs];
|
||||
|
||||
if (process.env.GITHUB_ACTIONS) {
|
||||
args.push("--disable-gpu");
|
||||
|
||||
if (process.platform === "linux") {
|
||||
if (process.getuid() === 0) {
|
||||
args.push("--no-sandbox");
|
||||
}
|
||||
|
||||
// GitHub Actions hosted runner lacks dbus and a compatible keyring, so we need to force plaintext storage
|
||||
args.push("--storage-mode", "force-plaintext");
|
||||
} else if (process.platform === "darwin") {
|
||||
|
||||
@@ -19,6 +19,65 @@
|
||||
"tags": ["type=ref,event=branch"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"build:ts": {
|
||||
"cache": true,
|
||||
"command": "tsc",
|
||||
"inputs": ["src", "{projectRoot}/tsconfig.json"],
|
||||
"outputs": ["{projectRoot}/lib/*.js", "{projectRoot}/lib/*.d.ts"],
|
||||
"options": { "cwd": "apps/desktop" }
|
||||
},
|
||||
"build:res": {
|
||||
"cache": true,
|
||||
"command": "node scripts/copy-res.ts",
|
||||
"inputs": ["{projectRoot}/i18n"],
|
||||
"outputs": ["{projectRoot}/lib/i18n"],
|
||||
"options": { "cwd": "apps/desktop" }
|
||||
},
|
||||
"build": {
|
||||
"cache": true,
|
||||
"command": "pnpm exec electron-builder",
|
||||
"inputs": [
|
||||
"src",
|
||||
"{projectRoot}/.hak/hakModules",
|
||||
"{projectRoot}/electron-builder.json",
|
||||
"{projectRoot}/webapp.asar"
|
||||
],
|
||||
"outputs": ["{projectRoot}/dist"],
|
||||
"options": { "cwd": "apps/desktop" },
|
||||
"dependsOn": ["build:*"]
|
||||
},
|
||||
"start": {
|
||||
"command": "electron .",
|
||||
"options": { "cwd": "apps/desktop" },
|
||||
"dependsOn": ["build:*"]
|
||||
},
|
||||
"test:playwright": {
|
||||
"command": "playwright test",
|
||||
"options": { "cwd": "apps/desktop" }
|
||||
},
|
||||
"test:playwright:screenshots:build-app": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
"pnpm run build -l --x64 --dir --publish=never",
|
||||
"pnpm exec electron-fuses write --app ./dist/linux-unpacked/element-desktop EnableNodeCliInspectArguments=on"
|
||||
],
|
||||
"parallel": false,
|
||||
"cwd": "apps/desktop"
|
||||
},
|
||||
"dependsOn": ["build:*"]
|
||||
},
|
||||
"test:playwright:screenshots:build-docker": {
|
||||
"cache": true,
|
||||
"command": "docker build -f playwright/Dockerfile -t element-desktop-playwright --platform linux/amd64 ../..",
|
||||
"inputs": ["{projectRoot}/playwright/Dockerfile", "{projectRoot}/playwright/docker-entrypoint.sh"],
|
||||
"options": { "cwd": "apps/desktop" }
|
||||
},
|
||||
"test:playwright:screenshots": {
|
||||
"command": "docker run --rm --network host -v $(pwd)/../../:/work/ --platform linux/amd64 -it element-desktop-playwright",
|
||||
"options": { "cwd": "apps/desktop" },
|
||||
"dependsOn": ["test:playwright:screenshots:*"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,8 @@ apps/web/webpack-stats.json
|
||||
apps/web/playwright/
|
||||
apps/web/webapp/
|
||||
apps/web/debian/
|
||||
apps/desktop
|
||||
!apps/desktop/package.json
|
||||
|
||||
packages/shared-components/__vis__/
|
||||
packages/shared-components/storybook-static/
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
"dependsOn": ["^build:playwright"]
|
||||
},
|
||||
"test:playwright:screenshots": {
|
||||
"command": "playwright-screenshots nx test:playwright --update-snapshots --project=Chrome --grep @screenshot",
|
||||
"command": "playwright-screenshots nx test:playwright -- --update-snapshots --project=Chrome --grep @screenshot",
|
||||
"options": { "cwd": "apps/web" },
|
||||
"dependsOn": ["^build:playwright"]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user