-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.ts
65 lines (57 loc) · 2.17 KB
/
main.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
const user = "Haselnussbomber";
const repos = [
"HaselDebug",
"HaselTweaks",
"LeveHelper",
"YokaiCheck",
];
const clearText = (str) => {
return str
.replace(/\p{Extended_Pictographic}/gu, "") // remove emojis
.replace(/\*\*(.*)\*\*/g, "$1") // extract markdown bold text
.replace(/\[([^\)]+)\]\([^\)]+\)/g, "$1") // extract markdown link label
.split(/\r?\n/g)
.map(line => line.replace(/^#+\s+/g, ""))
.join("\n");
};
const output = await Promise.all(repos.map(async (repo) => {
let res = await fetch(`https://api.github.com/repos/${user}/${repo}/releases/latest`);
const latest = await res.json();
let out = {
AssemblyVersion: latest.tag_name.replace(/^v/, ""),
Changelog: clearText(latest.body),
DownloadCount: latest.assets[0].download_count,
LastUpdate: new Date(latest.published_at).valueOf() / 1000,
DownloadLinkInstall: latest.assets[0].browser_download_url,
DownloadLinkUpdate: latest.assets[0].browser_download_url,
};
let manifest = {
Author: user,
Name: repo,
InternalName: repo,
RepoUrl: `https://github.com/${user}/${repo}`,
ApplicableVersion: "any",
DalamudApiLevel: 6,
};
const manifestAsset = latest.assets.find(asset => asset.name == "manifest.json");
if (manifestAsset) {
const manifestRes = await fetch(manifestAsset.browser_download_url);
if (manifestRes.ok) {
manifest = await manifestRes.json();
}
}
out = Object.assign(manifest, out);
const prereleaseRes = await fetch(`https://api.github.com/repos/${user}/${repo}/releases/tags/prerelease`);
if (prereleaseRes.ok) {
const prerelease = await prereleaseRes.json();
const prereleaseManifestAsset = prerelease.assets.find(asset => asset.name == "manifest.json");
if (prereleaseManifestAsset) {
const prereleaseManifestRes = await fetch(prereleaseManifestAsset.browser_download_url);
const prereleaseManifest = await prereleaseManifestRes.json();
out.DownloadLinkTesting = prerelease.assets[0].browser_download_url;
out.TestingAssemblyVersion = prereleaseManifest.AssemblyVersion;
}
}
return out;
}));
await Deno.writeTextFile("repo.json", JSON.stringify(output, null, 2));