From 217889d95d5b045a4099af5bc099939de993affb Mon Sep 17 00:00:00 2001 From: Sean Colsen Date: Mon, 7 Oct 2024 15:57:49 -0400 Subject: [PATCH 1/2] Install compare-versions package --- mathesar_ui/package-lock.json | 6 ++++++ mathesar_ui/package.json | 1 + 2 files changed, 7 insertions(+) diff --git a/mathesar_ui/package-lock.json b/mathesar_ui/package-lock.json index cd79da17a9..11e3b932d8 100644 --- a/mathesar_ui/package-lock.json +++ b/mathesar_ui/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@fortawesome/free-solid-svg-icons": "^6.2.0", "@popperjs/core": "^2.11.6", + "compare-versions": "^6.1.1", "dayjs": "^1.11.5", "fast-diff": "^1.2.0", "flatpickr": "^4.6.13", @@ -2867,6 +2868,11 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", diff --git a/mathesar_ui/package.json b/mathesar_ui/package.json index e6ab0e021c..cd1dc272c5 100644 --- a/mathesar_ui/package.json +++ b/mathesar_ui/package.json @@ -53,6 +53,7 @@ "dependencies": { "@fortawesome/free-solid-svg-icons": "^6.2.0", "@popperjs/core": "^2.11.6", + "compare-versions": "^6.1.1", "dayjs": "^1.11.5", "fast-diff": "^1.2.0", "flatpickr": "^4.6.13", From 8211d3d15fbbcbaa16e4e6cc839c952d814a8b2d Mon Sep 17 00:00:00 2001 From: Sean Colsen Date: Mon, 7 Oct 2024 16:16:50 -0400 Subject: [PATCH 2/2] Compare versions using semver logic --- mathesar_ui/src/stores/releases.ts | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/mathesar_ui/src/stores/releases.ts b/mathesar_ui/src/stores/releases.ts index 7502290a67..f2ed065c43 100644 --- a/mathesar_ui/src/stores/releases.ts +++ b/mathesar_ui/src/stores/releases.ts @@ -1,3 +1,4 @@ +import { compare } from 'compare-versions'; import { getContext, setContext } from 'svelte'; import { @@ -31,20 +32,6 @@ function buildRelease(gh: GitHubRelease | undefined): Release | undefined { }; } -function orderableTag(tagName: string): number | undefined { - try { - const [major, minor, patch] = tagName - .split('.') - .map((s) => parseInt(s, 10)); - if (Number.isNaN(major) || Number.isNaN(minor) || Number.isNaN(patch)) { - return undefined; - } - return major * 1000000 + minor * 1000 + patch; - } catch (e) { - return undefined; - } -} - type UpgradeStatus = 'upgradable' | 'up-to-date'; function getUpgradeStatus( @@ -54,12 +41,9 @@ function getUpgradeStatus( if (current === undefined || latest === undefined) { return undefined; } - const currentNum = orderableTag(current.tagName); - const LatestNum = orderableTag(latest.tagName); - if (currentNum && LatestNum && LatestNum > currentNum) { - return 'upgradable'; - } - return 'up-to-date'; + return compare(latest.tagName, current.tagName, '>') + ? 'upgradable' + : 'up-to-date'; } export class ReleaseData {