From a2ded729d1851ea5ef52574640f79f759c13a1e3 Mon Sep 17 00:00:00 2001 From: Michael Hollister Date: Thu, 21 Nov 2024 11:51:46 -0600 Subject: [PATCH] Allow for channel update to stable --- receivers/electron/forge.config.js | 1 + receivers/electron/scripts/deploy/deploy.py | 4 ++++ receivers/electron/src/Main.ts | 9 +++++++- receivers/electron/src/Updater.ts | 23 ++++++++++++++++++--- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/receivers/electron/forge.config.js b/receivers/electron/forge.config.js index 85c7b7f..af84960 100644 --- a/receivers/electron/forge.config.js +++ b/receivers/electron/forge.config.js @@ -95,6 +95,7 @@ module.exports = { ], hooks: { readPackageJson: async (forgeConfig, packageJson) => { + packageJson.commit = cp.execSync('git rev-parse HEAD').toString().trim(); packageJson.channel = process.env.FCAST_CHANNEL ? process.env.FCAST_CHANNEL : 'stable'; if (packageJson.channel !== 'stable') { packageJson.channelVersion = process.env.FCAST_CHANNEL_VERSION ? process.env.FCAST_CHANNEL_VERSION : '1'; diff --git a/receivers/electron/scripts/deploy/deploy.py b/receivers/electron/scripts/deploy/deploy.py index 1b308a6..f6a27a8 100644 --- a/receivers/electron/scripts/deploy/deploy.py +++ b/receivers/electron/scripts/deploy/deploy.py @@ -5,6 +5,7 @@ import shutil from functools import cmp_to_key from util import BUCKET_NAME, S3Client, PackageFormat, ArtifactVersion, compare_versions, generate_update_tarball +COMMIT_SHA = os.environ.get('CI_COMMIT_SHA') DEPLOY_DIR = os.environ.get('FCAST_DO_RUNNER_DEPLOY_DIR') TEMP_DIR = os.path.join(DEPLOY_DIR, 'temp') LOCAL_CACHE_DIR = os.path.join(DEPLOY_DIR, 'cache') @@ -163,6 +164,7 @@ def generate_releases_json(artifact_version, delta_info): releases = json.load(file) current_version = releases.get('currentVersion', '0.0.0') + current_commit = releases.get('currentCommit', '') current_releases = releases.get('currentReleases', {}) channel_current_versions = releases.get('channelCurrentVersions', {}) @@ -214,8 +216,10 @@ def generate_releases_json(artifact_version, delta_info): if artifact_version.channel == 'stable' and max([artifact_version.version, current_version], key=cmp_to_key(compare_versions)): releases['currentVersion'] = artifact_version.version + releases['currentCommit'] = COMMIT_SHA else: releases['currentVersion'] = current_version + releases['currentCommit'] = current_commit releases['previousVersions'] = s3.get_versions(full=True) releases['fileVersion'] = RELEASES_JSON_FILE_VERSION diff --git a/receivers/electron/src/Main.ts b/receivers/electron/src/Main.ts index b94a69f..c762256 100644 --- a/receivers/electron/src/Main.ts +++ b/receivers/electron/src/Main.ts @@ -95,7 +95,13 @@ export default class Main { { label: 'About', click: async () => { - let aboutMessage = `Version: ${Main.application.getVersion()}\nRelease channel: ${Updater.releaseChannel}\n`; + let aboutMessage = `Version: ${Main.application.getVersion()}\n`; + + if (Updater.getCommit()) { + aboutMessage += `Commit: ${Updater.getCommit()}\n`; + } + + aboutMessage += `Release channel: ${Updater.releaseChannel}\n`; if (Updater.releaseChannel !== 'stable') { aboutMessage += `Release channel version: ${Updater.getChannelVersion()}\n`; @@ -446,6 +452,7 @@ export default class Main { Main.logger = log4js.getLogger(); Main.logger.info(`Starting application: ${app.name} | ${app.getAppPath()}`); Main.logger.info(`Version: ${app.getVersion()}`); + Main.logger.info(`Commit: ${Updater.getCommit()}`); Main.logger.info(`Release channel: ${Updater.releaseChannel} - ${Updater.getChannelVersion()}`); Main.logger.info(`OS: ${process.platform} ${process.arch}`); diff --git a/receivers/electron/src/Updater.ts b/receivers/electron/src/Updater.ts index 4777970..2c75ba0 100644 --- a/receivers/electron/src/Updater.ts +++ b/receivers/electron/src/Updater.ts @@ -241,6 +241,11 @@ export class Updater { return Updater.localPackageJson.channelVersion; } + public static getCommit(): string { + Updater.localPackageJson.commit = Updater.localPackageJson.commit ? Updater.localPackageJson.commit : null + return Updater.localPackageJson.commit; + } + public static async processUpdate(): Promise { try { const updateInfo: UpdateInfo = JSON.parse(fs.readFileSync(Updater.updateMetadataPath, 'utf8')); @@ -319,10 +324,22 @@ export class Updater { const localChannelVersion: number = Updater.localPackageJson.channelVersion ? Updater.localPackageJson.channelVersion : 0; const currentChannelVersion: number = Updater.releasesJson.channelCurrentVersions[Updater.localPackageJson.channel] ? Updater.releasesJson.channelCurrentVersions[Updater.localPackageJson.channel] : 0; - logger.info('Update check', { channel: Updater.localPackageJson.channel, channel_version: localChannelVersion, localVersion: Updater.localPackageJson.version, - currentVersion: Updater.releasesJson.currentVersion, currentChannelVersion: currentChannelVersion }); + logger.info('Update check', { + channel: Updater.localPackageJson.channel, + channel_version: localChannelVersion, + localVersion: Updater.localPackageJson.version, + currentVersion: Updater.releasesJson.currentVersion, + currentCommit: Updater.releasesJson.currentCommit, + currentChannelVersion: currentChannelVersion + }); - if (Updater.localPackageJson.version !== Updater.releasesJson.currentVersion || (Updater.localPackageJson.channel !== 'stable' && localChannelVersion < currentChannelVersion)) { + const newVersion = Updater.localPackageJson.version !== Updater.releasesJson.currentVersion; + const newChannelVersion = (Updater.localPackageJson.channel !== 'stable' && localChannelVersion < currentChannelVersion); + + // Allow for update promotion to stable, while still getting updates from the subscribed channel + const newCommit = (Updater.localPackageJson.channel !== 'stable' && Updater.localPackageJson.commit !== Updater.releasesJson.currentCommit); + + if (newVersion || newChannelVersion || newCommit) { logger.info('Update available...'); return true; }