mirror of
https://github.com/zotero/zotero.git
synced 2026-08-28 05:25:31 +00:00
The shell glob in the mv breaks on Windows paths, so every Windows build silently fell back to building the submodules from source.
81 lines
2.3 KiB
JavaScript
81 lines
2.3 KiB
JavaScript
'use strict';
|
|
|
|
const fs = require('fs-extra');
|
|
const path = require('path');
|
|
const util = require('util');
|
|
const exec = util.promisify(require('child_process').exec);
|
|
const { getSignatures, writeSignatures, onSuccess, onError } = require('./utils');
|
|
const { buildsURL } = require('./config');
|
|
|
|
async function getReader(signatures) {
|
|
const t1 = Date.now();
|
|
|
|
const modulePath = path.join(__dirname, '..', 'reader');
|
|
|
|
const { stdout } = await exec('git rev-parse HEAD', { cwd: modulePath });
|
|
const hash = stdout.trim();
|
|
|
|
if (!('reader' in signatures) || signatures['reader'].hash !== hash) {
|
|
const targetDir = path.join(__dirname, '..', 'build', 'resource', 'reader');
|
|
try {
|
|
const filename = hash + '.zip';
|
|
const tmpDir = path.join(__dirname, '..', 'tmp', 'builds', 'reader');
|
|
const url = buildsURL + 'reader/' + filename;
|
|
|
|
await fs.remove(targetDir);
|
|
await fs.ensureDir(targetDir);
|
|
await fs.ensureDir(tmpDir);
|
|
|
|
await exec(
|
|
`cd ${tmpDir}`
|
|
+ ` && (test -f ${filename} || curl -f ${url} -o ${filename})`
|
|
+ ` && unzip ${filename} zotero/* -d ${targetDir}`
|
|
);
|
|
|
|
// Move the contents of zotero/ up a level (not in the shell, whose glob
|
|
// handling breaks on Windows paths)
|
|
for (let entry of await fs.readdir(path.join(targetDir, 'zotero'))) {
|
|
await fs.move(path.join(targetDir, 'zotero', entry), path.join(targetDir, entry));
|
|
}
|
|
await fs.remove(path.join(targetDir, 'zotero'));
|
|
}
|
|
catch (e) {
|
|
if (!e.message?.includes('The requested URL returned error: 403')) {
|
|
console.error(e);
|
|
}
|
|
await exec('npm ci', { cwd: modulePath });
|
|
await exec('npm run build:zotero', { cwd: modulePath });
|
|
if (!fs.pathExists(path.join(modulePath, 'build', 'zotero', 'pdf', 'build', 'pdf.mjs'))) {
|
|
throw new Error('pdf.js build failed to produce output');
|
|
}
|
|
await fs.copy(path.join(modulePath, 'build', 'zotero'), targetDir);
|
|
}
|
|
signatures['reader'] = { hash };
|
|
}
|
|
|
|
const t2 = Date.now();
|
|
|
|
return {
|
|
action: 'reader',
|
|
count: 1,
|
|
totalCount: 1,
|
|
processingTime: t2 - t1
|
|
};
|
|
}
|
|
|
|
module.exports = getReader;
|
|
|
|
if (require.main === module) {
|
|
(async () => {
|
|
try {
|
|
const signatures = await getSignatures();
|
|
onSuccess(await getReader(signatures));
|
|
await writeSignatures(signatures);
|
|
}
|
|
catch (err) {
|
|
process.exitCode = 1;
|
|
global.isError = true;
|
|
onError(err);
|
|
}
|
|
})();
|
|
}
|