UNPKG

@jefiozie/ngx-aws-deploy

Version:

Deploy an Angular app to Amazon S3 directly from the Angular CLI

101 lines 4.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const architect_1 = require("@angular-devkit/architect"); const glob = require("glob"); const config_1 = require("./config"); const cloudfront_1 = require("./cloudfront"); const uploader_1 = require("./uploader"); const getFiles = (filesPath) => { return glob.sync(`**`, { ignore: ['.git'], cwd: filesPath, nodir: true, // Directory and file names may contain `.` at the beginning, // e.g. `.well-known/apple-app-site-association`. dot: true, }); }; exports.default = (0, architect_1.createBuilder)((builderConfig, context) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { context.reportStatus('Executing deployment'); if (!context.target) { throw new Error('Cannot deploy the application without a target'); } const buildTarget = { name: builderConfig.buildTarget || `${context.target.project}:build:production`, }; let targetString = `${context.target.project}:deploy`; // Providing `region`, `bucket` and `subFolder` through configuration is actually deprecated. // By default `ng add` command doesn't generate any additional configuration inside // the builder configuration thus `context.target.configuration` defaults to an empty string. if (context.target.configuration) { targetString += `:${context.target.configuration}`; } const { bucket, region, subFolder } = yield context.getTargetOptions((0, architect_1.targetFromTargetString)(targetString)); const deployConfig = { bucket, region, subFolder }; let buildResult; if (builderConfig.noBuild) { context.logger.info(`📦 Skipping build`); const { outputPath } = yield context.getTargetOptions((0, architect_1.targetFromTargetString)(buildTarget.name)); buildResult = { outputPath, success: true, }; } else { const overrides = Object.assign({}, (builderConfig.baseHref && { baseHref: builderConfig.baseHref })); const build = yield context.scheduleTarget((0, architect_1.targetFromTargetString)(buildTarget.name), Object.assign({}, overrides)); buildResult = yield build.result; context.logger.info(`✔ Build Completed`); } if (buildResult.success) { const filesPath = buildResult.outputPath; const files = getFiles(filesPath); if (files.length === 0) { throw new Error('Target did not produce any files, or the path is incorrect.'); } if ((0, config_1.getAccessKeyId)() || (0, config_1.getSecretAccessKey)()) { context.logger.info('Start uploading files...'); const uploader = new uploader_1.Uploader(context, deployConfig); const success = yield uploader.upload(files, filesPath); if (success) { context.logger.info('✔ Finished uploading files...'); context.logger.info('Start CloudFront invalidation...'); const cloudFront = new cloudfront_1.CloudFront(context, deployConfig); const success = yield cloudFront.invalidate(); if (success) { context.logger.info('✔ Finished CloudFront invalidation...'); return { success: true }; } else { context.logger.error(`❌ Error during CloudFront invalidation`); return { error: `❌ Error during CloudFront invalidation`, success: false, }; } } else { return { error: `❌ Error during files upload`, success: false, }; } } else { context.logger.error(`❌ Missing authentication settings for AWS`); return { error: `❌ Missing authentication settings for AWS`, success: false, }; } } else { return { error: `❌ Application build failed`, success: false, }; } })); //# sourceMappingURL=index.js.map