From 65f7a93bef8c72c3d15ee041c39a0b76961ad27f Mon Sep 17 00:00:00 2001 From: yougotwill Date: Wed, 19 Feb 2025 16:38:11 +1100 Subject: [PATCH] feat: getLatestReleaseFromFileServer also returns the current release channel this allows us to access it on the node side in the auto update --- ts/components/dialog/debug/components.tsx | 72 ++++++++++--------- ts/node/latest_desktop_release.ts | 10 ++- .../apis/file_server_api/FileServerApi.ts | 4 +- ts/session/fetch_latest_release/index.ts | 12 +++- ts/updater/updater.ts | 27 +++---- 5 files changed, 71 insertions(+), 54 deletions(-) diff --git a/ts/components/dialog/debug/components.tsx b/ts/components/dialog/debug/components.tsx index 4ee204adc..6683e3781 100644 --- a/ts/components/dialog/debug/components.tsx +++ b/ts/components/dialog/debug/components.tsx @@ -83,25 +83,27 @@ export const DebugActions = () => { return; } setLoadingLatestRelease(true); - const versionNumber = await getLatestReleaseFromFileServer( - userEd25519SecretKey, - 'latest' - ); - setLoadingLatestRelease(false); - - if (versionNumber) { - ToastUtils.pushToastInfo( - 'debugCurrentRelease1', - `Current: v${window.versionInfo.version}` - ); - ToastUtils.pushToastInfo('debugLatestRelease', `Available: v${versionNumber}`); - window.log.debug( - `WIP: [debugMenu] [updater] isVersionGreaterThan(latestVersion, currentVersion)`, - isVersionGreaterThan(`v${versionNumber}`, `v${window.versionInfo.version}`) - ); - } else { + const result = await getLatestReleaseFromFileServer(userEd25519SecretKey, 'latest'); + if (!result) { + ToastUtils.pushToastError('debugLatestRelease', 'Failed to fetch latest release'); + return; + } + const [versionNumber, releaseChannel] = result; + if (!versionNumber) { ToastUtils.pushToastError('debugLatestRelease', 'Failed to fetch latest release'); + return; } + setLoadingLatestRelease(false); + + ToastUtils.pushToastInfo( + 'debugCurrentRelease', + `Current: v${window.versionInfo.version}` + ); + ToastUtils.pushToastInfo(`debugLatestRelease`, `Available: v${versionNumber}`); + window.log.debug( + `WIP: [debugMenu] [updater] ${releaseChannel} channel isVersionGreaterThan(latestVersion, currentVersion)`, + isVersionGreaterThan(`v${versionNumber}`, `v${window.versionInfo.version}`) + ); }} > @@ -116,25 +118,27 @@ export const DebugActions = () => { return; } setLoadingAlphaRelease(true); - const versionNumber = await getLatestReleaseFromFileServer( - userEd25519SecretKey, - 'alpha' - ); + const result = await getLatestReleaseFromFileServer(userEd25519SecretKey, 'alpha'); + if (!result) { + ToastUtils.pushToastError('debugAlphaRelease', 'Failed to fetch alpha release'); + return; + } + const [versionNumber, releaseChannel] = result; + if (!versionNumber) { + ToastUtils.pushToastError('debugAlphaRelease', 'Failed to fetch alpha release'); + return; + } setLoadingAlphaRelease(false); - if (versionNumber) { - ToastUtils.pushToastInfo( - 'debugCurrentRelease2', - `Current: v${window.versionInfo.version}` - ); - ToastUtils.pushToastInfo('debugAlphaRelease', `Available: v${versionNumber}`); - window.log.debug( - `WIP: [debugMenu] [updater] isVersionGreaterThan(latestVersion, currentVersion)`, - isVersionGreaterThan(`v${versionNumber}`, `v${window.versionInfo.version}`) - ); - } else { - ToastUtils.pushToastError('debugAlphaRelease', 'Failed to fetch latest release'); - } + ToastUtils.pushToastInfo( + `debugCurrentRelease1`, + `Current: v${window.versionInfo.version}` + ); + ToastUtils.pushToastInfo('debugAlphaRelease', `Available: v${versionNumber}`); + window.log.debug( + `WIP: [debugMenu] [updater] ${releaseChannel} channel isVersionGreaterThan(latestVersion, currentVersion)`, + isVersionGreaterThan(`v${versionNumber}`, `v${window.versionInfo.version}`) + ); }} > diff --git a/ts/node/latest_desktop_release.ts b/ts/node/latest_desktop_release.ts index 0dae4434b..774f88e14 100644 --- a/ts/node/latest_desktop_release.ts +++ b/ts/node/latest_desktop_release.ts @@ -1,9 +1,13 @@ +import type { ReleaseChannels } from '../updater/types'; + let latestRelease: string | undefined; +let releaseChannel: ReleaseChannels | undefined; -export function setLatestRelease(release: string) { - latestRelease = release; +export function setLatestRelease(release: [string, ReleaseChannels]) { + latestRelease = release[0]; + releaseChannel = release[1]; } export function getLatestRelease() { - return latestRelease; + return [latestRelease, releaseChannel]; } diff --git a/ts/session/apis/file_server_api/FileServerApi.ts b/ts/session/apis/file_server_api/FileServerApi.ts index b0b3228b0..d1adf73ab 100644 --- a/ts/session/apis/file_server_api/FileServerApi.ts +++ b/ts/session/apis/file_server_api/FileServerApi.ts @@ -135,7 +135,7 @@ const parseStatusCodeFromOnionRequestV4 = ( export const getLatestReleaseFromFileServer = async ( userEd25519SecretKey: Uint8Array, releaseType?: ReleaseChannels -): Promise => { +): Promise<[string, ReleaseChannels] | null> => { const sigTimestampSeconds = NetworkTime.getNowWithNetworkOffsetSeconds(); const blindedPkHex = await BlindingActions.blindVersionPubkey({ ed25519SecretKey: userEd25519SecretKey, @@ -177,5 +177,5 @@ export const getLatestReleaseFromFileServer = async ( if (!latestVersionWithV) { return null; } - return latestVersionWithV; + return [latestVersionWithV, releaseType || releaseChannel]; }; diff --git a/ts/session/fetch_latest_release/index.ts b/ts/session/fetch_latest_release/index.ts index f11c53ea9..afbd3e369 100644 --- a/ts/session/fetch_latest_release/index.ts +++ b/ts/session/fetch_latest_release/index.ts @@ -30,9 +30,17 @@ async function fetchReleaseFromFSAndUpdateMain(userEd25519SecretKey: Uint8Array) } const justFetched = await getLatestReleaseFromFileServer(userEd25519SecretKey); - window.log.info('[updater] fetched latest release from fileserver: ', justFetched); + if (!justFetched) { + window.log.info('[updater] no new release found on fileserver'); + return; + } + + const [releaseVersion, releaseChannel] = justFetched; + window.log.info( + `[updater] fetched ${releaseChannel} release from fileserver: ${releaseVersion}` + ); - if (isString(justFetched) && !isEmpty(justFetched)) { + if (isString(releaseVersion) && !isEmpty(releaseVersion)) { lastFetchedTimestamp = Date.now(); ipcRenderer.send('set-release-from-file-server', justFetched); window.readyForUpdates(); diff --git a/ts/updater/updater.ts b/ts/updater/updater.ts index 22d2cdb21..85f794301 100644 --- a/ts/updater/updater.ts +++ b/ts/updater/updater.ts @@ -76,29 +76,30 @@ async function checkForUpdates( i18n: SetupI18nReturnType, logger: LoggerType ) { - logger.info('[updater] checkForUpdates'); if (stopped || isUpdating || downloadIgnored) { + logger.info('[updater] checkForUpdates stopped or isUpdating or downloadIgnored'); return; } const canUpdate = await canAutoUpdate(); - logger.info('[updater] canUpdate', canUpdate); + logger.info('[updater] checkForUpdates canAutoUpdate', canUpdate); if (!canUpdate) { - logger.info('[updater] checkForUpdates canAutoUpdate false'); return; } - logger.info('[updater] checkForUpdates...'); + logger.info('[updater] checkForUpdates isUpdating', isUpdating); isUpdating = true; try { - const latestVersionFromFsFromRenderer = getLatestRelease(); + const [latestVersionFromFsFromRenderer, releaseChannelFromFsFromRenderer] = getLatestRelease(); - logger.info('[updater] latestVersionFromFsFromRenderer', latestVersionFromFsFromRenderer); + logger.info( + `[updater] checkForUpdates latestVersionFromFsFromRenderer ${latestVersionFromFsFromRenderer} releaseChannelFromFsFromRenderer ${releaseChannelFromFsFromRenderer}` + ); if (!latestVersionFromFsFromRenderer || !latestVersionFromFsFromRenderer?.length) { logger.info( - '[updater] testVersionFromFsFromRenderer was not updated yet by renderer. Skipping update check' + '[updater] checkForUpdates testVersionFromFsFromRenderer was not updated yet by renderer. Skipping update check' ); return; } @@ -180,10 +181,10 @@ async function checkForUpdates( } function isUpdateAvailable(updateInfo: UpdateInfo): boolean { - const latestVersion = parseVersion(updateInfo.version); - if (!latestVersion) { + const updateVersion = parseVersion(updateInfo.version); + if (!updateVersion) { console.error( - '[updater] isUpdateAvailable could not parse latest version:', + '[updater] isUpdateAvailable could not parse update version:', updateInfo.version ); return false; @@ -192,11 +193,11 @@ function isUpdateAvailable(updateInfo: UpdateInfo): boolean { // We need to convert this to string because typescript won't let us use types across submodules .... const currentVersion = autoUpdater.currentVersion.toString(); - const latestIsNewer = isVersionGreaterThan(latestVersion, currentVersion); + const updateIsNewer = isVersionGreaterThan(updateVersion, currentVersion); console.log( - `[updater] isUpdateAvailable latestIsNewer: ${latestIsNewer} currentVersion: ${currentVersion} latestVersion: ${latestVersion}` + `[updater] isUpdateAvailable updateIsNewer: ${updateIsNewer} currentVersion: ${currentVersion} updateVersion: ${updateVersion}` ); - return latestIsNewer; + return updateIsNewer; } /*