Menu

#211 update-check: 4-part release tag (v0.1.8.0) breaks version comparison, no update notice shown

open
nobody
None
2026-04-30
2026-04-30
Anonymous
No

Originally created by: kumaakh

Problem

parseVersion() in src/services/update-check.ts only handles 3-part versions (X.Y.Z). The GitHub release tags use a 4-part format (v0.1.8.0 or v0.1.8.1), which causes parseVersion to return null and isNewer() to silently return false. No update notice is ever shown.

Root cause

// parseVersion("v0.1.8.0") → clean = "0.1.8.0" → parts.length === 4 → returns null
const parts = clean.split('.').map(Number);
if (parts.length !== 3 || ...) return null;

Fix

Update parseVersion to accept both 3-part and 4-part versions, comparing all available parts in order:

function parseVersion(v: string): number[] | null {
  const clean = v.replace(/^v/, '').split('_')[0];
  const parts = clean.split('.').map(Number);
  if (parts.length < 3 || parts.some(n => isNaN(n))) return null;
  return parts;
}

function isNewer(candidate: string, current: string): boolean {
  const c = parseVersion(candidate);
  const i = parseVersion(current);
  if (!c || !i) return false;
  const len = Math.max(c.length, i.length);
  for (let k = 0; k < len; k++) {
    const cv = c[k] ?? 0;
    const iv = i[k] ?? 0;
    if (cv !== iv) return cv > iv;
  }
  return false;
}

This handles v0.1.8 vs v0.1.8.0 (equal), v0.1.8.1 vs v0.1.8 (newer), and remains backward-compatible with 3-part tags.

Related

Tickets: #212

Discussion


Log in to post a comment.

MongoDB Logo MongoDB