Build and archive the tested frontend, upload it through dedicated FTPS credentials, and atomically activate it through cPanel after CI succeeds.
83 lines
2.0 KiB
TypeScript
83 lines
2.0 KiB
TypeScript
import fs from "node:fs";
|
|
import { defineConfig, devices } from "@playwright/test";
|
|
|
|
const baseURL = "http://127.0.0.1:4173";
|
|
const isCI = !!process.env.CI;
|
|
|
|
process.env.PLAYWRIGHT_BASE_URL = baseURL;
|
|
|
|
const osReleaseValue = (key: string) => {
|
|
try {
|
|
const body = fs.readFileSync("/etc/os-release", "utf8");
|
|
const match = body.match(new RegExp(`^${key}=(.*)$`, "m"));
|
|
return String(match?.[1] || "").replace(/^"|"$/g, "");
|
|
} catch {
|
|
return "";
|
|
}
|
|
};
|
|
|
|
const isUnsupportedWebKitHost = () => {
|
|
if (process.platform !== "linux") {
|
|
return false;
|
|
}
|
|
const id = osReleaseValue("ID").toLowerCase();
|
|
const version = Number.parseFloat(osReleaseValue("VERSION_ID"));
|
|
return id === "ubuntu" && Number.isFinite(version) && version >= 26.04;
|
|
};
|
|
|
|
const webKitOverride = String(process.env.PLAYWRIGHT_PROD_WEBKIT || "")
|
|
.trim()
|
|
.toLowerCase();
|
|
const includeWebKit =
|
|
webKitOverride === "1" || (webKitOverride !== "0" && webKitOverride !== "false" && !isUnsupportedWebKitHost());
|
|
|
|
const projects = [
|
|
{
|
|
name: "chromium-desktop",
|
|
use: {
|
|
...devices["Desktop Chrome"],
|
|
},
|
|
},
|
|
{
|
|
name: "chromium-mobile",
|
|
use: {
|
|
...devices["Pixel 5"],
|
|
},
|
|
},
|
|
];
|
|
|
|
if (includeWebKit) {
|
|
projects.push({
|
|
name: "webkit-desktop",
|
|
use: {
|
|
...devices["Desktop Safari"],
|
|
},
|
|
});
|
|
}
|
|
|
|
export default defineConfig({
|
|
testDir: "./tests/e2e/release",
|
|
testMatch: /.*\.local-prod\.spec\.ts/,
|
|
timeout: 60_000,
|
|
fullyParallel: true,
|
|
forbidOnly: isCI,
|
|
retries: isCI ? 2 : 0,
|
|
workers: isCI ? 2 : 3,
|
|
reporter: [["list"], ["html", { open: "never", outputFolder: "output/playwright/prod/report" }]],
|
|
outputDir: "output/playwright/prod/test-results",
|
|
use: {
|
|
baseURL,
|
|
serviceWorkers: "block",
|
|
trace: "retain-on-failure",
|
|
screenshot: "only-on-failure",
|
|
video: "retain-on-failure",
|
|
},
|
|
webServer: {
|
|
command: "npm run preview -- --host 127.0.0.1 --port 4173",
|
|
url: baseURL,
|
|
timeout: 240_000,
|
|
reuseExistingServer: !isCI,
|
|
},
|
|
projects,
|
|
});
|