function main()

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('=============================================================');
}