1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-27 10:32:58 +02:00
joplin/packages/app-desktop/tools/generateLatestArm64Yml.ts

70 lines
2.0 KiB
TypeScript
Raw Normal View History

import * as fs from 'fs';
import * as path from 'path';
import * as crypto from 'crypto';
export interface GenerateInfo {
version: string;
dmgPath: string;
zipPath: string;
releaseDate: string;
}
const calculateHash = (filePath: string): string => {
const fileBuffer = fs.readFileSync(filePath);
const hashSum = crypto.createHash('sha512');
hashSum.update(fileBuffer);
return hashSum.digest('base64');
};
const getFileSize = (filePath: string): number => {
return fs.statSync(filePath).size;
};
export const generateLatestArm64Yml = (info: GenerateInfo, destinationPath: string): string | undefined => {
if (!fs.existsSync(info.dmgPath) || !fs.existsSync(info.zipPath)) {
throw new Error(`One or both executable files do not exist: ${info.dmgPath}, ${info.zipPath}`);
}
if (!info.version) {
throw new Error('Version is empty');
}
if (!destinationPath) {
throw new Error('Destination path is empty');
}
console.info('Calculating hash of files...');
const dmgHash: string = calculateHash(info.dmgPath);
const zipHash: string = calculateHash(info.zipPath);
console.info('Calculating size of files...');
const dmgSize: number = getFileSize(info.dmgPath);
const zipSize: number = getFileSize(info.zipPath);
console.info('Generating content of latest-mac-arm64.yml file...');
if (!fs.existsSync(destinationPath)) {
fs.mkdirSync(destinationPath);
}
const yamlFilePath: string = path.join(destinationPath, 'latest-mac-arm64.yml');
const yamlContent = `version: ${info.version}
files:
- url: ${path.basename(info.zipPath)}
sha512: ${zipHash}
size: ${zipSize}
- url: ${path.basename(info.dmgPath)}
sha512: ${dmgHash}
size: ${dmgSize}
path: ${path.basename(info.zipPath)}
sha512: ${zipHash}
releaseDate: '${info.releaseDate}'
`;
fs.writeFileSync(yamlFilePath, yamlContent);
console.log(`YML file for version ${info.version} was generated successfully at ${destinationPath} for arm64.`);
const fileContent: string = fs.readFileSync(yamlFilePath, 'utf8');
console.log('Generated YML Content:\n', fileContent);
return yamlFilePath;
};