fix: admin/home: list of available updates could be not in version order
Massimo Melina committed
Oct 13, 2024 at 17:34 UTC
21cee9078d34a43844fa84590a8c044652b01f16
1 file changed
+9
-11
src/update.ts
+9
-11
@@ -48,27 +48,25 @@ export type Release = { // not using interface, as it will not work with kvstora
48
name: string,
49
body: string,
50
assets: { name: string, browser_download_url: string }[],
51
- isNewer: boolean // introduced by us
51
+ // fields introduced by us
52
+ isNewer: boolean
53
+ versionScalar: number
54
}
53
-const ReleaseKeys = ['prerelease', 'tag_name', 'name', 'body', 'assets', 'isNewer'] satisfies (keyof Release)[]
55
+const ReleaseKeys = ['prerelease', 'tag_name', 'name', 'body', 'assets', 'isNewer', 'versionScalar'] satisfies (keyof Release)[]
56
const ReleaseAssetKeys = ['name', 'browser_download_url'] satisfies (keyof Release['assets'][0])[]
57
58
export async function getUpdates(strict=false) {
59
getProjectInfo() // check for alerts
60
const stable: Release = await getRepoInfo(HFS_REPO + '/releases/latest')
59
- const verStable = ver(stable)
60
- const ret = await getBetas()
61
stable.isNewer = currentVersion.olderThan(stable.tag_name)
62
+ stable.versionScalar = versionToScalar(stable.name)
63
+ const ret = await getBetas()
64
if (stable.isNewer || RUNNING_BETA)
65
ret.push(stable)
66
// prune a bit, as it will be serialized, but it has a lot of unused data
65
- return ret.filter(x => !strict || x.isNewer).map(x =>
67
+ return _.sortBy(ret, x => -x.versionScalar).filter(x => !strict || x.isNewer).map(x =>
68
Object.assign(_.pick(x, ReleaseKeys), { assets: x.assets.map(a => _.pick(a, ReleaseAssetKeys)) }))
69
68
- function ver(x: any) {
69
- return versionToScalar(x.name)
70
- }
71
-
70
async function getBetas() {
71
if (!updateToBeta.get() && !RUNNING_BETA) return []
72
let page = 1
@@ -80,8 +78,8 @@ export async function getUpdates(strict=false) {
78
const curV = currentVersion.getScalar()
79
for (const x of res) {
80
if (!x.prerelease || x.name.endsWith('-ignore')) continue
83
- const v = ver(x)
84
- if (v < verStable) // we don't consider betas before stable
81
+ const v = x.versionScalar = versionToScalar(x.name)
82
+ if (v < stable.versionScalar) // we don't consider betas before stable
83
return ret
84
if (v === curV) continue // skip current
85
x.isNewer = v > curV // make easy to know what's newer