awscfn 1.6.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -180,6 +180,18 @@ If the stack is **`ROLLBACK_COMPLETE`**, **`update-stack`** would delete and rec
180
180
 
181
181
  Non-resource change-set entries (for example hooks) are counted and noted when they are not shown as table rows.
182
182
 
183
+ ### ✅ validate-template
184
+
185
+ Validate a CloudFormation template without creating a change set.
186
+
187
+ ```bash
188
+ awscfn validate-template -t <TEMPLATE_FILE>
189
+ ```
190
+
191
+ | Flag | Description |
192
+ |------|-------------|
193
+ | `--template`, `-t` | CloudFormation template file |
194
+
183
195
  ### ♻️ redeploy-stack
184
196
 
185
197
  ```bash
package/bin/awscfn CHANGED
@@ -13,6 +13,8 @@ const { inspectStack } = require('../dist/inspectStack');
13
13
  const { previewStack } = require('../dist/previewStack');
14
14
  const { redeployStack } = require('../dist/redeployStack');
15
15
  const { updateStack } = require('../dist/updateStack');
16
+ const { validateTemplateOrExit } = require('../dist/cli/validateTemplate');
17
+ const { initCloudFormationClient } = require('../dist/lib/cfn');
16
18
  const { getOutputConfig, setOutputConfig } = require('../dist/lib/output');
17
19
 
18
20
  const pkg = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../package.json'), 'utf8'));
@@ -431,6 +433,19 @@ const cli = yargs
431
433
  runCommand(() => previewStack(name, template, params, require('../dist/cli/parseParamOverrides').parseParamOverrides(set).overrides));
432
434
  }
433
435
  )
436
+ .command(
437
+ 'validate-template',
438
+ 'Validate a CloudFormation template',
439
+ (cmd) => cmd.options({ ...templateOpt }),
440
+ ({ template }) => {
441
+ runCommand(async () => {
442
+ initCloudFormationClient();
443
+ const templateBody = fs.readFileSync(template, 'utf8');
444
+ await validateTemplateOrExit(templateBody);
445
+ console.log('template is valid');
446
+ });
447
+ }
448
+ )
434
449
  .command(
435
450
  'inspect-stack',
436
451
  'Inspect a deployed stack in interactive panes (with fallback)',
@@ -1 +1 @@
1
- {"version":3,"file":"previewStack.d.ts","sourceRoot":"","sources":["../src/previewStack.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAsB,YAAY,CAC9B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
1
+ {"version":3,"file":"previewStack.d.ts","sourceRoot":"","sources":["../src/previewStack.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAsB,YAAY,CAC9B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAqCf"}
@@ -56,6 +56,22 @@ async function previewStack(stackName, templatePath, paramsPath, overrides) {
56
56
  await (0, validateTemplate_1.validateTemplateOrExit)(template);
57
57
  const operation = existing ? 'UPDATE' : 'CREATE';
58
58
  (0, output_1.info)(`${output_1.symbols.arrow} Preview ${(0, output_1.cyan)(operation)} for stack ${(0, output_1.cyan)(stackName)}`);
59
- await cfn.previewChangeSet(stackName, { body: template, params }, operation);
59
+ try {
60
+ await cfn.previewChangeSet(stackName, { body: template, params }, operation);
61
+ }
62
+ finally {
63
+ await cleanupCreatePreviewStack(existing, stackName);
64
+ }
65
+ }
66
+ async function cleanupCreatePreviewStack(existing, stackName) {
67
+ if (existing)
68
+ return;
69
+ const createdForPreview = await cfn.getStackByName(stackName, true);
70
+ if (!createdForPreview || createdForPreview.StackStatus !== client_cloudformation_1.StackStatus.REVIEW_IN_PROGRESS) {
71
+ return;
72
+ }
73
+ (0, output_1.warn)(`Preview created stack ${stackName} in REVIEW_IN_PROGRESS. `
74
+ + 'Cleaning it up automatically...');
75
+ await cfn.deleteStack(createdForPreview);
60
76
  }
61
77
  //# sourceMappingURL=previewStack.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"previewStack.js","sourceRoot":"","sources":["../src/previewStack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,oCAkCC;AA5CD,0EAA2D;AAC3D,+CAAiC;AACjC,uEAAkE;AAClE,6DAA8D;AAC9D,yCAAuD;AAEvD;;;GAGG;AACI,KAAK,UAAU,YAAY,CAC9B,SAAiB,EACjB,YAAoB,EACpB,UAAmB,EACnB,SAAkC;IAGlC,GAAG,CAAC,wBAAwB,EAAE,CAAC;IAE/B,MAAM,EAAC,QAAQ,EAAE,MAAM,EAAC,GAAG,MAAM,IAAA,6CAAqB,EAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,QAAQ,EAAE,WAAW,KAAK,mCAAW,CAAC,iBAAiB,EAAE,CAAC;QAE1D,IAAA,aAAI,EACA,SAAS,SAAS,uEAAuE;cACvF,iCAAiC,CACtC,CAAC;QAEF,MAAM,IAAI,KAAK,CACX,4GAA4G,CAC/G,CAAC;IAEN,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,MAAM,IAAA,yCAAsB,EAAC,QAAQ,CAAC,CAAC;IAEvC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEjD,IAAA,aAAI,EAAC,GAAG,gBAAO,CAAC,KAAK,YAAY,IAAA,aAAI,EAAC,SAAS,CAAC,cAAc,IAAA,aAAI,EAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAEjF,MAAM,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAC,EAAE,SAAS,CAAC,CAAC;AAE/E,CAAC"}
1
+ {"version":3,"file":"previewStack.js","sourceRoot":"","sources":["../src/previewStack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,oCA0CC;AApDD,0EAA2D;AAC3D,+CAAiC;AACjC,uEAAkE;AAClE,6DAA8D;AAC9D,yCAAuD;AAEvD;;;GAGG;AACI,KAAK,UAAU,YAAY,CAC9B,SAAiB,EACjB,YAAoB,EACpB,UAAmB,EACnB,SAAkC;IAGlC,GAAG,CAAC,wBAAwB,EAAE,CAAC;IAE/B,MAAM,EAAC,QAAQ,EAAE,MAAM,EAAC,GAAG,MAAM,IAAA,6CAAqB,EAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,QAAQ,EAAE,WAAW,KAAK,mCAAW,CAAC,iBAAiB,EAAE,CAAC;QAE1D,IAAA,aAAI,EACA,SAAS,SAAS,uEAAuE;cACvF,iCAAiC,CACtC,CAAC;QAEF,MAAM,IAAI,KAAK,CACX,4GAA4G,CAC/G,CAAC;IAEN,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,MAAM,IAAA,yCAAsB,EAAC,QAAQ,CAAC,CAAC;IAEvC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEjD,IAAA,aAAI,EAAC,GAAG,gBAAO,CAAC,KAAK,YAAY,IAAA,aAAI,EAAC,SAAS,CAAC,cAAc,IAAA,aAAI,EAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAEjF,IAAI,CAAC;QAED,MAAM,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAC,EAAE,SAAS,CAAC,CAAC;IAE/E,CAAC;YAAS,CAAC;QAEP,MAAM,yBAAyB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAEzD,CAAC;AAEL,CAAC;AAED,KAAK,UAAU,yBAAyB,CACpC,QAAwD,EACxD,SAAiB;IAGjB,IAAI,QAAQ;QAAE,OAAO;IAErB,MAAM,iBAAiB,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAEpE,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,WAAW,KAAK,mCAAW,CAAC,kBAAkB,EAAE,CAAC;QAEzF,OAAO;IAEX,CAAC;IAED,IAAA,aAAI,EACA,yBAAyB,SAAS,0BAA0B;UAC1D,iCAAiC,CACtC,CAAC;IACF,MAAM,GAAG,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;AAE7C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "awscfn",
3
- "version": "1.6.0",
3
+ "version": "1.6.1",
4
4
  "description": "CLI and TypeScript SDK for managing AWS CloudFormation stacks with simple YAML parameters and real-time event streaming.",
5
5
  "type": "commonjs",
6
6
  "main": "./dist/index.js",