UNPKG

1.61 kBJavaScriptView Raw
1const request = require('request-promise'),
2 packAssets = require('./assets/packAssets'),
3 generateManifest = require('./assets/generateManifest'),
4 logger = require('./logger'),
5 uploadFile = require('./s3UploadFile'),
6 presignUrl = require('./presignUrl');
7
8const sleep = ms => {
9 return new Promise(resolve => setTimeout(resolve, ms));
10};
11
12const waitForUnpack = async fileUrl => {
13 let fileExists = false;
14 let counter = 0;
15 do {
16 logger.Debug(`waiting for: ${fileUrl}`);
17 counter += 1;
18 if (fileExists) await sleep(1000);
19 fileExists = await request
20 .head(fileUrl)
21 .then(() => true)
22 .catch({ statusCode: 403 }, () => false)
23 .catch(error => logger.Error(error));
24 } while (fileExists && counter < 60);
25};
26
27const deployAssets = async gateway => {
28 const assetsArchiveName = './tmp/assets.zip';
29 const instance = await gateway.getInstance();
30 const now = Math.floor(new Date() / 1000);
31 const remoteAssetsArchiveName = `instances/${instance.id}/assets/${now}.assets_deploy.zip`;
32 logger.Debug(remoteAssetsArchiveName);
33 try {
34 await packAssets(assetsArchiveName);
35 const data = await presignUrl(remoteAssetsArchiveName, assetsArchiveName);
36 logger.Debug(data);
37 await uploadFile(assetsArchiveName, data.uploadUrl);
38 logger.Debug('UPLOADED');
39 await waitForUnpack(data.accessUrl);
40 const manifest = generateManifest();
41 logger.Debug(manifest);
42 await gateway.sendManifest(manifest);
43 } catch (e) {
44 logger.Debug(e.message);
45 logger.Error('Deploy assets failed');
46 }
47};
48
49module.exports = {
50 deployAssets: deployAssets
51};