138 lines
3.2 KiB
JavaScript
138 lines
3.2 KiB
JavaScript
const fs = require("node:fs");
|
|
const {resolve, join} = require("node:path");
|
|
const crypto = require("node:crypto");
|
|
|
|
const dir = (p) => {
|
|
p = p || ''
|
|
return join(__dirname, "../" + p)
|
|
}
|
|
|
|
const distReleaseDir = (p) => {
|
|
if (p) {
|
|
return dir("dist-release/" + p)
|
|
} else {
|
|
return dir("dist-release")
|
|
}
|
|
}
|
|
|
|
function calcSha256File(filePath) {
|
|
return new Promise((resolve, reject) => {
|
|
const hash = crypto.createHash("sha256");
|
|
const stream = fs.createReadStream(filePath);
|
|
stream.on("data", (data) => hash.update(data));
|
|
stream.on("end", () => resolve(hash.digest("hex")));
|
|
stream.on("error", reject);
|
|
});
|
|
}
|
|
|
|
|
|
const platformName = () => {
|
|
switch (process.platform) {
|
|
case "darwin":
|
|
return "osx";
|
|
case "win32":
|
|
return "win";
|
|
case "linux":
|
|
return "linux";
|
|
}
|
|
return null;
|
|
}
|
|
|
|
const platformArch = () => {
|
|
switch (process.arch) {
|
|
case "x64":
|
|
return "x86";
|
|
case "arm64":
|
|
return "arm64";
|
|
}
|
|
return null;
|
|
}
|
|
|
|
const listFiles = (dir, recursive, regex) => {
|
|
regex = regex || null
|
|
recursive = recursive || false
|
|
const files = fs.readdirSync(dir);
|
|
const list = [];
|
|
for (let f of files) {
|
|
const p = resolve(dir, f);
|
|
if (regex) {
|
|
if (!regex.test(p)) {
|
|
continue;
|
|
}
|
|
}
|
|
const stat = fs.statSync(p);
|
|
list.push({
|
|
isDir: stat.isDirectory(),
|
|
name: f,
|
|
path: p
|
|
});
|
|
if (recursive && stat.isDirectory()) {
|
|
list.push(...listFiles(p, recursive));
|
|
}
|
|
}
|
|
return list;
|
|
}
|
|
|
|
const copy = (src, dest, print) => {
|
|
print = print || false
|
|
if (!fs.existsSync(src)) {
|
|
console.warn(`Source path does not exist: ${src}`);
|
|
return;
|
|
}
|
|
if (fs.statSync(src).isDirectory()) {
|
|
fs.mkdirSync(dest, {recursive: true});
|
|
const files = fs.readdirSync(src);
|
|
for (const file of files) {
|
|
copy(join(src, file), join(dest, file));
|
|
}
|
|
} else {
|
|
if (print) {
|
|
console.log(`Copying file from ${src} to ${dest}`);
|
|
}
|
|
fs.copyFileSync(src, dest);
|
|
}
|
|
}
|
|
|
|
const pathResolve = (...args)=>{
|
|
return resolve(...args)
|
|
}
|
|
|
|
const exists = (p) => {
|
|
try {
|
|
return fs.existsSync(p);
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async function calcSha256() {
|
|
console.log('calcSha256.start')
|
|
const results = []
|
|
const files = listFiles(distReleaseDir(), false, /\.(exe|dmg|AppImage|deb)$/)
|
|
for (const p of files) {
|
|
const sha256 = await calcSha256File(p.path);
|
|
results.push({
|
|
name: p.name,
|
|
sha256: sha256
|
|
})
|
|
}
|
|
const target = distReleaseDir(`sha256-${platformName()}-${platformArch()}.yml`)
|
|
const content = results.map((r) => {
|
|
return `${r.name}: ${r.sha256}`
|
|
}).join("\n")
|
|
fs.writeFileSync(target, content);
|
|
console.log('calcSha256.end', target, results)
|
|
}
|
|
|
|
module.exports = {
|
|
dir,
|
|
distReleaseDir,
|
|
platformName,
|
|
platformArch,
|
|
listFiles,
|
|
copy,
|
|
pathResolve,
|
|
exists,
|
|
calcSha256,
|
|
}
|