Comparing version 1.8.0 to 1.9.0
@@ -0,1 +1,6 @@ | ||
# 1.9.0 (December 1, 2019) | ||
- Added the `remake backup` command to backup a deployed app's data | ||
- BUG FIX: the `/user/reset/{username}/{token}` route now works in multi-tenant mode | ||
# 1.8.0 (November 24, 2019) | ||
@@ -2,0 +7,0 @@ |
const program = require('commander'); | ||
const Configstore = require('configstore'); | ||
const { clean, build, deploy, serve, updateFramework, create } = require('./utils/commands'); | ||
const { clean, build, deploy, backup, updateFramework, create } = require('./utils/commands'); | ||
const { version, name } = require('./package.json'); | ||
@@ -43,4 +43,9 @@ | ||
program | ||
.command('backup') | ||
.description('Backup the deployed version of your app') | ||
.action(() => backup()); | ||
module.exports = async () => { | ||
program.parse(process.argv) | ||
} |
{ | ||
"name": "remake", | ||
"version": "1.8.0", | ||
"version": "1.9.0", | ||
"description": "Generate a full-stack Remake web app", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
@@ -13,3 +13,11 @@ const fs = require('fs'); | ||
const { readDotRemake, writeDotRemake, generateDotRemakeContent } = require('./dot-remake'); | ||
const { registerUser, checkSubdomain, registerSubdomain, createDeploymentZip, removeDeploymentZip, pushZipToServer } = require('./helpers'); | ||
const { | ||
registerUser, | ||
checkSubdomain, | ||
registerSubdomain, | ||
createDeploymentZip, | ||
removeDeploymentZip, | ||
pushZipToServer, | ||
getAppsList, | ||
backupApp } = require('./helpers'); | ||
const { questions } = require('./inquirer-questions'); | ||
@@ -200,2 +208,17 @@ const { getSuccessMessage } = require('./get-success-message'); | ||
module.exports = { create, deploy, clean, build, updateFramework } | ||
const backup = async () => { | ||
await registerUser(); | ||
let appsList = await getAppsList(); | ||
if (appsList.length === 0) { | ||
log(chalk.yellow('No apps deployed yet.')); | ||
process.exit(); | ||
} else { | ||
const question = questions.APP_BACKUP; | ||
question.choices = appsList.map((app) => ({ name: app.name, value: app.id })); | ||
const backupAnswer = await inquirer.prompt([question]); | ||
await backupApp(backupAnswer.appId); | ||
process.exit(); | ||
} | ||
} | ||
module.exports = { create, deploy, clean, build, updateFramework, backup } |
@@ -168,2 +168,68 @@ const fs = require('fs'); | ||
module.exports = { checkSubdomain, registerSubdomain, registerUser, createDeploymentZip, removeDeploymentZip, pushZipToServer } | ||
const getAppsList = async () => { | ||
const spinner = ora('Getting your apps list.').start(); | ||
try { | ||
const appListResponse = await axios({ | ||
method: 'get', | ||
url: `${remakeServiceHost}/service/apps`, | ||
headers: { | ||
'Authorization': `Bearer ${remakeCliConfig.get('user.authToken')}` | ||
}, | ||
}); | ||
if (appListResponse.status === 200) { | ||
spinner.succeed(); | ||
return appListResponse.data; | ||
} else { | ||
spinner.fail(); | ||
return null; | ||
} | ||
} catch (err) { | ||
console.log(err) | ||
spinner.fail(); | ||
return null; | ||
} | ||
} | ||
const backupApp = async (appId) => { | ||
const spinner = ora('Generating and downlading zip.').start(); | ||
try { | ||
const backupResponse = await axios({ | ||
method: 'get', | ||
url: `${remakeServiceHost}/service/backup`, | ||
responseType: 'stream', | ||
headers: { | ||
'Authorization': `Bearer ${remakeCliConfig.get('user.authToken')}` | ||
}, | ||
params: { | ||
appId, | ||
} | ||
}) | ||
if (backupResponse.status === 200) { | ||
const fileName = backupResponse.headers['content-disposition'].split('=')[1].replace(/\"/g, ''); | ||
const writer = fs.createWriteStream(fileName); | ||
backupResponse.data.pipe(writer); | ||
return new Promise((resolve, reject) => { | ||
writer.on('finish', () => { spinner.succeed(); resolve(); }); | ||
writer.on('error', () => { spinner.fail(); reject(); }); | ||
}); | ||
} else { | ||
spinner.fail(); | ||
return null; | ||
} | ||
} catch (err) { | ||
console.log(err) | ||
spinner.fail(); | ||
return null; | ||
} | ||
} | ||
module.exports = { | ||
checkSubdomain, | ||
registerSubdomain, | ||
registerUser, | ||
createDeploymentZip, | ||
removeDeploymentZip, | ||
pushZipToServer, | ||
getAppsList, | ||
backupApp, | ||
} |
@@ -58,2 +58,8 @@ const validateSubdomain = (subdomain) => { | ||
type: 'confirm' | ||
}, | ||
APP_BACKUP: { | ||
message: 'Which app do you want to back up?', | ||
name: 'appId', | ||
type: 'list', | ||
choices: [] | ||
} | ||
@@ -60,0 +66,0 @@ } |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
467629
1067