in script/deploy.js [163:332]
function main() {
parseArgs();
ensureTools();
const rootDir = `${__dirname}/..`;
process.chdir(rootDir);
spawnOrFail('script/cloud9-resize.sh', []);
process.chdir(`${rootDir}/serverless`);
if (!fs.existsSync('build')) {
fs.mkdirSync('build');
}
console.log(`Using region ${region}, bucket ${bucket}, stack ${stack}`);
ensureBucket(bucket, false);
ensureBucket(`${bucket}-releases`, true);
const cssStyle = fs.readFileSync(`${rootDir}/resources/download.css`, 'utf8');
fs.writeFileSync(
'src/index.html',
`
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Download ${appName}</title>
<style>
${cssStyle}
</style>
</head>
<body>
<article class="markdown-body">
<h3>Download ${appName}</h3>
<ul>
<li><a href="https://${bucket}-releases.s3.amazonaws.com/mac/${appName}.zip">${appName} for macOS (ZIP)</a></li>
<li><a href="https://${bucket}-releases.s3.amazonaws.com/win/${appName}.zip">${appName} for Windows (ZIP)</a></li>
</ul>
</article>
</body>
</html>
`
);
const packageJson = JSON.parse(
fs.readFileSync(`${rootDir}/package.json`, 'utf8')
);
packageJson.productName = appName;
packageJson.build.productName = appName;
packageJson.build.appId = `com.amazonaws.services.chime.sdk.classroom.demo.${appName}`;
fs.writeFileSync(
`${rootDir}/package.json`,
JSON.stringify(packageJson, null, 2)
);
let mainDevTs = fs.readFileSync(`${rootDir}/app/main.dev.ts`, 'utf8');
mainDevTs = mainDevTs.replace(/setTitle.*?[;]/g, `setTitle('${appName}');`);
fs.writeFileSync(`${rootDir}/app/main.dev.ts`, mainDevTs);
let appHtml = fs.readFileSync(`${rootDir}/app/app.html`, 'utf8');
appHtml = appHtml.replace(
/[<]title[>].*?[<][/]title[>]/g,
`<title>${appName}</title>`
);
fs.writeFileSync(`${rootDir}/app/app.html`, appHtml);
spawnOrFail('sam', [
'package',
'--s3-bucket',
`${bucket}`,
`--output-template-file`,
`build/packaged.yaml`,
'--region',
`${region}`
]);
console.log('Deploying serverless application');
spawnOrFail('sam', [
'deploy',
'--template-file',
'./build/packaged.yaml',
'--stack-name',
`${stack}`,
'--capabilities',
'CAPABILITY_IAM',
'--region',
`${region}`
]);
const endpoint = spawnOrFail('aws', [
'cloudformation',
'describe-stacks',
'--stack-name',
`${stack}`,
'--query',
'Stacks[0].Outputs[0].OutputValue',
'--output',
'text',
'--region',
`${region}`
]).trim();
const messagingWssUrl = spawnOrFail('aws', [
'cloudformation',
'describe-stacks',
'--stack-name',
`${stack}`,
'--query',
'Stacks[0].Outputs[1].OutputValue',
'--output',
'text',
'--region',
`${region}`
]).trim();
console.log(`Endpoint: ${endpoint}`);
console.log(`Messaging WSS URL: ${messagingWssUrl}`);
process.chdir(rootDir);
fs.writeFileSync(
'app/utils/getBaseUrl.ts',
`
export default function getBaseUrl() {return '${endpoint}';}
`
);
fs.writeFileSync(
'app/utils/getMessagingWssUrl.ts',
`
export default function getMessagingWssUrl() {return '${messagingWssUrl}';}
`
);
spawnOrFail('yarn', []);
console.log('... packaging (this may take a while) ...');
spawnAndIgnoreResult('yarn', ['package-mac']);
spawnAndIgnoreResult('yarn', ['package-win']);
spawnOrFail('rm', ['-rf', `release/${appName}`]);
spawnOrFail('mv', ['release/win-unpacked', `release/${appName}`]);
process.chdir(`${rootDir}/release`);
spawnOrFail('zip', ['-r', `${appName}-win.zip`, appName]);
process.chdir(rootDir);
console.log('... uploading Mac installer (this may take a while) ...');
spawnOrFail('aws', [
's3',
'cp',
'--acl',
'public-read',
`release/${appName}.zip`,
`s3://${bucket}-releases/mac/${appName}.zip`
]);
console.log('... uploading Windows installer (this may take a while) ...');
spawnOrFail('aws', [
's3',
'cp',
'--acl',
'public-read',
`release/${appName}-win.zip`,
`s3://${bucket}-releases/win/${appName}.zip`
]);
console.log('=============================================================');
console.log('');
console.log('Link to download application:');
console.log(endpoint);
console.log('');
console.log('=============================================================');
}