Initial clean project import
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
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,
|
||||
}
|
||||
Reference in New Issue
Block a user