From 0bf9e912fea15d5d74dc4f46e636a8beca0d9156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92=E8=B5=AB=E8=90=9D?= Date: Wed, 12 Apr 2023 10:45:27 +0800 Subject: [PATCH] :package: Chore: add sha256 calculate script for macos build --- scripts/gen-sha256.js | 58 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 scripts/gen-sha256.js diff --git a/scripts/gen-sha256.js b/scripts/gen-sha256.js new file mode 100644 index 0000000..7ebaae6 --- /dev/null +++ b/scripts/gen-sha256.js @@ -0,0 +1,58 @@ +const crypto = require('crypto') +const os = require('os') +const path = require('path') +const axios = require('axios') +const fs = require('fs-extra') +const pkg = require('../package.json') +const version = pkg.version + +const x64URL = `https://release.piclist.cn/latest/PicList-${version}-x64.dmg` +const arm64URL = `https://release.piclist.cn/latest/PicList-${version}-arm64.dmg` +const x64Path = path.join(os.homedir(), 'Downloads', 'PicList-x64.dmg') +const arm64Path = path.join(os.homedir(), 'Downloads', 'PicList-arm64.dmg') + +const downloadAndHash = async (url, path) => { + try { + const response = await axios({ + method: 'get', + url, + responseType: 'stream' + }) + const writer = fs.createWriteStream(path) + response.data.pipe(writer) + + const hash = crypto.createHash('sha256') + const progressTotal = parseInt(response.headers['content-length'], 10) + let progressCurrent = 0 + console.log('\n') + + response.data.on('data', (chunk) => { + hash.update(chunk) + progressCurrent += chunk.length + const progressBar = Math.round(progressCurrent / progressTotal * 100) + process.stdout.write(`\r${progressBar}% ${path}`) + }) + + await new Promise((resolve, reject) => { + response.data.on('end', () => { + resolve() + }) + response.data.on('error', (err) => { + reject(err) + }) + }) + + console.log(`\n${path} SHA256: ${hash.digest('hex')}`) + + await fs.remove(path) + console.log(`Deleted ${path}`) + } catch (err) { + console.error(`\nError downloading ${url}: ${err.message}`) + } +} + +downloadAndHash(x64URL, x64Path).then(() => { + downloadAndHash(arm64URL, arm64Path) +}).catch(() => { + downloadAndHash(arm64URL, arm64Path) +})