mirror of
https://github.com/priyanshujain/margin-mail.git
synced 2026-10-02 19:17:05 +00:00
The client itself: the sync engine and mirror, the Gmail and IMAP providers, the screener, the three boxes and two piles, compose and send, the sanitiser and tracker stripping, contacts, clips, backup, notifications and the guide. The pipeline that ships it. Three runners now build in parallel and the publish gate wants all four platform keys in latest.json before a release leaves draft. Linux gets two more packages Tauri does not build: a flatpak repackaged from the deb against GNOME 48, and a Nix package that relinks the deb against nixpkgs so it runs as a native Wayland client rather than through Xwayland. CI runs the Rust suite on all three desktops rather than on Linux alone, and rebuilds the flatpak manifest on every push to main. Two things that were only ever exercised on macOS and were wrong everywhere else. The menu bar was built by adjusting the submenus macOS is given, so on a platform whose default menu has no File or View the new File menu landed after Edit, Check for Updates landed nowhere, and the three places and the reading pane had no menu at all. The deb declared libwebkit2gtk-4.1-0 and libgtk-3-0 twice, because tauri.conf.json named the dependencies Tauri already emits. The updater key exists now, so releases can sign their artifacts.
51 lines
1.9 KiB
TypeScript
51 lines
1.9 KiB
TypeScript
// The end-to-end suite drives the real UI in a browser, where `src/ipc.ts` routes every command to
|
|
// the dev fixture. One command starts everything: `pnpm test:ui` brings up Vite itself and reuses a
|
|
// dev server that is already running.
|
|
//
|
|
// The viewport is fixed at the size the mockups were rendered at, because half of what these tests
|
|
// assert is geometry: the 420px list column, the row height, whether the piles are on screen. A
|
|
// test that measured a window of unknown size would be asserting nothing.
|
|
|
|
import { defineConfig } from "@playwright/test";
|
|
|
|
const PORT = 1450;
|
|
const BASE_URL = `http://localhost:${PORT}`;
|
|
|
|
export default defineConfig({
|
|
testDir: "./tests",
|
|
fullyParallel: true,
|
|
// No retries on purpose. A test that only passes on the second go is a test that is lying about
|
|
// something, and this suite exists because things that looked fine were not.
|
|
retries: 0,
|
|
reporter: [["list"]],
|
|
outputDir: "node_modules/.cache/playwright",
|
|
timeout: 30_000,
|
|
expect: { timeout: 5_000 },
|
|
|
|
use: {
|
|
baseURL: BASE_URL,
|
|
viewport: { width: 1440, height: 900 },
|
|
deviceScaleFactor: 1,
|
|
// The fixture is anchored to the browser's local day, so pinning the zone keeps a run on one
|
|
// machine comparable with a run on another. Nothing in the suite depends on the zone itself.
|
|
timezoneId: "Asia/Kolkata",
|
|
locale: "en-GB",
|
|
trace: "retain-on-failure",
|
|
screenshot: "only-on-failure",
|
|
},
|
|
|
|
// Deliberately not `devices["Desktop Chrome"]`: that device pins a Windows user agent, and the
|
|
// keymap reads the platform off the user agent to decide whether the primary modifier is Command
|
|
// or Control. A faked platform would test the wrong half of every shortcut.
|
|
projects: [{ name: "chromium", use: { browserName: "chromium" } }],
|
|
|
|
webServer: {
|
|
command: "pnpm dev",
|
|
url: BASE_URL,
|
|
reuseExistingServer: true,
|
|
timeout: 60_000,
|
|
stdout: "ignore",
|
|
stderr: "pipe",
|
|
},
|
|
});
|