parent
74c9bfb597
commit
fca8eb6727
@ -0,0 +1,9 @@ |
|||||||
|
/* |
||||||
|
* SPDX-License-Identifier: GPL-3.0 |
||||||
|
* Vesktop, a desktop app aiming to give you a snappier Discord Experience |
||||||
|
* Copyright (c) 2023 Vendicated and Vencord contributors |
||||||
|
*/ |
||||||
|
|
||||||
|
import { config } from "dotenv"; |
||||||
|
|
||||||
|
config(); |
@ -0,0 +1,18 @@ |
|||||||
|
/* |
||||||
|
* SPDX-License-Identifier: GPL-3.0 |
||||||
|
* Vesktop, a desktop app aiming to give you a snappier Discord Experience |
||||||
|
* Copyright (c) 2023 Vendicated and Vencord contributors |
||||||
|
*/ |
||||||
|
|
||||||
|
import { spawn as spaaawn, SpawnOptions } from "child_process"; |
||||||
|
import { join } from "path"; |
||||||
|
|
||||||
|
const EXT = process.platform === "win32" ? ".cmd" : ""; |
||||||
|
|
||||||
|
const OPTS: SpawnOptions = { |
||||||
|
stdio: "inherit" |
||||||
|
}; |
||||||
|
|
||||||
|
export function spawnNodeModuleBin(bin: string, args: string[]) { |
||||||
|
spaaawn(join("node_modules", ".bin", bin + EXT), args, OPTS); |
||||||
|
} |
@ -0,0 +1,93 @@ |
|||||||
|
/* |
||||||
|
* SPDX-License-Identifier: GPL-3.0 |
||||||
|
* Vesktop, a desktop app aiming to give you a snappier Discord Experience |
||||||
|
* Copyright (c) 2023 Vendicated and Vencord contributors |
||||||
|
*/ |
||||||
|
|
||||||
|
import { promises as fs } from "node:fs"; |
||||||
|
|
||||||
|
import { DOMParser, XMLSerializer } from "@xmldom/xmldom"; |
||||||
|
import xmlFormat from "xml-formatter"; |
||||||
|
|
||||||
|
function generateDescription(description: string, descriptionNode: Element) { |
||||||
|
const lines = description.replace(/\r/g, "").split("\n"); |
||||||
|
let currentList: Element | null = null; |
||||||
|
|
||||||
|
for (let i = 0; i < lines.length; i++) { |
||||||
|
const line = lines[i]; |
||||||
|
|
||||||
|
if (line.includes("New Contributors")) { |
||||||
|
// we're done, don't parse any more since the new contributors section is the last one |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
if (line.startsWith("## ")) { |
||||||
|
const pNode = descriptionNode.ownerDocument.createElement("p"); |
||||||
|
pNode.textContent = line.slice(3); |
||||||
|
descriptionNode.appendChild(pNode); |
||||||
|
} else if (line.startsWith("* ")) { |
||||||
|
const liNode = descriptionNode.ownerDocument.createElement("li"); |
||||||
|
liNode.textContent = line.slice(2).split("in https://github.com")[0].trim(); // don't include links to github |
||||||
|
|
||||||
|
if (!currentList) { |
||||||
|
currentList = descriptionNode.ownerDocument.createElement("ul"); |
||||||
|
} |
||||||
|
|
||||||
|
currentList.appendChild(liNode); |
||||||
|
} |
||||||
|
|
||||||
|
if (currentList && !lines[i + 1].startsWith("* ")) { |
||||||
|
descriptionNode.appendChild(currentList); |
||||||
|
currentList = null; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
const latestReleaseInformation = await fetch("https://api.github.com/repos/AiekDev/Aerocord/releases/latest", { |
||||||
|
headers: { |
||||||
|
Accept: "application/vnd.github+json", |
||||||
|
"X-Github-Api-Version": "2022-11-28" |
||||||
|
} |
||||||
|
}).then(res => res.json()); |
||||||
|
|
||||||
|
const metaInfo = await fs.readFile("./meta/dev.vencord.Vesktop.metainfo.xml", "utf-8"); |
||||||
|
|
||||||
|
const parser = new DOMParser().parseFromString(metaInfo, "text/xml"); |
||||||
|
|
||||||
|
const releaseList = parser.getElementsByTagName("releases")[0]; |
||||||
|
|
||||||
|
for (let i = 0; i < releaseList.childNodes.length; i++) { |
||||||
|
const release = releaseList.childNodes[i] as Element; |
||||||
|
|
||||||
|
if (release.nodeType === 1 && release.getAttribute("version") === latestReleaseInformation.name) { |
||||||
|
console.log("Latest release already added, nothing to be done"); |
||||||
|
process.exit(0); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
const release = parser.createElement("release"); |
||||||
|
release.setAttribute("version", latestReleaseInformation.name); |
||||||
|
release.setAttribute("date", latestReleaseInformation.published_at.split("T")[0]); |
||||||
|
release.setAttribute("type", "stable"); |
||||||
|
|
||||||
|
const releaseUrl = parser.createElement("url"); |
||||||
|
releaseUrl.textContent = latestReleaseInformation.html_url; |
||||||
|
|
||||||
|
release.appendChild(releaseUrl); |
||||||
|
|
||||||
|
const description = parser.createElement("description"); |
||||||
|
|
||||||
|
// we're not using a full markdown parser here since we don't have a lot of formatting options to begin with |
||||||
|
generateDescription(latestReleaseInformation.body, description); |
||||||
|
|
||||||
|
release.appendChild(description); |
||||||
|
|
||||||
|
releaseList.insertBefore(release, releaseList.childNodes[0]); |
||||||
|
|
||||||
|
const output = xmlFormat(new XMLSerializer().serializeToString(parser), { |
||||||
|
lineSeparator: "\n", |
||||||
|
collapseContent: true, |
||||||
|
indentation: " " |
||||||
|
}); |
||||||
|
|
||||||
|
await fs.writeFile("./meta/dev.vencord.Vesktop.metainfo.xml", output, "utf-8"); |
Loading…
Reference in new issue