diff --git a/scripts/config.js b/scripts/config.js index 920efaa561..723a360c4c 100644 --- a/scripts/config.js +++ b/scripts/config.js @@ -110,6 +110,8 @@ const scssFiles = [ 'chrome/skin/default/zotero/**/*.scss' ]; +const buildsURL = 'https://zotero-download.s3.amazonaws.com/ci/'; + module.exports = { - dirs, symlinkDirs, copyDirs, symlinkFiles, browserifyConfigs, jsFiles, scssFiles, ignoreMask + dirs, symlinkDirs, copyDirs, symlinkFiles, browserifyConfigs, jsFiles, scssFiles, ignoreMask, buildsURL }; diff --git a/scripts/pdf-reader.js b/scripts/pdf-reader.js index a10bbd3b5c..957a708d3a 100644 --- a/scripts/pdf-reader.js +++ b/scripts/pdf-reader.js @@ -4,35 +4,36 @@ const fs = require('fs-extra'); 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 getPDFReader(signatures) { const t1 = Date.now(); - - var { stdout } = await exec('git rev-parse HEAD', { cwd: './pdf-reader/pdf.js' }); - const PDFJSHash = stdout.trim(); - - var { stdout } = await exec('git rev-parse HEAD', { cwd: './pdf-reader' }); - const PDFReaderHash = stdout.trim(); - - let updated = false; - let name = 'pdf-reader/pdf.js'; - if (!(name in signatures) || signatures[name].hash !== PDFJSHash) { - await exec('npm run build:pdf.js', { cwd: './pdf-reader' }); - signatures[name] = { hash: PDFJSHash }; - updated = true; + + const { stdout } = await exec('git rev-parse HEAD', { cwd: './pdf-reader' }); + const hash = stdout.trim(); + + if (!('pdf-reader' in signatures) || signatures['pdf-reader'].hash !== hash) { + const targetDir = 'build/resource/pdf-reader/'; + try { + const filename = hash + '.zip'; + const tmpDir = 'tmp/builds/pdf-reader/'; + const url = buildsURL + 'client-pdf-reader/' + filename; + await exec( + `mkdir -p ${tmpDir}` + + `&& cd ${tmpDir}` + + `&& (test -f ${filename} || curl -f ${url} -o ${filename})` + + `&& rm -rf ../../../${targetDir}` + + `&& mkdir -p ../../../${targetDir}` + + `&& unzip -o ${filename} -d ../../../${targetDir}` + ); + } + catch (e) { + await exec('npm ci;npm run build', { cwd: 'pdf-reader' }); + await fs.copy('pdf-reader/build/zotero', targetDir); + } + signatures['pdf-reader'] = { hash }; } - - name = 'pdf-reader'; - if (!(name in signatures) || signatures[name].hash !== PDFReaderHash) { - await exec('npm ci;npm run build:reader', { cwd: './pdf-reader' }); - signatures[name] = { hash: PDFReaderHash }; - updated = true; - } - - if (updated) { - await fs.copy('./pdf-reader/build/zotero', './build/resource/pdf-reader'); - } - + const t2 = Date.now(); return { diff --git a/scripts/pdf-worker.js b/scripts/pdf-worker.js index f48baf66a4..7342dd274f 100644 --- a/scripts/pdf-worker.js +++ b/scripts/pdf-worker.js @@ -4,33 +4,33 @@ const fs = require('fs-extra'); 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 getPDFWorker(signatures) { const t1 = Date.now(); - var { stdout } = await exec('git rev-parse HEAD', { cwd: './pdf-worker/pdf.js' }); - const PDFJSHash = stdout.trim(); + const { stdout } = await exec('git rev-parse HEAD', { cwd: 'pdf-worker' }); + const hash = stdout.trim(); - var { stdout } = await exec('git rev-parse HEAD', { cwd: './pdf-worker' }); - const PDFWorkerHash = stdout.trim(); - - let updated = false; - let name = 'pdf-worker/pdf.js'; - if (!(name in signatures) || signatures[name].hash !== PDFJSHash) { - await exec('npm run build:pdf.js', { cwd: './pdf-worker' }); - signatures[name] = { hash: PDFJSHash }; - updated = true; - } - - name = 'pdf-worker'; - if (!(name in signatures) || signatures[name].hash !== PDFWorkerHash) { - await exec('npm ci;npm run build:worker', { cwd: './pdf-worker' }); - signatures[name] = { hash: PDFWorkerHash }; - updated = true; - } - - if (updated) { - await fs.copy('./pdf-worker/build/pdf-worker.js', './build/chrome/content/zotero/xpcom/pdfWorker/worker.js'); + if (!('pdf-worker' in signatures) || signatures['pdf-worker'].hash !== hash) { + const targetDir = 'build/chrome/content/zotero/xpcom/pdfWorker/'; + try { + const filename = hash + '.zip'; + const tmpDir = 'tmp/builds/pdf-worker'; + const url = buildsURL + 'client-pdf-worker/' + filename; + await exec( + `mkdir -p ${tmpDir}` + + `&& cd ${tmpDir}` + + `&& (test -f ${filename} || curl -f ${url} -o ${filename})` + + `&& mkdir -p ../../../${targetDir}` + + `&& unzip -o ${filename} -d ../../../${targetDir}` + ); + } + catch (e) { + await exec('npm ci;npm run build', { cwd: 'pdf-worker' }); + await fs.copy('pdf-worker/build/pdf-worker.js', targetDir + 'worker.js'); + } + signatures['pdf-worker'] = { hash }; } const t2 = Date.now(); diff --git a/scripts/zotero-note-editor.js b/scripts/zotero-note-editor.js index fff7f51f33..50c28f852a 100644 --- a/scripts/zotero-note-editor.js +++ b/scripts/zotero-note-editor.js @@ -4,24 +4,36 @@ const fs = require('fs-extra'); 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 getZoteroNoteEditor(signatures) { const t1 = Date.now(); - var { stdout } = await exec('git rev-parse HEAD', { cwd: './zotero-note-editor' }); - const zoteroNoteEditorHash = stdout.trim(); + const { stdout } = await exec('git rev-parse HEAD', { cwd: './zotero-note-editor' }); + const hash = stdout.trim(); - let updated = false; - let name = 'zotero-note-editor'; - if (!(name in signatures) || signatures[name].hash !== zoteroNoteEditorHash) { - await exec('npm ci;npm run build', { cwd: './zotero-note-editor' }); - signatures[name] = { hash: zoteroNoteEditorHash }; - updated = true; - } - - if (updated) { - await fs.copy('./zotero-note-editor/build/zotero', './build/resource/zotero-note-editor'); + if (!('zotero-note-editor' in signatures) || signatures['zotero-note-editor'].hash !== hash) { + const targetDir = 'build/resource/zotero-note-editor/'; + try { + const filename = hash + '.zip'; + const tmpDir = 'tmp/builds/zotero-note-editor/'; + const url = buildsURL + 'client-note-editor/' + filename; + await exec( + `mkdir -p ${tmpDir}` + + `&& cd ${tmpDir}` + + `&& (test -f ${filename} || curl -f ${url} -o ${filename})` + + `&& rm -rf ../../../${targetDir}` + + `&& mkdir -p ../../../${targetDir}` + + `&& unzip -o ${filename} -d ../../../${targetDir}` + ); + } + catch (e) { + await exec('npm ci;npm run build', { cwd: 'zotero-note-editor' }); + await fs.copy('zotero-note-editor/build/zotero', targetDir); + } + signatures['zotero-note-editor'] = { hash }; } + const t2 = Date.now(); return {