Skip to content

Commit 902b0ca

Browse files
authored
Modernize scripts/version.js
1 parent 21b9fd4 commit 902b0ca

File tree

1 file changed

+51
-45
lines changed

1 file changed

+51
-45
lines changed

scripts/version.js

Lines changed: 51 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,60 +4,66 @@ import dateFormat from "dateformat";
44
import path from 'path';
55
import { fileURLToPath } from 'url';
66

7-
const __filename = fileURLToPath(import.meta.url);
8-
const __dirname = path.dirname(__filename);
7+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
8+
const resolve = (...args) => path.resolve(__dirname, ...args);
99

10-
var src = {
11-
git: simpleGit(__dirname + "/../binaryen"),
12-
filter: tag => {
13-
var match = /^version_(\d+)$/.exec(tag); // see: https://github.com/WebAssembly/binaryen/issues/1156
14-
return match ? {
15-
tag: tag,
16-
version: match[1] + ".0.0",
17-
} : null;
18-
}
19-
};
10+
const MAX_TAGS_LIMIT = 64;
2011

21-
var dst = {
22-
git: simpleGit(__dirname + "/.."),
12+
function isGreater(a, b) {
13+
const cmp = semver.compare(semver.coerce(a), semver.coerce(b));
14+
return cmp === 0
15+
? a.includes("nightly") && !b.includes("nightly")
16+
: cmp > 0;
17+
}
18+
19+
const createRepo = (path, regex, mapVersion) => ({
20+
git: simpleGit(path),
2321
filter: tag => {
24-
var match = /^v(\d+\.\d+\.\d+)(?:\-|$)/.exec(tag);
22+
const match = regex.exec(tag);
2523
return match ? {
26-
tag: tag,
27-
version: match[1]
24+
tag,
25+
version: mapVersion(match),
2826
} : null;
2927
}
30-
};
31-
32-
function latest(repo) {
33-
return new Promise((resolve, reject) => {
34-
repo.git.tags({ "--sort": "-committerdate" }, (err, tags) => {
35-
if (err) return reject(err);
36-
for (var i = 0; i < tags.all.length; ++i) {
37-
var result = repo.filter(tags.all[i]);
38-
if (result !== null) {
39-
repo.tag = result.tag;
40-
repo.version = result.version;
41-
return resolve();
42-
};
28+
});
29+
30+
// see: https://github.com/WebAssembly/binaryen/issues/1156
31+
const src = createRepo(resolve('../binaryen'), /^version_(\d+)(?:_.*)?$/, ([, maj]) => `${maj}.0.0`);
32+
const dst = createRepo(resolve('..'), /^v(\d+\.\d+\.\d+)(?:\-|$)/, ([, ver]) => ver);
33+
34+
async function latest(repo) {
35+
try {
36+
const tagsRaw = await repo.git.raw(['tag', '--sort=-v:refname']);
37+
const allTags = tagsRaw.split('\n').filter(Boolean).slice(0, MAX_TAGS_LIMIT);
38+
39+
for (let tag of allTags) {
40+
const res = repo.filter(tag);
41+
if (res !== null) {
42+
return res;
4343
}
44-
return reject(Error("no matching tags: " + tags.all.join(", ")));
45-
});
46-
}).catch(err => {
44+
}
45+
return { version: null, tag: null };
46+
} catch (err) {
4747
console.error(err.stack);
4848
process.exit(1);
49-
});
49+
}
5050
}
5151

52-
if (process.argv[2] === "tag") {
53-
latest(src).then(() => console.log(src.tag));
54-
} else {
55-
latest(src).then(() => {
56-
latest(dst).then(() => {
57-
if (semver.gt(src.version, dst.version))
58-
console.log(src.version);
59-
else
60-
console.log(src.version + "-nightly." + dateFormat(Date.UTC(), "yyyymmdd"));
61-
});
62-
});
52+
async function main() {
53+
if (process.argv[2] === "tag") {
54+
const { tag } = await latest(src);
55+
console.log(tag);
56+
return;
57+
}
58+
59+
let { version: srcVer } = await latest(src);
60+
let { version: dstVer } = await latest(dst);
61+
62+
if (!dstVer || isGreater(srcVer, dstVer)) {
63+
console.log(srcVer);
64+
} else {
65+
console.log(`${srcVer}-nightly.${dateFormat(Date.UTC(), "yyyymmdd")}`);
66+
}
6367
}
68+
69+
main();

0 commit comments

Comments
 (0)