You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
4.1 KiB
JavaScript
122 lines
4.1 KiB
JavaScript
/**
|
|
* power by biuuu
|
|
*/
|
|
|
|
const chalk = require("chalk");
|
|
const { join } = require('path')
|
|
const crypto = require('crypto')
|
|
const AdmZip = require('adm-zip')
|
|
const packageFile = require('../package.json')
|
|
const { build } = require("../config/index")
|
|
const { platform } = require("os")
|
|
const { ensureDir, emptyDir, copy, outputJSON, remove, stat, readFile } = require("fs-extra");
|
|
|
|
const platformName = platform().includes('win32') ? 'win' : platform().includes('darwin') ? 'mac' : 'linux'
|
|
const buildPath = join('.', 'build', `${platformName === 'mac' ? 'mac' : platformName + '-unpacked'}`)
|
|
|
|
const hash = (data, type = 'sha256') => {
|
|
const hmac = crypto.createHmac(type, 'Sky')
|
|
hmac.update(data)
|
|
return hmac.digest('hex')
|
|
}
|
|
|
|
const createZip = (filePath, dest) => {
|
|
const zip = new AdmZip()
|
|
zip.addLocalFolder(filePath)
|
|
zip.toBuffer()
|
|
zip.writeZip(dest)
|
|
}
|
|
|
|
const start = async () => {
|
|
console.log(chalk.green.bold(`\n Start packing`))
|
|
|
|
if (packageFile.build.asar) {
|
|
console.log(
|
|
"\n" +
|
|
chalk.bgRed.white(" ERROR ") +
|
|
" " +
|
|
chalk.red("Please make sure the build.asar option in the Package.json file is set to false") +
|
|
"\n"
|
|
);
|
|
return;
|
|
}
|
|
|
|
if (build.hotPublishConfigName === '') {
|
|
console.log(
|
|
"\n" +
|
|
chalk.bgRed.white(" ERROR ") +
|
|
" " +
|
|
chalk.red("HotPublishConfigName is not set, which will cause the update to fail, please set it in the config/index.js \n")
|
|
+ chalk.red.bold(`\n Packing failed \n`)
|
|
);
|
|
process.exit(1)
|
|
}
|
|
|
|
stat(join(buildPath, 'resources', 'app'), async (err, stats) => {
|
|
if (err) {
|
|
console.log(
|
|
"\n" +
|
|
chalk.bgRed.white(" ERROR ") +
|
|
" " +
|
|
chalk.red("No resource files were found, please execute this command after the build command") +
|
|
"\n"
|
|
);
|
|
return;
|
|
}
|
|
|
|
try {
|
|
const packResourcesPath = join('.', 'build', 'resources', 'dist');
|
|
const packPackagePath = join('.', 'build', 'resources');
|
|
const resourcesPath = join('.', 'dist');
|
|
const appPath = join('.', 'build', 'resources');
|
|
const name = "app.zip";
|
|
const outputPath = join('.', 'build', 'update');
|
|
const zipPath = join(outputPath, name);
|
|
|
|
await ensureDir(packResourcesPath);
|
|
await emptyDir(packResourcesPath);
|
|
await copy(resourcesPath, packResourcesPath);
|
|
await outputJSON(join(packPackagePath, "package.json"), {
|
|
name: packageFile.name,
|
|
productName: packageFile.productName,
|
|
version: packageFile.version,
|
|
private: packageFile.private,
|
|
description: packageFile.description,
|
|
main: packageFile.main,
|
|
author: packageFile.author,
|
|
dependencies: packageFile.dependencies
|
|
});
|
|
await ensureDir(outputPath);
|
|
await emptyDir(outputPath);
|
|
createZip(appPath, zipPath);
|
|
const buffer = await readFile(zipPath);
|
|
const sha256 = hash(buffer);
|
|
const hashName = sha256.slice(7, 12);
|
|
await copy(zipPath, join(outputPath, `${hashName}.zip`));
|
|
await remove(zipPath);
|
|
await remove(appPath)
|
|
await outputJSON(join(outputPath, `${build.hotPublishConfigName}.json`),
|
|
{
|
|
version: packageFile.version,
|
|
name: `${hashName}.zip`,
|
|
hash: sha256
|
|
}
|
|
);
|
|
console.log(
|
|
"\n" + chalk.bgGreen.white(" DONE ") + " " + "The resource file is packaged!\n"
|
|
);
|
|
console.log("File location: " + chalk.green(outputPath) + "\n");
|
|
} catch (error) {
|
|
console.log(
|
|
"\n" +
|
|
chalk.bgRed.white(" ERROR ") +
|
|
" " +
|
|
chalk.red(error.message || error) +
|
|
"\n"
|
|
);
|
|
process.exit(1)
|
|
}
|
|
});
|
|
}
|
|
|
|
start() |