Skip to content

Commit 70ee590

Browse files
authored
Merge pull request #31 from nicka/feature/preV1Resources
Bump version to v3.0.0
2 parents 7eaf631 + cbe0751 commit 70ee590

File tree

8 files changed

+3032
-2025
lines changed

8 files changed

+3032
-2025
lines changed

.eslintrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
},
1616
"rules": {
1717
"no-console": 0,
18+
"prefer-promise-reject-errors": 0,
1819
"strict": 0,
1920
"import/prefer-default-export": 0,
2021
"import/no-extraneous-dependencies": [

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Changelog - serverless-plugin-diff
22

3+
<a name="3.0.0"></a>
4+
## 6 February 2017: v3.0.0
5+
6+
Made the plugin ready for Serverless v3.* and removed custom options from the CLI command -- [@nicka][@nicka]
7+
8+
---
9+
310
<a name="1.3.0"></a>
411
## 6 February 2017: v1.3.0
512

README.md

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
## Overview
88

9-
Plugin for Serverless Framework v1.x which compares your local AWS CloudFormation templates against deployed ones.
9+
Plugin for Serverless Framework v3.x which compares your local AWS CloudFormation templates against deployed ones.
1010

1111
# Usage
1212

@@ -16,25 +16,6 @@ serverless diff --stage REPLACEME [--region REPLACEME]
1616

1717
<img width="1255" alt="screen shot 2016-11-05 at 14 53 04" src="https://cloud.githubusercontent.com/assets/195404/20030536/9e1a552c-a367-11e6-8e6d-2043f2a5d038.png">
1818

19-
## Command options
20-
21-
```bash
22-
--diffTool ksdiff
23-
```
24-
25-
Custom diff tool:
26-
27-
>Defaults to `diff`
28-
29-
30-
```bash
31-
--localTemplate foo.json
32-
```
33-
34-
Custom CloudFormation template to diff against:
35-
36-
>Defaults to `./serverless/cloudformation-template-update-stack.json`
37-
3819
# Install
3920

4021
Execute npm install in your Serverless project.

lib/index.js

Lines changed: 26 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
const AWS = require('aws-sdk');
44
const diff = require('json-diff').diffString;
5-
const exec = require('child-process-promise').exec;
65
const fs = require('fs-promise');
76

87
class ServerlessPlugin {
@@ -14,23 +13,6 @@ class ServerlessPlugin {
1413
diff: {
1514
usage: 'Compares local AWS CloudFormation templates against deployed ones',
1615
lifecycleEvents: ['diff'],
17-
options: {
18-
diffTool: {
19-
usage:
20-
'Specify the diff tool you want to use '
21-
+ '(e.g. "--diffTool \'ksdiff\'")',
22-
required: false,
23-
shortcut: 'dt',
24-
},
25-
localTemplate: {
26-
usage:
27-
'Specify your locally compiled CloudFormation template'
28-
+ '(e.g. "--localTemplate \'./serverless/'
29-
+ 'cloudformation-template-update-stack.json\'")',
30-
required: false,
31-
shortcut: 'lt',
32-
},
33-
},
3416
},
3517
};
3618

@@ -45,29 +27,33 @@ class ServerlessPlugin {
4527
this.options.region = this.options.region
4628
|| (this.serverless.service.defaults && this.serverless.service.defaults.region)
4729
|| 'us-east-1';
48-
this.options.diffTool = this.options.diffTool;
49-
this.options.localTemplate = this.options.localTemplate
50-
|| '.serverless/cloudformation-template-update-stack.json';
51-
this.options.orgTemplate = this.options.localTemplate.replace('.json', '.org.json');
5230

5331
AWS.config.update({ region: this.options.region });
5432

5533
this.cloudFormation = new AWS.CloudFormation();
34+
this.localTemplate = '.serverless/cloudformation-template-update-stack.json';
35+
this.orgTemplate = '.serverless/cloudformation-template-update-stack.org.json';
5636
}
5737

5838
downloadTemplate() {
5939
let stackName;
6040

61-
const orgTemplate = this.options.orgTemplate;
41+
const { orgTemplate } = this;
6242

6343
if (this.serverless.service.provider
64-
&& typeof this.serverless.service.provider.stackName !== 'undefined'
65-
&& this.serverless.service.provider.stackName !== '') {
44+
&& typeof this.serverless.service.provider.stackName !== 'undefined'
45+
&& this.serverless.service.provider.stackName !== '') {
6646
stackName = this.serverless.service.provider.stackName;
6747
} else {
6848
stackName = `${this.serverless.service.service}-${this.options.stage}`;
6949
}
7050

51+
if (this.serverless.service.provider
52+
&& typeof this.serverless.service.provider.preV1Resources !== 'undefined'
53+
&& this.serverless.service.provider.preV1Resources === true) {
54+
stackName += '-r';
55+
}
56+
7157
const params = {
7258
StackName: stackName,
7359
TemplateStage: 'Processed',
@@ -81,40 +67,32 @@ class ServerlessPlugin {
8167
templateBody = JSON.stringify(templateBody, null, 2);
8268

8369
return fs.writeFile(orgTemplate, templateBody)
84-
.then(() => Promise.resolve());
70+
.then(() => {
71+
console.log('Downloaded currently deployed template');
72+
return Promise.resolve();
73+
});
8574
})
86-
.catch(err => Promise.reject(err.message));
75+
.catch((err) => Promise.reject(err.message));
8776
}
8877

8978
diff() {
90-
const diffTool = this.options.diffTool;
91-
const localTemplate = this.options.localTemplate;
92-
const orgTemplate = this.options.orgTemplate;
79+
const { localTemplate, orgTemplate } = this;
9380

9481
this.serverless.cli.log('Running diff against deployed template');
9582

9683
return fs.stat(localTemplate)
9784
.then(() => {
98-
if (typeof diffTool === 'undefined') {
99-
const orgTemplateJson = JSON.parse(fs.readFileSync(orgTemplate, 'utf8'));
100-
const localTemplateJson = JSON.parse(fs.readFileSync(localTemplate, 'utf8'));
101-
const differences = diff(orgTemplateJson, localTemplateJson) || {};
102-
103-
if (differences.trim() === 'undefined') {
104-
console.log('Resource templates are equal');
105-
} else {
106-
console.log(differences);
107-
}
108-
109-
return Promise.resolve(differences);
85+
const orgTemplateJson = JSON.parse(fs.readFileSync(orgTemplate, 'utf8'));
86+
const localTemplateJson = JSON.parse(fs.readFileSync(localTemplate, 'utf8'));
87+
const differences = diff(orgTemplateJson, localTemplateJson) || {};
88+
89+
if (Object.entries(differences).length === 0) {
90+
console.log('Resource templates are equal');
91+
} else {
92+
console.log(differences);
11093
}
11194

112-
return exec(`${diffTool} ${orgTemplate} ${localTemplate} || true`)
113-
.then((result) => {
114-
const diffData = result.stdout;
115-
console.log(diffData);
116-
return Promise.resolve(diffData);
117-
});
95+
return Promise.resolve(differences);
11896
})
11997
.catch((err) => {
12098
if (err.code === 'ENOENT') {

package.json

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "serverless-plugin-diff",
3-
"version": "1.3.0",
4-
"description": "Plugin for Serverless Framework v1.x which compares your local AWS CloudFormation templates against deployed ones.",
3+
"version": "3.0.0",
4+
"description": "Plugin for Serverless Framework v3.x which compares your local AWS CloudFormation templates against deployed ones.",
55
"main": "lib/index.js",
66
"scripts": {
77
"pretest": "eslint .",
@@ -28,17 +28,19 @@
2828
],
2929
"dependencies": {
3030
"aws-sdk": "^2.6.15",
31-
"child-process-promise": "^2.2.0",
3231
"fs-promise": "^0.5.0",
33-
"json-diff": "^0.3.1"
32+
"json-diff": "^0.7.3"
3433
},
3534
"devDependencies": {
3635
"aws-sdk-mock": "^1.5.0",
3736
"coveralls": "^2.11.14",
38-
"eslint": "^3.8.1",
39-
"eslint-config-airbnb-base": "^9.0.0",
40-
"eslint-plugin-import": "^2.0.1",
41-
"jest": "^16.0.2"
37+
"eslint": "^8.11.0",
38+
"eslint-config-airbnb-base": "^15.0.0",
39+
"eslint-plugin-import": "^2.25.4",
40+
"jest": "^27.5.1"
41+
},
42+
"peerDependencies": {
43+
"serverless": "^2.60 || 3"
4244
},
4345
"jest": {
4446
"bail": true,
@@ -51,7 +53,7 @@
5153
"statements": 90
5254
}
5355
},
54-
"testPathDirs": ["test"],
56+
"roots": ["test"],
5557
"verbose": true
5658
}
5759
}

test/__snapshots__/index.test.js.snap

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,32 @@
1-
exports[`serverless-plugin-write-env-vars diff could not find locally compiled template unsuccessfully triggers diff 1`] = `".serverless/cloudformation-template-update-stack.json could not be found: run \"sls deploy --noDeploy\" first."`;
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3-
exports[`serverless-plugin-write-env-vars diff runs diff with custom localTemplate template successfully triggers diff 1`] = `
4-
" {
5-
- foo: \"custom\"
6-
+ foo: \"foo\"
7-
}
8-
"
9-
`;
3+
exports[`serverless-plugin-write-env-vars diff could not find locally compiled template unsuccessfully triggers diff 1`] = `".serverless/cloudformation-template-update-stack.json could not be found: run \\"sls deploy --noDeploy\\" first."`;
104

11-
exports[`serverless-plugin-write-env-vars diff runs diff without changes successfully triggers diff 1`] = `
12-
" undefined
13-
"
14-
`;
15-
16-
exports[`serverless-plugin-write-env-vars diff successfully triggers diff runs diff with custom diff tool 1`] = `
17-
"1c1
18-
< {\"foo\":\"bar\"}
19-
\\ No newline at end of file
20-
---
21-
> {\"foo\":\"foo\"}
22-
\\ No newline at end of file
23-
"
24-
`;
5+
exports[`serverless-plugin-write-env-vars diff runs diff without changes successfully triggers diff 1`] = `Object {}`;
256

267
exports[`serverless-plugin-write-env-vars diff successfully triggers diff runs diff with defaults 1`] = `
278
" {
28-
[31m- foo: \"bar\"[39m
29-
[32m+ foo: \"foo\"[39m
9+
[31m- foo: \\"bar\\"[39m
10+
[32m+ foo: \\"foo\\"[39m
3011
}
3112
"
3213
`;
3314
3415
exports[`serverless-plugin-write-env-vars downloadTemplate with successful CloudFormation call downloads currently deployed template 1`] = `
3516
"{
36-
\"foo\": \"bar\"
17+
\\"foo\\": \\"bar\\"
3718
}"
3819
`;
3920
4021
exports[`serverless-plugin-write-env-vars downloadTemplate with successful CloudFormation call downloads currently deployed template with custom stackName 1`] = `
4122
"{
42-
\"foo\": \"bar\"
23+
\\"foo\\": \\"bar\\"
24+
}"
25+
`;
26+
27+
exports[`serverless-plugin-write-env-vars downloadTemplate with successful CloudFormation call downloads currently deployed template with preV1Resources flag 1`] = `
28+
"{
29+
\\"foo\\": \\"bar\\"
4330
}"
4431
`;
4532

0 commit comments

Comments
 (0)