Feat/automatic update installation (#5345)

Signed-off-by: AdemolaAri <ademola.ari@gmail.com>
This commit is contained in:
Ademola Arigbabuwo
2025-12-01 14:50:41 -05:00
committed by GitHub
parent 8e9b6c9bc6
commit c3c71a2ff4
5 changed files with 224 additions and 66 deletions
+15 -3
View File
@@ -106,7 +106,7 @@ export class GitHubUpdater {
log.info(`GitHubUpdater: Looking for asset named: ${assetName}`);
log.info(`GitHubUpdater: Available assets: ${release.assets.map((a) => a.name).join(', ')}`);
const asset = release.assets.find((a) => a.name === assetName);
const asset = release.assets.find((a) => a.name.toLowerCase() === assetName.toLowerCase()); // keeping comparison to lower case becasue Goose vs goose
if (asset) {
downloadUrl = asset.browser_download_url;
log.info(`GitHubUpdater: Found matching asset: ${asset.name} (${asset.size} bytes)`);
@@ -115,6 +115,12 @@ export class GitHubUpdater {
log.warn(`GitHubUpdater: No matching asset found for ${assetName}`);
}
if (!downloadUrl) {
throw new Error(
`Update Available but no download URL found for platform: ${platform}, arch: ${arch}`
);
}
return {
updateAvailable: true,
latestVersion,
@@ -159,6 +165,7 @@ export class GitHubUpdater {
if (!response.body) {
throw new Error('Response body is null');
}
let lastReportedPercent = -1; // Track last reported percentage to throttle updates
// Read the response stream
const reader = response.body.getReader();
@@ -172,10 +179,15 @@ export class GitHubUpdater {
chunks.push(value);
downloadedSize += value.length;
// Report progress
// Report progress - only when percentage changes by at least 1%
if (totalSize > 0 && onProgress) {
const percent = Math.round((downloadedSize / totalSize) * 100);
onProgress(percent);
// Only report if percent changed (throttles from hundreds/sec to ~100 total)
if (percent !== lastReportedPercent) {
onProgress(percent);
lastReportedPercent = percent;
}
}
}