diff --git a/app/main.ts b/app/main.ts index 382ab2c34..1541ddd6a 100644 --- a/app/main.ts +++ b/app/main.ts @@ -2415,7 +2415,8 @@ ipc.handle( process.versions.node, app.getVersion(), os.version(), - userAgent + userAgent, + OS.getLinuxName() ); } ); diff --git a/ts/logging/debuglogs.ts b/ts/logging/debuglogs.ts index cb53c1481..8fc662df6 100644 --- a/ts/logging/debuglogs.ts +++ b/ts/logging/debuglogs.ts @@ -42,7 +42,8 @@ const getHeader = ( nodeVersion: string, appVersion: string, osVersion: string, - userAgent: string + userAgent: string, + linuxVersion?: string ): string => [ headerSection('System info', { @@ -52,6 +53,7 @@ const getHeader = ( Environment: getEnvironment(), 'App version': appVersion, 'OS version': osVersion, + ...(linuxVersion && { 'Linux version': linuxVersion }), }), headerSection('User info', user), headerSection('Capabilities', capabilities), @@ -84,13 +86,21 @@ export function getLog( nodeVersion: string, appVersion: string, osVersion: string, - userAgent: string + userAgent: string, + linuxVersion?: string ): string { let header: string; let body: string; if (isFetchLogIpcData(data)) { const { logEntries } = data; - header = getHeader(data, nodeVersion, appVersion, osVersion, userAgent); + header = getHeader( + data, + nodeVersion, + appVersion, + osVersion, + userAgent, + linuxVersion + ); body = logEntries.map(formatLine).join('\n'); } else { header = headerSectionTitle('Partial logs'); diff --git a/ts/util/os/shared.ts b/ts/util/os/shared.ts index 01fcd66f8..a46120910 100644 --- a/ts/util/os/shared.ts +++ b/ts/util/os/shared.ts @@ -2,6 +2,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import semver from 'semver'; +import { readFileSync } from 'fs-extra'; function createIsPlatform( platform: typeof process.platform, @@ -26,6 +27,7 @@ export type OSType = { isLinux: (minVersion?: string) => boolean; isMacOS: (minVersion?: string) => boolean; isWindows: (minVersion?: string) => boolean; + getLinuxName: () => string | undefined; }; export function getOSFunctions(osRelease: string): OSType { @@ -57,6 +59,20 @@ export function getOSFunctions(osRelease: string): OSType { return 'os-linux'; }; + const getLinuxName = (): string | undefined => { + if (!isLinux()) { + return undefined; + } + + const etcOsRelease = readFileSync('/etc/os-release', 'utf-8'); + const match = etcOsRelease.match(/^PRETTY_NAME=(.+?)$/m); + if (!match) { + return undefined; + } + + return match[1]; + }; + return { getClassName, getName, @@ -64,5 +80,6 @@ export function getOSFunctions(osRelease: string): OSType { isLinux, isMacOS, isWindows, + getLinuxName, }; }