From 7098789689b46535f3da8c87cb2434681cfd401e Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 17 Mar 2025 11:54:07 +0000 Subject: [PATCH] Fix `--no-update` command line flag (#2210) * Fix `--no-update` command line flag Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add test Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * fail-fast: false Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Skip Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .github/workflows/build_and_test.yaml | 1 + playwright/e2e/launch/launch.spec.ts | 12 ++++++++ playwright/element-desktop-test.ts | 41 +++++++++++++++++++++++++-- src/electron-main.ts | 5 ++-- 4 files changed, 54 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build_and_test.yaml b/.github/workflows/build_and_test.yaml index 2d677d7f..6569bb45 100644 --- a/.github/workflows/build_and_test.yaml +++ b/.github/workflows/build_and_test.yaml @@ -49,6 +49,7 @@ jobs: - linux - windows strategy: + fail-fast: false matrix: include: - name: macOS Universal diff --git a/playwright/e2e/launch/launch.spec.ts b/playwright/e2e/launch/launch.spec.ts index 3b231ff2..78fca814 100644 --- a/playwright/e2e/launch/launch.spec.ts +++ b/playwright/e2e/launch/launch.spec.ts @@ -55,4 +55,16 @@ test.describe("App launch", () => { }), ).resolves.not.toBeNull(); }); + + test.describe("--no-update", () => { + test.use({ + extraArgs: ["--no-update"], + }); + + // XXX: this test works fine locally but in CI the app start races with the test plumbing up the stdout/stderr pipes + // which means the logs are missed, disabling for now. + test.skip("should respect option", async ({ page, stdout }) => { + expect(stdout.data.toString()).toContain("Auto update disabled via command line flag"); + }); + }); }); diff --git a/playwright/element-desktop-test.ts b/playwright/element-desktop-test.ts index f3bf535b..3d8d4f54 100644 --- a/playwright/element-desktop-test.ts +++ b/playwright/element-desktop-test.ts @@ -11,12 +11,37 @@ import fs from "node:fs/promises"; import path, { dirname } from "node:path"; import os from "node:os"; import { fileURLToPath } from "node:url"; +import { PassThrough } from "node:stream"; + +/** + * A PassThrough stream that captures all data written to it. + */ +class CapturedPassThrough extends PassThrough { + private _chunks = []; + + public constructor() { + super(); + super.on("data", this.onData); + } + + private onData = (chunk): void => { + this._chunks.push(chunk); + }; + + public get data(): Buffer { + return Buffer.concat(this._chunks); + } +} interface Fixtures { app: ElectronApplication; tmpDir: string; extraEnv: Record; extraArgs: string[]; + + // Utilities to capture stdout and stderr for tests to make assertions against + stdout: CapturedPassThrough; + stderr: CapturedPassThrough; } const __dirname = dirname(fileURLToPath(import.meta.url)); @@ -24,6 +49,16 @@ const __dirname = dirname(fileURLToPath(import.meta.url)); export const test = base.extend({ extraEnv: {}, extraArgs: [], + + // eslint-disable-next-line no-empty-pattern + stdout: async ({}, use) => { + await use(new CapturedPassThrough()); + }, + // eslint-disable-next-line no-empty-pattern + stderr: async ({}, use) => { + await use(new CapturedPassThrough()); + }, + // eslint-disable-next-line no-empty-pattern tmpDir: async ({}, use) => { const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "element-desktop-tests-")); @@ -31,7 +66,7 @@ export const test = base.extend({ await use(tmpDir); await fs.rm(tmpDir, { recursive: true }); }, - app: async ({ tmpDir, extraEnv, extraArgs }, use) => { + app: async ({ tmpDir, extraEnv, extraArgs, stdout, stderr }, use) => { const args = ["--profile-dir", tmpDir]; const executablePath = process.env["ELEMENT_DESKTOP_EXECUTABLE"]; @@ -49,8 +84,8 @@ export const test = base.extend({ args: [...args, ...extraArgs], }); - app.process().stdout.pipe(process.stdout); - app.process().stderr.pipe(process.stderr); + app.process().stdout.pipe(stdout).pipe(process.stdout); + app.process().stderr.pipe(stderr).pipe(process.stderr); await app.firstWindow(); diff --git a/src/electron-main.ts b/src/electron-main.ts index 16134924..6b243f75 100644 --- a/src/electron-main.ts +++ b/src/electron-main.ts @@ -436,8 +436,9 @@ app.on("ready", async () => { }); }); - if (argv["no-update"]) { - console.log('Auto update disabled via command line flag "--no-update"'); + // Minimist parses `--no-`-prefixed arguments as booleans with value `false` rather than verbatim. + if (argv["update"] === false) { + console.log("Auto update disabled via command line flag"); } else if (global.vectorConfig["update_base_url"]) { console.log(`Starting auto update with base URL: ${global.vectorConfig["update_base_url"]}`); void updater.start(global.vectorConfig["update_base_url"]);