UNPKG

@keybittech/awayto

Version:

Deploy a fully-featured application in about 10 minutes that is primed for quick development. Do business, impress a client with a quick demo, finish your poc with time to spare; all easily achievable with Awayto.

74 lines (53 loc) 2.73 kB
import fs from 'fs/promises'; import { createWriteStream } from 'fs'; import path from 'path'; import child_process from 'child_process'; import crypto from 'crypto'; import archiver from 'archiver'; import { ask } from './tool.mjs'; const release = async function (props = {}) { let install = !!Object.keys(props).length; if (!install) { props = { awaytoId: await ask('Awayto Id:\n >') } } try { const __dirname = path.dirname(await fs.realpath(new URL(import.meta.url))); const seedPath = path.join(__dirname, `./data/seeds/${props.awaytoId}.json`); const awaytoConfig = JSON.parse(await fs.readFile(seedPath)); const apiSha = crypto.createHash('sha1').update(Buffer.from(await fs.readFile(path.join(__dirname, '../apipkg/index.js')))).digest('base64'); if (apiSha != awaytoConfig.apiSha) { awaytoConfig.apiSha = apiSha; console.log('Deploying updated API.'); const output = createWriteStream('lambda.zip'); const archive = archiver('zip'); archive.on('error', function (error) { throw error; }); archive.pipe(output); archive.directory('apipkg/', false); output.on('close', async function () { child_process.execSync(`aws s3 cp ./lambda.zip s3://${awaytoConfig.awaytoId}-lambda`, { stdio: 'inherit' }); child_process.execSync(`aws lambda update-function-code --function-name ${awaytoConfig.environment}-${awaytoConfig.awsRegion}-${awaytoConfig.awaytoId}Resource --region ${awaytoConfig.awsRegion} --s3-bucket ${awaytoConfig.awaytoId}-lambda --s3-key lambda.zip`, { stdio: 'inherit' }); child_process.execSync(`rm lambda.zip`, { stdio: 'inherit' }); }); await archive.finalize(); } const webSha = crypto.createHash('sha1').update(Buffer.from(await fs.readFile(path.join(__dirname, '../build/index.html')))).digest('base64'); if (webSha != awaytoConfig.webSha) { awaytoConfig.webSha = webSha; console.log('Deploying updated webapp.'); child_process.execSync(`aws s3 sync ./build s3://${awaytoConfig.awaytoId}-webapp`, { stdio: 'inherit' }); child_process.execSync(`aws cloudfront create-invalidation --distribution-id ${awaytoConfig.distributionId} --paths "/*"`, { stdio: 'inherit' }); } await fs.writeFile(seedPath, JSON.stringify(awaytoConfig)); } catch (error) { console.log('Error releasing codebases:', error); } process.exit(); }; export default release; if (process.argv[2] == "--awayto-id" && process.argv[3]?.length) { release({ awaytoId: process.argv[3] }) }