{"_id":"@abwaters/cicd","_rev":"7-b9b1a93679336c08adc95cde7fd1562c","name":"@abwaters/cicd","dist-tags":{"latest":"1.1.8"},"versions":{"1.1.2":{"name":"@abwaters/cicd","version":"1.1.2","keywords":["aws","cicd","cli","cloudformation","deployment","deploy","rollback","lambda","api-gateway","sns","sqs","fargate","cloudfront","s3","serverless"],"author":{"name":"Bryan Waters","email":"bryanw@abwaters.com"},"license":"MIT","_id":"@abwaters/cicd@1.1.2","maintainers":[{"name":"abwaters","email":"bryanw@abwaters.com"}],"homepage":"https://github.com/abwaters/cicd#readme","bugs":{"url":"https://github.com/abwaters/cicd/issues"},"bin":{"cicd":"dist/index.js"},"dist":{"shasum":"51b651180afda8ef6e91e1a75c7615c0a7a2442a","tarball":"https://registry.npmjs.org/@abwaters/cicd/-/cicd-1.1.2.tgz","fileCount":118,"integrity":"sha512-1OufkQ0zgHxX/wBvFkte/aud7WfDMd7f4ysotrafXe7p7UrLANF7Yi7wmCY6uSKXL+uItqtdb/62PIxwYTv8Lw==","signatures":[{"sig":"MEUCIQCl99Cbl6X/HC+UWU/3Ona5LNiTR6YUTK3DcvfCiEJlZwIgZBKo04k1Nb038tP7msvzz7DR33uN4pOTXz0SGhKCMfA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":571133},"jest":{"preset":"ts-jest","testMatch":["**/test/**/*.test.{js,ts}"],"transform":{"^.+\\.tsx?$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","text-summary","json","lcov"],"collectCoverageFrom":["src/**/*.{js,ts}","!src/**/*.d.ts","!src/index.ts"]},"main":"dist/index.js","type":"commonjs","types":"dist/types.d.ts","gitHead":"d97b1c6d5f3fef918da65e5ef44596f468e5dbc7","scripts":{"info":"node dist/index.js info","test":"jest","build":"tsc","clean":"node dist/index.js clean","watch":"tsc --watch","deploy":"node dist/index.js deploy","validate":"node dist/index.js validate","semantic-release":"semantic-release"},"_npmUser":{"name":"abwaters","email":"bryanw@abwaters.com"},"repository":{"url":"git+https://github.com/abwaters/cicd.git","type":"git"},"_npmVersion":"11.16.0","description":"Opinionated AWS CI/CD tool with git-commit-based deploys, GitHub-tracked rollback, and a plugin architecture (Lambda, API Gateway, SNS, SQS, Fargate, S3+CloudFront).","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ajv":"^8.20.0","@aws-sdk/client-s3":"^3.1059.0","@aws-sdk/client-ecr":"^3.1059.0","@aws-sdk/client-ecs":"^3.1059.0","@aws-sdk/client-sns":"^3.1059.0","@aws-sdk/client-ssm":"^3.1059.0","@aws-sdk/client-sts":"^3.1053.0","@aws-sdk/client-lambda":"^3.1059.0","@aws-sdk/client-cloudfront":"^3.1059.0","@aws-sdk/client-api-gateway":"^3.1059.0","@aws-sdk/client-apigatewayv2":"^3.1059.0","@aws-sdk/client-cloudformation":"^3.1059.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","ts-jest":"^29.4.11","ts-node":"^10.9.2","typescript":"^6.0.3","@types/jest":"^30.0.0","@types/node":"^25.9.1","semantic-release":"^25.0.3","@semantic-release/npm":"^13.1.5","@semantic-release/exec":"^7.1.0","@semantic-release/github":"^12.0.8","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.1","conventional-changelog-conventionalcommits":"^9.3.1"},"_npmOperationalInternal":{"tmp":"tmp/cicd_1.1.2_1780501031577_0.6388558059869616","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@abwaters/cicd","version":"1.1.3","keywords":["aws","cicd","cli","cloudformation","deployment","deploy","rollback","lambda","api-gateway","sns","sqs","fargate","cloudfront","s3","serverless"],"author":{"name":"Bryan Waters","email":"bryanw@abwaters.com"},"license":"MIT","_id":"@abwaters/cicd@1.1.3","maintainers":[{"name":"abwaters","email":"bryanw@abwaters.com"}],"homepage":"https://github.com/abwaters/cicd#readme","bugs":{"url":"https://github.com/abwaters/cicd/issues"},"bin":{"cicd":"dist/index.js"},"dist":{"shasum":"ebaea93a6cb05975475b33d5b36ea8763ab77fa4","tarball":"https://registry.npmjs.org/@abwaters/cicd/-/cicd-1.1.3.tgz","fileCount":118,"integrity":"sha512-soCKrSsjlSYLp7G1tgA+QyuBQvN75iIZSfTbamsIoy35A2+9Bakdc10fNX4MmvMNSEpBmXDgzVYbi2O7z18qJQ==","signatures":[{"sig":"MEYCIQDWL+pCAKVbaU2kGmwGdIdyDWN2eYKtcGWgihUKLvaFSwIhAMXiX8nuLlp4q+fBaacrTKo6wbeWkGc++RVIL9C+A6cb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abwaters%2fcicd@1.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":571157},"jest":{"preset":"ts-jest","testMatch":["**/test/**/*.test.{js,ts}"],"transform":{"^.+\\.tsx?$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","text-summary","json","lcov"],"collectCoverageFrom":["src/**/*.{js,ts}","!src/**/*.d.ts","!src/index.ts"]},"main":"dist/index.js","type":"commonjs","types":"dist/types.d.ts","gitHead":"c17d73b73d2e212fe36d64b4714caeb1ed2dd9d1","scripts":{"info":"node dist/index.js info","test":"jest","build":"tsc","clean":"node dist/index.js clean","watch":"tsc --watch","deploy":"node dist/index.js deploy","validate":"node dist/index.js validate","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fd5807df-785b-477f-86d7-aaaa4171a9c8"}},"repository":{"url":"git+https://github.com/abwaters/cicd.git","type":"git"},"_npmVersion":"11.16.0","description":"Opinionated AWS CI/CD tool with git-commit-based deploys, GitHub-tracked rollback, and a plugin architecture (Lambda, API Gateway, SNS, SQS, Fargate, S3+CloudFront).","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ajv":"^8.20.0","@aws-sdk/client-s3":"^3.1059.0","@aws-sdk/client-ecr":"^3.1059.0","@aws-sdk/client-ecs":"^3.1059.0","@aws-sdk/client-sns":"^3.1059.0","@aws-sdk/client-ssm":"^3.1059.0","@aws-sdk/client-sts":"^3.1053.0","@aws-sdk/client-lambda":"^3.1059.0","@aws-sdk/client-cloudfront":"^3.1059.0","@aws-sdk/client-api-gateway":"^3.1059.0","@aws-sdk/client-apigatewayv2":"^3.1059.0","@aws-sdk/client-cloudformation":"^3.1059.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","ts-jest":"^29.4.11","ts-node":"^10.9.2","typescript":"^6.0.3","@types/jest":"^30.0.0","@types/node":"^25.9.1","semantic-release":"^25.0.3","@semantic-release/npm":"^13.1.5","@semantic-release/exec":"^7.1.0","@semantic-release/github":"^12.0.8","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.1","conventional-changelog-conventionalcommits":"^9.3.1"},"_npmOperationalInternal":{"tmp":"tmp/cicd_1.1.3_1780513108867_0.9661801412536186","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@abwaters/cicd","version":"1.1.4","keywords":["aws","cicd","cli","cloudformation","deployment","deploy","rollback","lambda","api-gateway","sns","sqs","fargate","cloudfront","s3","serverless"],"author":{"name":"Bryan Waters","email":"bryanw@abwaters.com"},"license":"MIT","_id":"@abwaters/cicd@1.1.4","maintainers":[{"name":"abwaters","email":"bryanw@abwaters.com"}],"homepage":"https://github.com/abwaters/cicd#readme","bugs":{"url":"https://github.com/abwaters/cicd/issues"},"bin":{"cicd":"dist/index.js"},"dist":{"shasum":"19efa31fe8e7a2ae3056f27a803b7f74cb0d1ece","tarball":"https://registry.npmjs.org/@abwaters/cicd/-/cicd-1.1.4.tgz","fileCount":118,"integrity":"sha512-EgQVweTgErmF8s5pURakVJkb3wqFrynuW1EGuenwGDUNOGluXGbNM7+XIJEtosbTzp9qg4DmsxYa9rv6+scWLA==","signatures":[{"sig":"MEUCIDf7q6EMofv7JudJYVZnqepbA2ifKSt8Kx4DjFCtvbFRAiEAhblJu2m0KUOS/oxJ1E8UTJLYdiFejVoW1Vvuyed0Kzo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abwaters%2fcicd@1.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":571157},"jest":{"preset":"ts-jest","testMatch":["**/test/**/*.test.{js,ts}"],"transform":{"^.+\\.tsx?$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","text-summary","json","lcov"],"collectCoverageFrom":["src/**/*.{js,ts}","!src/**/*.d.ts","!src/index.ts"]},"main":"dist/index.js","type":"commonjs","types":"dist/types.d.ts","gitHead":"a61d9be9580d18abd4e8898b6aa2da23aa10c70c","scripts":{"info":"node dist/index.js info","test":"jest","build":"tsc","clean":"node dist/index.js clean","watch":"tsc --watch","deploy":"node dist/index.js deploy","validate":"node dist/index.js validate","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fd5807df-785b-477f-86d7-aaaa4171a9c8"}},"repository":{"url":"git+https://github.com/abwaters/cicd.git","type":"git"},"_npmVersion":"11.16.0","description":"Opinionated AWS CI/CD tool with git-commit-based deploys, GitHub-tracked rollback, and a plugin architecture (Lambda, API Gateway, SNS, SQS, Fargate, S3+CloudFront).","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ajv":"^8.20.0","@aws-sdk/client-s3":"^3.1059.0","@aws-sdk/client-ecr":"^3.1059.0","@aws-sdk/client-ecs":"^3.1059.0","@aws-sdk/client-sns":"^3.1059.0","@aws-sdk/client-ssm":"^3.1059.0","@aws-sdk/client-sts":"^3.1053.0","@aws-sdk/client-lambda":"^3.1059.0","@aws-sdk/client-cloudfront":"^3.1059.0","@aws-sdk/client-api-gateway":"^3.1059.0","@aws-sdk/client-apigatewayv2":"^3.1059.0","@aws-sdk/client-cloudformation":"^3.1059.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","ts-jest":"^29.4.11","ts-node":"^10.9.2","typescript":"^6.0.3","@types/jest":"^30.0.0","@types/node":"^25.9.1","semantic-release":"^25.0.3","@semantic-release/npm":"^13.1.5","@semantic-release/exec":"^7.1.0","@semantic-release/github":"^12.0.8","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.1","conventional-changelog-conventionalcommits":"^9.3.1"},"_npmOperationalInternal":{"tmp":"tmp/cicd_1.1.4_1780562912693_0.3092257341453013","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@abwaters/cicd","version":"1.1.5","keywords":["aws","cicd","cli","cloudformation","deployment","deploy","rollback","lambda","api-gateway","sns","sqs","fargate","cloudfront","s3","serverless"],"author":{"name":"Bryan Waters","email":"bryanw@abwaters.com"},"license":"MIT","_id":"@abwaters/cicd@1.1.5","maintainers":[{"name":"abwaters","email":"bryanw@abwaters.com"}],"homepage":"https://github.com/abwaters/cicd#readme","bugs":{"url":"https://github.com/abwaters/cicd/issues"},"bin":{"cicd":"dist/index.js"},"dist":{"shasum":"b055cacb96464df51fb46b7278433646f86ec525","tarball":"https://registry.npmjs.org/@abwaters/cicd/-/cicd-1.1.5.tgz","fileCount":118,"integrity":"sha512-+Q0IqyDDkJWwaAd4YaeI9LrPPfH7jFur6EI2Yvgn1XiCvqbKTCx5npE3hpHEe1JeLJWpDtGmCb2MQ1ONrdrnlQ==","signatures":[{"sig":"MEUCIGVmw5spoVnczzoWegWuVvFmxWp9XZpJA/1OCNN/0nzhAiEAvZCb79XhrZIHsY1KGwc4U7+40Id/qhStuiy6KX0DRDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abwaters%2fcicd@1.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":571157},"jest":{"preset":"ts-jest","testMatch":["**/test/**/*.test.{js,ts}"],"transform":{"^.+\\.tsx?$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","text-summary","json","lcov"],"collectCoverageFrom":["src/**/*.{js,ts}","!src/**/*.d.ts","!src/index.ts"]},"main":"dist/index.js","type":"commonjs","types":"dist/types.d.ts","gitHead":"71ccf3f66a284bedadde9f86eb3e078617d43de9","scripts":{"info":"node dist/index.js info","test":"jest","build":"tsc","clean":"node dist/index.js clean","watch":"tsc --watch","deploy":"node dist/index.js deploy","validate":"node dist/index.js validate","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fd5807df-785b-477f-86d7-aaaa4171a9c8"}},"repository":{"url":"git+https://github.com/abwaters/cicd.git","type":"git"},"_npmVersion":"11.16.0","description":"Opinionated AWS CI/CD tool with git-commit-based deploys, GitHub-tracked rollback, and a plugin architecture (Lambda, API Gateway, SNS, SQS, Fargate, S3+CloudFront).","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ajv":"^8.20.0","@aws-sdk/client-s3":"^3.1059.0","@aws-sdk/client-ecr":"^3.1059.0","@aws-sdk/client-ecs":"^3.1059.0","@aws-sdk/client-sns":"^3.1059.0","@aws-sdk/client-ssm":"^3.1059.0","@aws-sdk/client-sts":"^3.1053.0","@aws-sdk/client-lambda":"^3.1059.0","@aws-sdk/client-cloudfront":"^3.1059.0","@aws-sdk/client-api-gateway":"^3.1059.0","@aws-sdk/client-apigatewayv2":"^3.1059.0","@aws-sdk/client-cloudformation":"^3.1059.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","ts-jest":"^29.4.11","ts-node":"^10.9.2","typescript":"^6.0.3","@types/jest":"^30.0.0","@types/node":"^25.9.1","semantic-release":"^25.0.3","@semantic-release/npm":"^13.1.5","@semantic-release/exec":"^7.1.0","@semantic-release/github":"^12.0.8","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.1","conventional-changelog-conventionalcommits":"^9.3.1"},"_npmOperationalInternal":{"tmp":"tmp/cicd_1.1.5_1780998120769_0.8121515432131363","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"@abwaters/cicd","version":"1.1.6","keywords":["aws","cicd","cli","cloudformation","deployment","deploy","rollback","lambda","api-gateway","sns","sqs","fargate","cloudfront","s3","serverless"],"author":{"name":"Bryan Waters","email":"bryanw@abwaters.com"},"license":"MIT","_id":"@abwaters/cicd@1.1.6","maintainers":[{"name":"abwaters","email":"bryanw@abwaters.com"}],"homepage":"https://github.com/abwaters/cicd#readme","bugs":{"url":"https://github.com/abwaters/cicd/issues"},"bin":{"cicd":"dist/index.js"},"dist":{"shasum":"f623badcaf76f85d5b24d49378c914196805a812","tarball":"https://registry.npmjs.org/@abwaters/cicd/-/cicd-1.1.6.tgz","fileCount":118,"integrity":"sha512-GoTX+B26HMiTIV3++gGmS6vasRH7N5YRPQpXqozUxYiJr5upaTT6vo5vvak3fPgcodud9Y5vR2pcNhRvmlJRBQ==","signatures":[{"sig":"MEUCIG1cPRMwOmJtb+eVhDmG9W1NkKXWEgIx1AzuJYskyAQ9AiEAqxO/VaxJCnj7a8V5VoIUqS9B3dVwTdqPBZOC8vZAK9E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abwaters%2fcicd@1.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":571157},"jest":{"preset":"ts-jest","testMatch":["**/test/**/*.test.{js,ts}"],"transform":{"^.+\\.tsx?$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","text-summary","json","lcov"],"collectCoverageFrom":["src/**/*.{js,ts}","!src/**/*.d.ts","!src/index.ts"]},"main":"dist/index.js","type":"commonjs","types":"dist/types.d.ts","gitHead":"3f1146931e608cce6e67fd9a514d7f48b07411d7","scripts":{"info":"node dist/index.js info","test":"jest","build":"tsc","clean":"node dist/index.js clean","watch":"tsc --watch","deploy":"node dist/index.js deploy","validate":"node dist/index.js validate","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fd5807df-785b-477f-86d7-aaaa4171a9c8"}},"repository":{"url":"git+https://github.com/abwaters/cicd.git","type":"git"},"_npmVersion":"11.16.0","description":"Opinionated AWS CI/CD tool with git-commit-based deploys, GitHub-tracked rollback, and a plugin architecture (Lambda, API Gateway, SNS, SQS, Fargate, S3+CloudFront).","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ajv":"^8.20.0","@aws-sdk/client-s3":"^3.1059.0","@aws-sdk/client-ecr":"^3.1059.0","@aws-sdk/client-ecs":"^3.1059.0","@aws-sdk/client-sns":"^3.1059.0","@aws-sdk/client-ssm":"^3.1059.0","@aws-sdk/client-sts":"^3.1053.0","@aws-sdk/client-lambda":"^3.1059.0","@aws-sdk/client-cloudfront":"^3.1059.0","@aws-sdk/client-api-gateway":"^3.1059.0","@aws-sdk/client-apigatewayv2":"^3.1059.0","@aws-sdk/client-cloudformation":"^3.1059.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","ts-jest":"^29.4.11","ts-node":"^10.9.2","typescript":"^6.0.3","@types/jest":"^30.0.0","@types/node":"^25.9.1","semantic-release":"^25.0.3","@semantic-release/npm":"^13.1.5","@semantic-release/exec":"^7.1.0","@semantic-release/github":"^12.0.8","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.1","conventional-changelog-conventionalcommits":"^9.3.1"},"_npmOperationalInternal":{"tmp":"tmp/cicd_1.1.6_1780998328306_0.9350874235073716","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"@abwaters/cicd","version":"1.1.7","keywords":["aws","cicd","cli","cloudformation","deployment","deploy","rollback","lambda","api-gateway","sns","sqs","fargate","cloudfront","s3","serverless"],"author":{"name":"Bryan Waters","email":"bryanw@abwaters.com"},"license":"MIT","_id":"@abwaters/cicd@1.1.7","maintainers":[{"name":"abwaters","email":"bryanw@abwaters.com"}],"homepage":"https://github.com/abwaters/cicd#readme","bugs":{"url":"https://github.com/abwaters/cicd/issues"},"bin":{"cicd":"dist/index.js"},"dist":{"shasum":"8f48044e84f3eaac5b88325dda060e0aebabf52f","tarball":"https://registry.npmjs.org/@abwaters/cicd/-/cicd-1.1.7.tgz","fileCount":118,"integrity":"sha512-t4GOpg7Suq25Jc91A8gFMCaEeGTXLeDYJD0dNOa9Ta/BGbK6f9sQHdOuO+HU07aoXrI4dpwGNXAKP2MwFxAKag==","signatures":[{"sig":"MEQCIGZLu7aG3sFm/SqlZC3E+yMxGZCZYnDC7DznYGOScg40AiBsO89XgJpKogQB9Q/A4NRtkw6ODBL9QDFXr4famT9ccg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abwaters%2fcicd@1.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":571157},"jest":{"preset":"ts-jest","testMatch":["**/test/**/*.test.{js,ts}"],"transform":{"^.+\\.tsx?$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","text-summary","json","lcov"],"collectCoverageFrom":["src/**/*.{js,ts}","!src/**/*.d.ts","!src/index.ts"]},"main":"dist/index.js","type":"commonjs","types":"dist/types.d.ts","gitHead":"bfeb62f271aa42f708f48b8bcef499c418c6761f","scripts":{"info":"node dist/index.js info","test":"jest","build":"tsc","clean":"node dist/index.js clean","watch":"tsc --watch","deploy":"node dist/index.js deploy","validate":"node dist/index.js validate","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fd5807df-785b-477f-86d7-aaaa4171a9c8"}},"repository":{"url":"git+https://github.com/abwaters/cicd.git","type":"git"},"_npmVersion":"11.16.0","description":"Opinionated AWS CI/CD tool with git-commit-based deploys, GitHub-tracked rollback, and a plugin architecture (Lambda, API Gateway, SNS, SQS, Fargate, S3+CloudFront).","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ajv":"^8.20.0","@aws-sdk/client-s3":"^3.1059.0","@aws-sdk/client-ecr":"^3.1059.0","@aws-sdk/client-ecs":"^3.1059.0","@aws-sdk/client-sns":"^3.1059.0","@aws-sdk/client-ssm":"^3.1059.0","@aws-sdk/client-sts":"^3.1053.0","@aws-sdk/client-lambda":"^3.1059.0","@aws-sdk/client-cloudfront":"^3.1059.0","@aws-sdk/client-api-gateway":"^3.1059.0","@aws-sdk/client-apigatewayv2":"^3.1059.0","@aws-sdk/client-cloudformation":"^3.1059.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","ts-jest":"^29.4.11","ts-node":"^10.9.2","typescript":"^6.0.3","@types/jest":"^30.0.0","@types/node":"^25.9.1","semantic-release":"^25.0.3","@semantic-release/npm":"^13.1.5","@semantic-release/exec":"^7.1.0","@semantic-release/github":"^12.0.8","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.1","conventional-changelog-conventionalcommits":"^9.3.1"},"_npmOperationalInternal":{"tmp":"tmp/cicd_1.1.7_1780998412926_0.8410709487346759","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"@abwaters/cicd","version":"1.1.8","description":"Opinionated AWS CI/CD tool with git-commit-based deploys, GitHub-tracked rollback, and a plugin architecture (Lambda, API Gateway, SNS, SQS, Fargate, S3+CloudFront).","license":"MIT","author":{"name":"Bryan Waters","email":"bryanw@abwaters.com"},"type":"commonjs","main":"dist/index.js","types":"dist/types.d.ts","bin":{"cicd":"dist/index.js"},"keywords":["aws","cicd","cli","cloudformation","deployment","deploy","rollback","lambda","api-gateway","sns","sqs","fargate","cloudfront","s3","serverless"],"repository":{"type":"git","url":"git+https://github.com/abwaters/cicd.git"},"homepage":"https://github.com/abwaters/cicd#readme","bugs":{"url":"https://github.com/abwaters/cicd/issues"},"scripts":{"build":"tsc","watch":"tsc --watch","deploy":"node dist/index.js deploy","info":"node dist/index.js info","clean":"node dist/index.js clean","validate":"node dist/index.js validate","test":"jest","semantic-release":"semantic-release"},"publishConfig":{"access":"public","provenance":true},"jest":{"preset":"ts-jest","testEnvironment":"node","testMatch":["**/test/**/*.test.{js,ts}"],"collectCoverageFrom":["src/**/*.{js,ts}","!src/**/*.d.ts","!src/index.ts"],"coverageDirectory":"coverage","coverageReporters":["text","text-summary","json","lcov"],"transform":{"^.+\\.tsx?$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]}},"dependencies":{"@aws-sdk/client-api-gateway":"^3.1059.0","@aws-sdk/client-apigatewayv2":"^3.1059.0","@aws-sdk/client-cloudformation":"^3.1059.0","@aws-sdk/client-cloudfront":"^3.1059.0","@aws-sdk/client-ecr":"^3.1059.0","@aws-sdk/client-ecs":"^3.1059.0","@aws-sdk/client-lambda":"^3.1059.0","@aws-sdk/client-s3":"^3.1059.0","@aws-sdk/client-sns":"^3.1059.0","@aws-sdk/client-ssm":"^3.1059.0","@aws-sdk/client-sts":"^3.1053.0","ajv":"^8.20.0"},"devDependencies":{"@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/exec":"^7.1.0","@semantic-release/github":"^12.0.8","@semantic-release/npm":"^13.1.5","@semantic-release/release-notes-generator":"^14.1.1","@types/jest":"^30.0.0","@types/node":"^25.9.1","conventional-changelog-conventionalcommits":"^9.3.1","jest":"^30.4.2","semantic-release":"^25.0.3","ts-jest":"^29.4.11","ts-node":"^10.9.2","typescript":"^6.0.3"},"gitHead":"822b25d0c4abd4adcd28a88bf977bcbf3707aeec","_id":"@abwaters/cicd@1.1.8","_nodeVersion":"22.22.3","_npmVersion":"11.16.0","dist":{"integrity":"sha512-Hhh1bzNlfCFPe++LtTKQRhEZTyCTiRuKm/SnBsHvcotMY8VVRzc++aOu7k/VkQsb/+NpiiKnavF7sPNU1ZaTtA==","shasum":"6f862eb06f05a7a460b46e61c9f5c6c00f1ca788","tarball":"https://registry.npmjs.org/@abwaters/cicd/-/cicd-1.1.8.tgz","fileCount":118,"unpackedSize":571157,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abwaters%2fcicd@1.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD8sXlWnun1tW7/ZYWmpgNqRfwel7dGHwqB5TKUOpqFgwIhAMoy/754+1yiCaWmaSttBRYHMcTt7I5oIeow1uyG/qvB"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fd5807df-785b-477f-86d7-aaaa4171a9c8"}},"directories":{},"maintainers":[{"name":"abwaters","email":"bryanw@abwaters.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cicd_1.1.8_1781018266359_0.2503875818707042"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-03T15:37:11.355Z","modified":"2026-06-09T15:17:46.753Z","1.1.2":"2026-06-03T15:37:11.734Z","1.1.3":"2026-06-03T18:58:29.027Z","1.1.4":"2026-06-04T08:48:32.849Z","1.1.5":"2026-06-09T09:42:00.891Z","1.1.6":"2026-06-09T09:45:28.445Z","1.1.7":"2026-06-09T09:46:53.062Z","1.1.8":"2026-06-09T15:17:46.497Z"},"bugs":{"url":"https://github.com/abwaters/cicd/issues"},"author":{"name":"Bryan Waters","email":"bryanw@abwaters.com"},"license":"MIT","homepage":"https://github.com/abwaters/cicd#readme","keywords":["aws","cicd","cli","cloudformation","deployment","deploy","rollback","lambda","api-gateway","sns","sqs","fargate","cloudfront","s3","serverless"],"repository":{"type":"git","url":"git+https://github.com/abwaters/cicd.git"},"description":"Opinionated AWS CI/CD tool with git-commit-based deploys, GitHub-tracked rollback, and a plugin architecture (Lambda, API Gateway, SNS, SQS, Fargate, S3+CloudFront).","maintainers":[{"name":"abwaters","email":"bryanw@abwaters.com"}],"readme":"# cicd\n\n[![CI](https://img.shields.io/github/actions/workflow/status/abwaters/cicd/ci.yml?branch=main&label=CI)](https://github.com/abwaters/cicd/actions/workflows/ci.yml)\n[![Version](https://img.shields.io/github/package-json/v/abwaters/cicd)](https://github.com/abwaters/cicd/blob/main/package.json)\n[![License](https://img.shields.io/github/license/abwaters/cicd)](LICENSE)\n\nCustom AWS CI/CD deployment tool for managing Lambda functions, API Gateway, and SNS resources.\n\n## Installation\n\n### Local Development\n\n```bash\nnpm install\n```\n\n### Global Installation\n\nTo install as a global CLI command:\n\n```bash\nnpm install -g .\n```\n\nAfter global installation, you can use the `cicd` command from anywhere:\n\n```bash\ncicd validate\ncicd deploy dev abc123\ncicd rollback prod\ncicd info\ncicd clean\n```\n\n### Local Usage (without global install)\n\nIf not installed globally, you can run commands using npm scripts or node directly:\n\n```bash\nnpm run validate\nnode src/index.js deploy dev abc123\nnode src/index.js rollback prod\nnode src/index.js info\nnode src/index.js clean\n```\n\n## Configuration\n\nThe deployment system is driven by `cicd.json`, which defines your AWS infrastructure and deployment configuration. A reference file is provided at `cicd.example.json` — copy it to `cicd.json` and edit:\n\n```bash\ncp cicd.example.json cicd.json\n```\n\n### Configuration Validation\n\nBefore deploying, validate your `cicd.json` configuration:\n\n```bash\ncicd validate\n# or: npm run validate\n```\n\nThe validation checks:\n- Required fields are present (app, account, region, exports, stages)\n- AWS account ID is a valid 12-digit number\n- AWS region follows the correct format\n- Export types are valid (api or sns)\n- API configurations have required path and functions\n- Function configurations have valid HTTP methods\n- Environment variable names follow naming conventions\n- Stage configurations are properly structured\n\n### Schema Reference\n\nThe `cicd.schema.json` file defines the complete structure. Key elements:\n\n#### Root Configuration\n\n```json\n{\n  \"app\": \"string\",                     // Application name\n  \"account\": \"123456789012\",           // AWS account ID (12 digits)\n  \"region\": \"us-east-1\",               // AWS region\n  \"repo\": \"owner/repo\",               // Optional: GitHub repo for deployment tracking & rollback\n  \"environment\": {},                   // Global environment variables\n  \"exports\": [],                       // API and SNS resource configurations\n  \"stages\": []                         // Deployment stages\n}\n```\n\n#### Environment Variables\n\nEnvironment variables support special resolution syntax:\n\n```json\n{\n  \"environment\": {\n    \"VAR_FROM_CF\": \"!ImportValue stack-export-name\",\n    \"VAR_FROM_SSM\": \"!ParameterStore /path/to/param\",\n    \"VAR_FROM_ENV\": \"!SetEnv LOCAL_ENV_VAR\"\n  }\n}\n```\n\n#### API Export\n\n```json\n{\n  \"type\": \"api\",\n  \"name\": \"cf-export-name\",           // CloudFormation export name for API ID\n  \"path\": \"api-path\",                 // Base path\n  \"throttle\": {                       // Optional: global throttle settings for all methods\n    \"rateLimit\": 10,                  // Requests per second\n    \"burstLimit\": 20                  // Maximum concurrent requests\n  },\n  \"functions\": [\n    {\n      \"name\": \"cf-export-name\",       // CloudFormation export name for Lambda ARN\n      \"method\": \"GET\",                // HTTP method\n      \"env\": \"VAR1,VAR2\",             // Optional: environment variables to include\n      \"concurrency\": 0                // Optional: reserved concurrent executions\n    }\n  ]\n}\n```\n\n#### SNS Export\n\n```json\n{\n  \"type\": \"sns\",\n  \"name\": \"cf-export-name\",           // CloudFormation export name for SNS topic ARN\n  \"stages\": [\"prod\"],                 // Optional: limit to specific stages\n  \"functions\": [\n    {\n      \"name\": \"cf-export-name\",\n      \"method\": \"POST\",\n      \"env\": \"VAR1,VAR2\"\n    }\n  ]\n}\n```\n\n#### Stage Configuration\n\n```json\n{\n  \"stage\": \"prod\",\n  \"mapping\": {\n    \"domain\": \"api.example.com\",\n    \"path\": \"\"                        // Base path (empty for root)\n  },\n  \"environment\": {\n    \"STAGE_VAR\": \"value\"              // Stage-specific overrides\n  },\n  \"throttle\": {                       // Optional: stage-specific throttle overrides\n    \"rateLimit\": 100,                 // Requests per second\n    \"burstLimit\": 200                 // Maximum concurrent requests\n  }\n}\n```\n\n## Commands\n\nAll commands support the `--verbose` flag for detailed debugging output.\n\n### Deploy\n\nDeploy a commit to a stage:\n\n```bash\ncicd deploy <stage> <commit>\n\n# Deploy with options\ncicd deploy <stage> <commit> --env              # Only update environment variables\ncicd deploy <stage> <commit> --api              # Only update API Gateway\ncicd deploy <stage> <commit> --sns              # Only update SNS topics\ncicd deploy <stage> <commit> --api-filter=name  # Deploy specific API\ncicd deploy <stage> <commit> --verbose          # Enable verbose logging\n```\n\nExamples:\n```bash\ncicd deploy dev abc123\ncicd deploy prod abc123 --api\ncicd deploy staging abc123 --verbose\n```\n\n### Rollback\n\nRollback a stage to a previous deployment. Requires `repo` in `cicd.json` (uses GitHub Deployments API for history).\n\n```bash\n# Rollback to the most recent prior successful deployment\ncicd rollback <stage>\n\n# Rollback to a specific commit\ncicd rollback <stage> <commit>\n\n# Partial rollback (same flags as deploy)\ncicd rollback <stage> --env              # Only rollback environment variables\ncicd rollback <stage> --api              # Only rollback API Gateway\ncicd rollback <stage> --sns              # Only rollback SNS topics\ncicd rollback <stage> --api-filter=name  # Rollback specific API\ncicd rollback <stage> --verbose          # Enable verbose logging\n```\n\nExamples:\n```bash\ncicd rollback prod\ncicd rollback staging abc1234\ncicd rollback prod --api\n```\n\nThe command fetches recent successful deployments from GitHub, displays a confirmation prompt showing the current and target commits, and executes the rollback using the same deployment operations as `deploy`.\n\n### Info\n\nShow current deployments for all stages:\n\n```bash\ncicd info\n\n# Include Lambda function versions\ncicd info --details\n\n# Enable verbose logging\ncicd info --verbose\n```\n\n### Clean\n\nRemove unused API deployments, Lambda aliases, and versions:\n\n```bash\ncicd clean\n\n# Enable verbose logging\ncicd clean --verbose\n```\n\nThis command:\n- Identifies active commits from API stages and SNS subscriptions\n- Deletes API Gateway deployments not used by any stage\n- Removes Lambda aliases not associated with active commits\n- Removes Lambda versions not referenced by active aliases\n\n### Install\n\nInstall any plugins listed in `cicd.json`'s `plugins[]` array that aren't already in `node_modules`. Runs `npm install --save-dev` so the plugins are tracked in your `package.json` and lockfile.\n\n```bash\ncicd install\n\n# Enable verbose logging\ncicd install --verbose\n```\n\nIf you're using a private registry (e.g. GitHub Packages), make sure your `.npmrc` is set up before running this — `cicd install` just shells out to `npm install` and will fail with the same auth error you'd see otherwise.\n\n### Validate\n\nValidate cicd.json configuration:\n\n```bash\ncicd validate\n\n# Enable verbose logging\ncicd validate --verbose\n```\n\n## How It Works\n\n1. **Configuration Loading**: Reads `cicd.json` and validates against schema\n2. **CloudFormation Resolution**: Resolves CloudFormation exports referenced in config\n3. **Environment Resolution**: Resolves special environment variable syntax\n4. **Lambda Versioning**: Creates Lambda versions and aliases based on Git commit\n5. **API Deployment**: Updates API Gateway deployments and stages with throttling settings\n6. **Domain Mapping**: Configures custom domain mappings for stages\n7. **SNS Subscriptions**: Subscribes Lambda functions to SNS topics\n8. **Permission Management**: Updates Lambda permissions for API Gateway and SNS triggers\n\n### Throttling\n\nAPI Gateway throttling can be configured at two levels:\n\n- **Global (API-level)**: Apply default throttle settings to all methods in an API\n- **Stage-specific**: Override global settings for specific deployment stages\n\nThrottling settings use AWS API Gateway's method-level throttling (`/*/*/throttling/rateLimit` and `/*/*/throttling/burstLimit` paths), which apply globally to all resource paths and HTTP methods in a stage.\n\n## Versioning\n\nLambda functions use Git commit-based versioning:\n- Lambda version description: `<app>-<commit-hash>`\n- Lambda alias name: `<app>-<commit-hash>`\n- API Gateway stage variables: `Commit: <app>-<commit-hash>`\n\nThis allows multiple versions to coexist and enables easy rollback via the `rollback` command or by redeploying a previous commit.\n\n## Architecture\n\n### Key Files\n\n- **src/index.ts**: Main CLI entry point with command routing\n- **src/deploy.ts**: Deployment command implementation\n- **src/rollback.ts**: Rollback command (uses GitHub deployment history)\n- **src/info.ts**: Info command to show current deployments\n- **src/clean.ts**: Clean command to remove unused resources\n- **src/validate.ts**: Configuration validation command\n- **src/types.ts**: TypeScript interfaces for config, results, and CLI options\n- **src/shared/cicd.ts**: Core orchestration logic\n- **src/shared/lambda.ts**: Lambda API wrapper\n- **src/shared/apigw.ts**: API Gateway wrapper\n- **src/shared/sns.ts**: SNS wrapper\n- **src/shared/cloudformation.ts**: CloudFormation wrapper\n- **src/shared/ps.ts**: Parameter Store wrapper\n- **src/shared/config.ts**: Configuration loader\n- **src/shared/options.ts**: CLI option parser\n- **src/shared/github.js**: GitHub Deployments API wrapper\n- **src/shared/plugin.ts** / **plugins.ts** / **plugin-runner.ts**: Plugin system (loader, runner, types)\n- **src/shared/credentials.ts**: AWS credential validation\n- **src/shared/logger.ts**: Logging utility with verbose mode\n- **src/shared/utils.ts**: Sleep/rate limiting utilities\n- **src/shared/header.ts**: CLI header display\n\n### Dependencies\n\n- AWS SDK v3 clients for Lambda, API Gateway, SNS, CloudFormation, SSM, and STS\n- AJV for JSON schema validation\n- GitHub CLI (`gh`) for deployment tracking (optional, used by deploy/rollback)\n- Twilio integration via the optional plugin package [`@abwaters/cicd-plugin-twilio`](https://github.com/abwaters/cicd-plugin-twilio) — install separately and list in `cicd.json` under `\"plugins\"`\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","readmeFilename":"README.md"}