@jefiozie/ngx-aws-deploy
Version:
Deploy an Angular app to Amazon S3 directly from the Angular CLI
101 lines • 4.32 kB
JavaScript
;
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