Files
habitica/migrations/archive/s3-upload.js

94 lines
2.2 KiB
JavaScript

/* eslint-disable import/no-commonjs */
const request = require('superagent');
const last = require('lodash/last');
const AWS = require('aws-sdk');
const config = require('../config');
const S3_DIRECTORY = 'mobileApp/images'; // config.S3.SPRITES_DIRECTORY;
AWS.config.update({
accessKeyId: config.S3.accessKeyId,
secretAccessKey: config.S3.secretAccessKey,
// region: config.get('S3_REGION'),
});
const BUCKET_NAME = config.S3.bucket;
const s3 = new AWS.S3();
// Adapted from https://stackoverflow.com/a/22210077/2601552
function uploadFile (buffer, fileName) {
return new Promise((resolve, reject) => {
s3.putObject({
Body: buffer,
Key: fileName,
Bucket: BUCKET_NAME,
}, error => {
if (error) {
reject(error);
} else {
// console.info(`${fileName} uploaded to ${BUCKET_NAME} successfully.`);
resolve(fileName);
}
});
});
}
function getFileName (file) {
const piecesOfPath = file.split('/');
const name = last(piecesOfPath);
const fullName = S3_DIRECTORY + name;
return fullName;
}
function getFileFromUrl (url) {
return new Promise((resolve, reject) => {
request.get(url).end((err, res) => {
if (err) return reject(err);
const file = res.body;
return resolve(file);
});
});
}
let commit = '78f94e365c72cc58f66857d5941105638db7d35c';
commit = 'df0dbaba636c9ce424cc7040f7bd7fc1aa311015';
const gihuburl = `https://api.github.com/repos/HabitRPG/habitica/commits/${commit}`;
let currentIndex = 0;
function uploadToS3 (start, end, filesUrls) {
const urls = filesUrls.slice(start, end);
if (urls.length === 0) {
console.log('done');
return;
}
const promises = urls.map(fullUrl => getFileFromUrl(fullUrl)
.then(buffer => uploadFile(buffer, getFileName(fullUrl))));
console.log(promises.length);
Promise.all(promises)
.then(() => {
currentIndex += 50;
uploadToS3(currentIndex, currentIndex + 50, filesUrls);
})
.catch(e => {
console.log(e);
});
}
request.get(gihuburl)
.end((err, res) => {
console.log(err);
const { files } = res.body;
let filesUrls = [''];
filesUrls = files.map(file => file.raw_url);
uploadToS3(currentIndex, currentIndex + 50, filesUrls);
});