From cde1479cb525ed9c93a028634d3a254db39e2715 Mon Sep 17 00:00:00 2001 From: Max Graey Date: Wed, 1 Apr 2026 19:35:22 +0300 Subject: [PATCH 1/9] Update & modernize scripts / version.js --- scripts/version.js | 62 +++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/scripts/version.js b/scripts/version.js index f1269025..41bf254a 100644 --- a/scripts/version.js +++ b/scripts/version.js @@ -12,7 +12,7 @@ var src = { filter: tag => { var match = /^version_(\d+)$/.exec(tag); // see: https://github.com/WebAssembly/binaryen/issues/1156 return match ? { - tag: tag, + tag, version: match[1] + ".0.0", } : null; } @@ -23,41 +23,47 @@ var dst = { filter: tag => { var match = /^v(\d+\.\d+\.\d+)(?:\-|$)/.exec(tag); return match ? { - tag: tag, + tag, version: match[1] } : null; } }; -function latest(repo) { - return new Promise((resolve, reject) => { - repo.git.tags({ "--sort": "-committerdate" }, (err, tags) => { - if (err) return reject(err); - for (var i = 0; i < tags.all.length; ++i) { - var result = repo.filter(tags.all[i]); - if (result !== null) { - repo.tag = result.tag; - repo.version = result.version; - return resolve(); - }; +async function latest(repo) { + try { + const tags = await repo.git.tags({ "--sort": "-committerdate" }); + for (let i = 0; i < tags.all.length; i++) { + const tag = tags.all[i]; + const res = repo.filter(tag); + if (res !== null) { + return res; } - return reject(Error("no matching tags: " + tags.all.join(", "))); - }); - }).catch(err => { + } + return { version: null, tag: null }; + } catch (err) { console.error(err.stack); process.exit(1); - }); + } } -if (process.argv[2] === "tag") { - latest(src).then(() => console.log(src.tag)); -} else { - latest(src).then(() => { - latest(dst).then(() => { - if (semver.gt(src.version, dst.version)) - console.log(src.version); - else - console.log(src.version + "-nightly." + dateFormat(Date.UTC(), "yyyymmdd")); - }); - }); +async function main() { + if (process.argv[2] === "tag") { + const { tag } = await latest(src); + console.log(tag); + return; + } + + let { version: srcVer } = await latest(src); + let { version: dstVer } = await latest(dst); + + srcVer = semver.clean(srcVer); + dstVer = semver.coerce(dstVer); + + if (!dstVer || semver.gt(srcVer, dstVer)) { + console.log(srcVer); + } else { + console.log(`${srcVer}-nightly.${dateFormat(Date.UTC(), "yyyymmdd")}`); + } } + +main(); From e8e95c05affd91843da96238ec3c542f05668d76 Mon Sep 17 00:00:00 2001 From: Max Graey Date: Wed, 1 Apr 2026 20:07:59 +0300 Subject: [PATCH 2/9] more dry refactorings --- scripts/version.js | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/scripts/version.js b/scripts/version.js index 41bf254a..89dad75a 100644 --- a/scripts/version.js +++ b/scripts/version.js @@ -4,30 +4,23 @@ import dateFormat from "dateformat"; import path from 'path'; import { fileURLToPath } from 'url'; -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const resolve = (...args) => path.resolve(__dirname, ...args); -var src = { - git: simpleGit(__dirname + "/../binaryen"), +const createRepo = (path, regex, mapVersion) => ({ + git: simpleGit(path), filter: tag => { - var match = /^version_(\d+)$/.exec(tag); // see: https://github.com/WebAssembly/binaryen/issues/1156 + const match = regex.exec(tag); return match ? { tag, - version: match[1] + ".0.0", + version: mapVersion(match), } : null; } -}; +}); -var dst = { - git: simpleGit(__dirname + "/.."), - filter: tag => { - var match = /^v(\d+\.\d+\.\d+)(?:\-|$)/.exec(tag); - return match ? { - tag, - version: match[1] - } : null; - } -}; +// see: https://github.com/WebAssembly/binaryen/issues/1156 +const src = createRepo(resolve('../binaryen'), /^version_(\d+)$/, ([, maj]) => `${maj}.0.0`); +const dst = createRepo(resolve('..'), /^v(\d+\.\d+\.\d+)(?:\-|$)/, ([, maj]) => maj); async function latest(repo) { try { From 4e7f54f43f5d3dc3b8e84745563043b4d6e26aa3 Mon Sep 17 00:00:00 2001 From: Max Graey Date: Wed, 1 Apr 2026 20:10:09 +0300 Subject: [PATCH 3/9] clarify --- scripts/version.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/version.js b/scripts/version.js index 89dad75a..a5514a75 100644 --- a/scripts/version.js +++ b/scripts/version.js @@ -20,7 +20,7 @@ const createRepo = (path, regex, mapVersion) => ({ // see: https://github.com/WebAssembly/binaryen/issues/1156 const src = createRepo(resolve('../binaryen'), /^version_(\d+)$/, ([, maj]) => `${maj}.0.0`); -const dst = createRepo(resolve('..'), /^v(\d+\.\d+\.\d+)(?:\-|$)/, ([, maj]) => maj); +const dst = createRepo(resolve('..'), /^v(\d+\.\d+\.\d+)(?:\-|$)/, ([, ver]) => ver); async function latest(repo) { try { From ffb920156f621b055bb23058fe02bdf4551a7247 Mon Sep 17 00:00:00 2001 From: Max Graey Date: Wed, 1 Apr 2026 21:44:16 +0300 Subject: [PATCH 4/9] cleanups --- scripts/version.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/scripts/version.js b/scripts/version.js index a5514a75..0fcae6f6 100644 --- a/scripts/version.js +++ b/scripts/version.js @@ -13,7 +13,7 @@ const createRepo = (path, regex, mapVersion) => ({ const match = regex.exec(tag); return match ? { tag, - version: mapVersion(match), + version: semver.clean(mapVersion(match)), } : null; } }); @@ -49,9 +49,6 @@ async function main() { let { version: srcVer } = await latest(src); let { version: dstVer } = await latest(dst); - srcVer = semver.clean(srcVer); - dstVer = semver.coerce(dstVer); - if (!dstVer || semver.gt(srcVer, dstVer)) { console.log(srcVer); } else { From 13ada627bc179aa332fac4936579714b673c2c81 Mon Sep 17 00:00:00 2001 From: Max Graey Date: Wed, 1 Apr 2026 22:48:38 +0300 Subject: [PATCH 5/9] better --- scripts/version.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/scripts/version.js b/scripts/version.js index 0fcae6f6..4289bead 100644 --- a/scripts/version.js +++ b/scripts/version.js @@ -7,6 +7,8 @@ import { fileURLToPath } from 'url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const resolve = (...args) => path.resolve(__dirname, ...args); +const MAX_TAGS_LIMIT = 64; + const createRepo = (path, regex, mapVersion) => ({ git: simpleGit(path), filter: tag => { @@ -19,14 +21,15 @@ const createRepo = (path, regex, mapVersion) => ({ }); // see: https://github.com/WebAssembly/binaryen/issues/1156 -const src = createRepo(resolve('../binaryen'), /^version_(\d+)$/, ([, maj]) => `${maj}.0.0`); +const src = createRepo(resolve('../binaryen'), /^version_(\d+)(?:_.*)?$/, ([, maj]) => `${maj}.0.0`); const dst = createRepo(resolve('..'), /^v(\d+\.\d+\.\d+)(?:\-|$)/, ([, ver]) => ver); async function latest(repo) { try { - const tags = await repo.git.tags({ "--sort": "-committerdate" }); - for (let i = 0; i < tags.all.length; i++) { - const tag = tags.all[i]; + const tagsRaw = await repo.git.raw(['tag', '--sort=-v:refname']); + const allTags = tagsRaw.split('\n').filter(Boolean).slice(0, MAX_TAGS_LIMIT); + + for (let tag of allTags) { const res = repo.filter(tag); if (res !== null) { return res; From 0dfcd0454e34329508e539985bfdbcbc8a48738c Mon Sep 17 00:00:00 2001 From: Max Graey Date: Wed, 1 Apr 2026 23:17:15 +0300 Subject: [PATCH 6/9] debug (wip) --- scripts/version.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/version.js b/scripts/version.js index 4289bead..1f49bbfb 100644 --- a/scripts/version.js +++ b/scripts/version.js @@ -29,6 +29,8 @@ async function latest(repo) { const tagsRaw = await repo.git.raw(['tag', '--sort=-v:refname']); const allTags = tagsRaw.split('\n').filter(Boolean).slice(0, MAX_TAGS_LIMIT); + console.log('allTags:\n', allTags); + for (let tag of allTags) { const res = repo.filter(tag); if (res !== null) { @@ -52,6 +54,9 @@ async function main() { let { version: srcVer } = await latest(src); let { version: dstVer } = await latest(dst); + console.log('srcVer:', srcVer); + console.log('dstVer:', dstVer); + if (!dstVer || semver.gt(srcVer, dstVer)) { console.log(srcVer); } else { From e123edde100b30b0ab3961b20dfe427f0183864c Mon Sep 17 00:00:00 2001 From: Max Graey Date: Wed, 1 Apr 2026 23:39:26 +0300 Subject: [PATCH 7/9] do not normalize via semver.clean --- scripts/version.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/version.js b/scripts/version.js index 1f49bbfb..5121780a 100644 --- a/scripts/version.js +++ b/scripts/version.js @@ -15,7 +15,7 @@ const createRepo = (path, regex, mapVersion) => ({ const match = regex.exec(tag); return match ? { tag, - version: semver.clean(mapVersion(match)), + version: mapVersion(match), } : null; } }); From eb871a4a30c85aa70ca710045da50cdce73652a0 Mon Sep 17 00:00:00 2001 From: Max Graey Date: Thu, 2 Apr 2026 00:09:23 +0300 Subject: [PATCH 8/9] remove debug entrypoints --- scripts/version.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/scripts/version.js b/scripts/version.js index 5121780a..03905bf3 100644 --- a/scripts/version.js +++ b/scripts/version.js @@ -29,8 +29,6 @@ async function latest(repo) { const tagsRaw = await repo.git.raw(['tag', '--sort=-v:refname']); const allTags = tagsRaw.split('\n').filter(Boolean).slice(0, MAX_TAGS_LIMIT); - console.log('allTags:\n', allTags); - for (let tag of allTags) { const res = repo.filter(tag); if (res !== null) { @@ -54,9 +52,6 @@ async function main() { let { version: srcVer } = await latest(src); let { version: dstVer } = await latest(dst); - console.log('srcVer:', srcVer); - console.log('dstVer:', dstVer); - if (!dstVer || semver.gt(srcVer, dstVer)) { console.log(srcVer); } else { From f236916c3d40693fd6da31a0f24fca24842b3880 Mon Sep 17 00:00:00 2001 From: Max Graey Date: Thu, 2 Apr 2026 00:37:25 +0300 Subject: [PATCH 9/9] more proper version comparision --- scripts/version.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/scripts/version.js b/scripts/version.js index 03905bf3..9f717fce 100644 --- a/scripts/version.js +++ b/scripts/version.js @@ -9,6 +9,13 @@ const resolve = (...args) => path.resolve(__dirname, ...args); const MAX_TAGS_LIMIT = 64; +function isGreater(a, b) { + const cmp = semver.compare(semver.coerce(a), semver.coerce(b)); + return cmp === 0 + ? a.includes("nightly") && !b.includes("nightly") + : cmp > 0; +} + const createRepo = (path, regex, mapVersion) => ({ git: simpleGit(path), filter: tag => { @@ -52,7 +59,7 @@ async function main() { let { version: srcVer } = await latest(src); let { version: dstVer } = await latest(dst); - if (!dstVer || semver.gt(srcVer, dstVer)) { + if (!dstVer || isGreater(srcVer, dstVer)) { console.log(srcVer); } else { console.log(`${srcVer}-nightly.${dateFormat(Date.UTC(), "yyyymmdd")}`);