|
1 | 1 | // Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2 | 2 | // SPDX-License-Identifier: Apache-2.0
|
3 | 3 |
|
4 |
| -const { execute, r } = require('./utils.js') |
| 4 | +const { execute, r, red, green } = require('./utils.js') |
5 | 5 |
|
6 | 6 | const deployerConfig = require('../deployer.config.js')
|
7 | 7 | const writeConfig = require('./write-config.js')
|
8 | 8 |
|
| 9 | +const errors = [] |
| 10 | + |
| 11 | +function getRequired(key) { |
| 12 | + const value = deployerConfig[key] |
| 13 | + if (value) return value |
| 14 | + errors.push(key + ' must be defined') |
| 15 | +} |
| 16 | + |
| 17 | +function getOptional(key, orElse) { |
| 18 | + return deployerConfig[key] || orElse |
| 19 | +} |
| 20 | + |
9 | 21 | // required inputs
|
10 |
| -const stackName = deployerConfig.stackName |
11 |
| -const buildAssetsBucket = deployerConfig.buildAssetsBucket |
12 |
| -const siteAssetsBucket = deployerConfig.siteAssetsBucket |
13 |
| -const apiAssetsBucket = deployerConfig.apiAssetsBucket |
| 22 | +const stackName = getRequired('stackName') |
| 23 | +const buildAssetsBucket = getRequired('buildAssetsBucket') |
| 24 | +const siteAssetsBucket = getRequired('siteAssetsBucket') |
| 25 | +const apiAssetsBucket = getRequired('apiAssetsBucket') |
| 26 | +const cognitoDomainName = getRequired('cognitoDomainName') |
14 | 27 |
|
15 | 28 | // required (and defaulted) inputs
|
16 |
| -const samTemplate = deployerConfig.samTemplate || r(`../../cloudformation/template.yaml`) |
17 |
| -const packageConfig = deployerConfig.packageConfig || r(`../../cloudformation/packaged.yaml`) |
18 |
| -const customersTableName = deployerConfig.customersTableName || 'DevPortalCustomers' |
| 29 | +const samTemplate = getOptional('samTemplate', r(`../../cloudformation/template.yaml`)) |
| 30 | +const packageConfig = getOptional('packageConfig', r(`../../cloudformation/packaged.yaml`)) |
| 31 | +const customersTableName = getOptional('customersTableName', 'DevPortalCustomers') |
19 | 32 |
|
20 | 33 | // optional inputs
|
21 |
| -const cognitoDomainName = deployerConfig.cognitoDomainName || '' |
22 |
| -const staticAssetRebuildMode = deployerConfig.staticAssetRebuildMode || '' |
| 34 | +const staticAssetRebuildMode = getOptional('staticAssetRebuildMode', '') |
23 | 35 |
|
24 | 36 | // AWS SAM CLI configuration
|
25 |
| -const awsSamCliProfile = deployerConfig.awsSamCliProfile; |
26 |
| -const profileOption = awsSamCliProfile ? `--profile ${awsSamCliProfile}` : '' |
27 |
| - |
28 |
| -function main() { |
29 |
| - Promise.resolve() |
30 |
| - .then(() => execute(`sam package --template-file ${samTemplate} --output-template-file ${packageConfig} --s3-bucket ${buildAssetsBucket} ${profileOption}`, true)) |
31 |
| -.then(() => execute(`sam deploy --template-file ${packageConfig} --stack-name ${stackName} --capabilities CAPABILITY_NAMED_IAM --parameter-overrides StaticAssetRebuildToken="${Date.now()}" StaticAssetRebuildMode="${staticAssetRebuildMode}" DevPortalSiteS3BucketName="${siteAssetsBucket}" ArtifactsS3BucketName="${apiAssetsBucket}" DevPortalCustomersTableName="${customersTableName}" CognitoDomainNameOrPrefix="${cognitoDomainName}" --s3-bucket ${buildAssetsBucket} ${profileOption}`, true)) |
32 |
| -.then(() => writeConfig(true)) |
33 |
| -.then(() => console.log('\n' + 'Process Complete! Run `npm run start` to launch run the dev portal locally.\n'.green())) |
34 |
| -.catch(err => { |
35 |
| - console.log(("" + err).red()) |
36 |
| - }) |
| 37 | +const awsSamCliProfile = getOptional('awsSamCliProfile') |
| 38 | + |
| 39 | +async function main() { |
| 40 | + execute('sam', [ |
| 41 | + 'package', |
| 42 | + '--template-file', samTemplate, |
| 43 | + '--output-template-file', packageConfig, |
| 44 | + '--s3-bucket', buildAssetsBucket, |
| 45 | + ...(awsSamCliProfile ? ['--profile', awsSamCliProfile] : []) |
| 46 | + ]) |
| 47 | + execute('sam', [ |
| 48 | + 'deploy', |
| 49 | + '--template-file', packageConfig, |
| 50 | + '--stack-name', stackName, |
| 51 | + '--capabilities', 'CAPABILITY_NAMED_IAM', |
| 52 | + '--parameter-overrides', |
| 53 | + `StaticAssetRebuildToken=${Date.now()}`, |
| 54 | + ...(staticAssetRebuildMode ? [`StaticAssetRebuildMode=${staticAssetRebuildMode}`] : []), |
| 55 | + `DevPortalSiteS3BucketName=${siteAssetsBucket}`, |
| 56 | + `ArtifactsS3BucketName=${apiAssetsBucket}`, |
| 57 | + `DevPortalCustomersTableName=${customersTableName}`, |
| 58 | + `CognitoDomainNameOrPrefix=${cognitoDomainName}`, |
| 59 | + '--s3-bucket', buildAssetsBucket, |
| 60 | + ...(awsSamCliProfile ? ['--profile', awsSamCliProfile] : []) |
| 61 | + ]) |
| 62 | + await writeConfig() |
| 63 | + console.log() |
| 64 | + console.log(green('Process Complete! Run `npm run start` to launch run the dev portal locally.')) |
| 65 | + console.log() |
37 | 66 | }
|
38 | 67 |
|
39 |
| -if (samTemplate && packageConfig && stackName && buildAssetsBucket && siteAssetsBucket && apiAssetsBucket && customersTableName) { |
40 |
| - main() |
| 68 | +if (errors.length) { |
| 69 | + for (const error of errors) console.error(red(error)) |
41 | 70 | } else {
|
42 |
| - !samTemplate && console.log('samTemplate must be defined') |
43 |
| - !packageConfig && console.log('packageConfig must be defined') |
44 |
| - !stackName && console.log('stackName must be defined') |
45 |
| - !buildAssetsBucket && console.log('buildAssetsBucket must be defined') |
46 |
| - !siteAssetsBucket && console.log('siteAssetsBucket must be defined') |
47 |
| - !apiAssetsBucket && console.log('apiAssetsBucket must be defined') |
| 71 | + main().catch(err => console.error(red(err))) |
48 | 72 | }
|
0 commit comments