diff --git a/.github/ISSUE_TEMPLATE/other.md b/.github/ISSUE_TEMPLATE/other.md new file mode 100644 index 000000000..bf76de8ea --- /dev/null +++ b/.github/ISSUE_TEMPLATE/other.md @@ -0,0 +1,9 @@ +--- +name: "Other Issues" +about: "Anything else regarding this repository" +title: issue title +--- + +## Description + +A description of the issue, and a proposed resolution. diff --git a/.github/ISSUE_TEMPLATE/tracking-issue.md b/.github/ISSUE_TEMPLATE/tracking-issue.md index be2b2ffa0..d98bfe29f 100644 --- a/.github/ISSUE_TEMPLATE/tracking-issue.md +++ b/.github/ISSUE_TEMPLATE/tracking-issue.md @@ -2,7 +2,7 @@ name: "RFC Tracking Issue" about: "Tracking issue for an RFC" title: proposal title -labels: management/tracking, status/proposed +labels: status/proposed --- ## Description @@ -27,7 +27,7 @@ Short description of the proposed feature. - [ ] Kick off meeting - [ ] RFC pull request submitted (label: `status/review`) - [ ] Community reach out (via Slack and/or Twitter) -- [ ] API signed-off (label `api-approved` applied to pull request) +- [ ] API signed-off (label `status/api-approved` applied to pull request) - [ ] Final comments period (label: `status/final-comments-period`) - [ ] Approved and merged (label: `status/approved`) - [ ] Execution plan submitted (label: `status/planning`) diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml index 61aa60f5f..60c878975 100644 --- a/.github/workflows/pr-lint.yml +++ b/.github/workflows/pr-lint.yml @@ -2,11 +2,6 @@ name: PR Lint on: pull_request: - # don't trigger when RFC table is updated since it comes from a github - # workflow and then this workflow will be blocked (github does not allow two - # workflows to trigger each other) - branches-ignore: - - 'auto/update-rfc-table' workflow_dispatch: {} jobs: diff --git a/.github/workflows/render-table.yml b/.github/workflows/render-table.yml index 41715915f..60cef3b4d 100644 --- a/.github/workflows/render-table.yml +++ b/.github/workflows/render-table.yml @@ -1,30 +1,49 @@ name: Render RFC Table on: issues: - types: [opened,edited,deleted,transferred,assigned,unassigned,labeled,unlabeled] + types: + [ + opened, + edited, + deleted, + transferred, + assigned, + unassigned, + labeled, + unlabeled, + ] workflow_dispatch: {} jobs: render: runs-on: ubuntu-latest + concurrency: + group: update-table + cancel-in-progress: true + permissions: + pull-requests: write steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 with: node-version: 18.x - name: install dependencies - run: | - cd tools/rfc-render - npm install - - name: render table - run: | - node tools/rfc-render/inject-table.js README.md + run: npm --prefix tools/rfc-render ci + - name: render tables env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PROJEN_GITHUB_TOKEN: ${{ secrets.PROJEN_GITHUB_TOKEN }} + run: npm --prefix tools/rfc-render run render:all - name: Create Pull Request - uses: peter-evans/create-pull-request@v3 + id: pr + uses: peter-evans/create-pull-request@v5 with: - token: ${{ secrets.GITHUB_TOKEN }} + token: ${{ secrets.PROJEN_GITHUB_TOKEN }} commit-message: Update RFC table in README title: Update RFC table in README branch: auto/update-rfc-table + labels: auto-approve + - name: Auto approve PR + if: ${{ steps.pr.outputs.pull-request-number }} + uses: hmarr/auto-approve-action@v3 + with: + pull-request-number: ${{ steps.pr.outputs.pull-request-number }} diff --git a/.mergify.yml b/.mergify.yml index ece584bbd..e32fa34a8 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -36,6 +36,11 @@ pull_request_rules: - "#commented-reviews-by=0" - name: remove stale reviews actions: - dismiss_reviews: {} + dismiss_reviews: + approved: true conditions: - - base=master + - author!=aws-cdk-automation + - label!=auto-approve + - base=main + - -merged + - -closed diff --git a/0000-template.md b/0000-template.md index e8beeefa8..f1456b6a9 100644 --- a/0000-template.md +++ b/0000-template.md @@ -38,7 +38,7 @@ --- Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): ``` diff --git a/ACCEPTED.md b/ACCEPTED.md new file mode 100644 index 000000000..77b4263bf --- /dev/null +++ b/ACCEPTED.md @@ -0,0 +1,62 @@ +# Accepted RFCs + +**Jump to**: +[Full list](./FULL_INDEX.md) | +[Accepted](./ACCEPTED.md) | +[Proposed](./PROPOSED.md) | +[Closed](./CLOSED.md) + + +\#|Title|Owner|Status +---|-----|-----|------ +[507](https://github.com/aws/aws-cdk-rfcs/issues/507)|[Full control over VPC and subnet configuration](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0507-subnets)|[@otaviomacedo](https://github.com/otaviomacedo)|👍 approved +[162](https://github.com/aws/aws-cdk-rfcs/issues/162)|[CDK Refactoring Tools](https://github.com/aws/aws-cdk-rfcs/issues/162)||📆 planning +[456](https://github.com/aws/aws-cdk-rfcs/issues/456)|[L2 ElastiCache support](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0456-elasticache-l2.md)||👷 implementing +[473](https://github.com/aws/aws-cdk-rfcs/issues/473)|[EventBridge Pipes L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/473)|[@mrgrain](https://github.com/mrgrain)|👷 implementing +[1](https://github.com/aws/aws-cdk-rfcs/issues/1)|[CDK Watch](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0001-cdk-update.md)||✅ done +[4](https://github.com/aws/aws-cdk-rfcs/issues/4)|[CDK Testing Toolkit](https://github.com/aws/aws-cdk-rfcs/issues/4)|[@nija-at](https://github.com/nija-at)|✅ done +[5](https://github.com/aws/aws-cdk-rfcs/issues/5)|[Security-restricted environments](https://github.com/aws/aws-cdk-rfcs/issues/5)||✅ done +[6](https://github.com/aws/aws-cdk-rfcs/issues/6)|[Monolithic Packaging](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0006-monolothic-packaging.md)||✅ done +[7](https://github.com/aws/aws-cdk-rfcs/issues/7)|[Lambda Bundles](https://github.com/aws/aws-cdk-rfcs/issues/7)||✅ done +[8](https://github.com/aws/aws-cdk-rfcs/issues/8)|[Project Structure Guidelines](https://github.com/aws/aws-cdk-rfcs/issues/8)|[@rix0rrr](https://github.com/rix0rrr)|✅ done +[15](https://github.com/aws/aws-cdk-rfcs/issues/15)|[Scaffolding](https://github.com/aws/aws-cdk-rfcs/issues/15)||✅ done +[16](https://github.com/aws/aws-cdk-rfcs/issues/16)|[RFC Process](https://github.com/aws/aws-cdk-rfcs/pull/53)|[@MrArnoldPalmer](https://github.com/MrArnoldPalmer)|✅ done +[34](https://github.com/aws/aws-cdk-rfcs/issues/34)|[Third-party construct ecosystem](https://github.com/aws/aws-cdk-rfcs/issues/34)||✅ done +[35](https://github.com/aws/aws-cdk-rfcs/issues/35)|[Publish construct library guidelines](https://github.com/aws/aws-cdk-rfcs/issues/35)||✅ done +[36](https://github.com/aws/aws-cdk-rfcs/issues/36)|[Constructs Programming Model](https://github.com/aws/aws-cdk-rfcs/issues/36)||✅ done +[37](https://github.com/aws/aws-cdk-rfcs/issues/37)|[Release from a "release" branch](https://github.com/aws/aws-cdk-rfcs/issues/37)|[@MrArnoldPalmer](https://github.com/MrArnoldPalmer)|✅ done +[49](https://github.com/aws/aws-cdk-rfcs/issues/49)|[CI/CD for CDK apps](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0049-continuous-delivery.md)|[@rix0rrr](https://github.com/rix0rrr)|✅ done +[52](https://github.com/aws/aws-cdk-rfcs/issues/52)|[Support resource import](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0052-resource-importing-support.md)||✅ done +[55](https://github.com/aws/aws-cdk-rfcs/issues/55)|[Feature Flags](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0055-feature-flags.md)||✅ done +[66](https://github.com/aws/aws-cdk-rfcs/issues/66)|[StackSets Support](https://github.com/aws/aws-cdk-rfcs/issues/66)||✅ done +[71](https://github.com/aws/aws-cdk-rfcs/issues/71)|[Deployment Triggers](https://github.com/aws/aws-cdk-rfcs/issues/71)||✅ done +[77](https://github.com/aws/aws-cdk-rfcs/issues/77)|[CloudFormation Registry Support](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0077-import-external-resources.md)||✅ done +[79](https://github.com/aws/aws-cdk-rfcs/issues/79)|[CDK v2.0](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0079-cdk-2.0.md)||✅ done +[92](https://github.com/aws/aws-cdk-rfcs/issues/92)|[CI/CD Asset Publishing](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0092-asset-publishing.md)|[@rix0rrr](https://github.com/rix0rrr)|✅ done +[95](https://github.com/aws/aws-cdk-rfcs/issues/95)|[Cognito Construct Library](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0095-cognito-construct-library)|[@nija-at](https://github.com/nija-at)|✅ done +[107](https://github.com/aws/aws-cdk-rfcs/issues/107)|[Publish a Construct Library Module Lifecycle document](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0107-construct-library-module-lifecycle.md)|[@ccfife](https://github.com/ccfife)|✅ done +[110](https://github.com/aws/aws-cdk-rfcs/issues/110)|[CLI Compatibility Strategy](https://github.com/aws/aws-cdk-rfcs/blob/main/text/00110-cli-framework-compatibility-strategy.md)|[@iliapolo](https://github.com/iliapolo)|✅ done +[116](https://github.com/aws/aws-cdk-rfcs/issues/116)|[Easier identification of experimental modules](https://github.com/aws/aws-cdk-rfcs/issues/116)||✅ done +[171](https://github.com/aws/aws-cdk-rfcs/issues/171)|[CloudFront Module Redesign](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0171-cloudfront-redesign.md)||✅ done +[192](https://github.com/aws/aws-cdk-rfcs/issues/192)|[Removal of the "constructs" compatibility layer (v2.0)](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0192-remove-constructs-compat.md)|[@eladb](https://github.com/eladb)|✅ done +[204](https://github.com/aws/aws-cdk-rfcs/issues/204)|[JSII Go Support](https://github.com/aws/aws-cdk-rfcs/blob/main/text/204-golang-bindings.md)|[@MrArnoldPalmer](https://github.com/MrArnoldPalmer)|✅ done +[249](https://github.com/aws/aws-cdk-rfcs/issues/249)|[Experimental Code in CDK v2](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0249-v2-experiments.expired.md)|[@ericzbeard](https://github.com/ericzbeard)|✅ done +[253](https://github.com/aws/aws-cdk-rfcs/issues/253)|[CDK Metadata v2](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0253-cdk-metadata-v2.md)||✅ done +[282](https://github.com/aws/aws-cdk-rfcs/issues/282)|[CDK Pipelines security posture change approvals](https://github.com/aws/aws-cdk-rfcs/issues/282)||✅ done +[294](https://github.com/aws/aws-cdk-rfcs/issues/294)|[Policy Definition and Enforcement](https://github.com/aws/aws-cdk-rfcs/issues/294)||✅ done +[322](https://github.com/aws/aws-cdk-rfcs/issues/322)|[CDK Pipelines Updated API](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0322-cdk-pipelines-updated-api.md)||✅ done +[324](https://github.com/aws/aws-cdk-rfcs/issues/324)|[Construct Hub](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0324-cdk-construct-hub.md)|[@RomainMuller](https://github.com/RomainMuller)|✅ done +[328](https://github.com/aws/aws-cdk-rfcs/issues/328)|[polyglot assert library](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0328-polyglot-assert.md)|[@nija-at](https://github.com/nija-at)|✅ done +[340](https://github.com/aws/aws-cdk-rfcs/issues/340)|[Kinesis Data Firehose Delivery Stream L2](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0340-firehose-l2.md)|[@BenChaimberg](https://github.com/BenChaimberg)|✅ done +[353](https://github.com/aws/aws-cdk-rfcs/issues/353)|[Constructs for all public CloudFormation resources and modules](https://github.com/aws/aws-cdk-rfcs/blob/main/text/353-cfn-registry-constructs.md)||✅ done +[359](https://github.com/aws/aws-cdk-rfcs/issues/359)|[Construct Hub Deny List](https://github.com/aws/aws-cdk-rfcs/blob/main/text/359-construct-hub-deny-list.md)||✅ done +[374](https://github.com/aws/aws-cdk-rfcs/issues/374)|[The jsii compiler to follow TypeScript versioning](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0374-jsii-ts-version.md)||✅ done +[388](https://github.com/aws/aws-cdk-rfcs/issues/388)|[CLI Banners](https://github.com/aws/aws-cdk-rfcs/issues/388)||✅ done +[436](https://github.com/aws/aws-cdk-rfcs/issues/436)|[Amazon GameLift L2 Constructs](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0436-gamelift-l2.md)||✅ done +[460](https://github.com/aws/aws-cdk-rfcs/issues/460)|[Reduce aws-cdk-lib package size](https://github.com/aws/aws-cdk-rfcs/issues/460)||✅ done +[474](https://github.com/aws/aws-cdk-rfcs/issues/474)|[EventBridge Scheduler L2 Construct](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0474-event-bridge-scheduler-l2.md)||✅ done +[485](https://github.com/aws/aws-cdk-rfcs/issues/485)|[AWS Batch L2](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0485-aws-batch.md)||✅ done +[497](https://github.com/aws/aws-cdk-rfcs/issues/497)|[AWS Glue L2 CDK Construct](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0497-glue-l2-construct.md)|[@TheRealAmazonKendra](https://github.com/TheRealAmazonKendra)|✅ done +[510](https://github.com/aws/aws-cdk-rfcs/issues/510)|[DyanmoDB Global Table L2 Construct](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0510-dynamodb-global-table.md)|[@vinayak-kukreja](https://github.com/vinayak-kukreja)|✅ done +[513](https://github.com/aws/aws-cdk-rfcs/issues/513)|[Application Specific Staging Resources](https://github.com/aws/aws-cdk-rfcs/issues/513)||✅ done + diff --git a/CLOSED.md b/CLOSED.md new file mode 100644 index 000000000..a7dd967ac --- /dev/null +++ b/CLOSED.md @@ -0,0 +1,23 @@ +# Closed RFCs + +**Jump to**: +[Full list](./FULL_INDEX.md) | +[Accepted](./ACCEPTED.md) | +[Proposed](./PROPOSED.md) | +[Closed](./CLOSED.md) + + +\#|Title|Owner|Status +---|-----|-----|------ +[60](https://github.com/aws/aws-cdk-rfcs/issues/60)|[Bazel Build System](https://github.com/aws/aws-cdk-rfcs/pull/61)||👎 rejected +[164](https://github.com/aws/aws-cdk-rfcs/issues/164)|[Construct Library Segments](https://github.com/aws/aws-cdk-rfcs/pull/169)|[@nija-at](https://github.com/nija-at)|👎 rejected +[175](https://github.com/aws/aws-cdk-rfcs/issues/175)|[AppSync Mapping Template Object Model](https://github.com/aws/aws-cdk-rfcs/pull/177)|[@MrArnoldPalmer](https://github.com/MrArnoldPalmer)|👎 rejected +[272](https://github.com/aws/aws-cdk-rfcs/issues/272)|[CI/CD to Cloudfront Deploy](https://github.com/aws/aws-cdk-rfcs/issues/272)||👎 rejected +[27](https://github.com/aws/aws-cdk-rfcs/issues/27)|[200 resource limit tools & guidance](https://github.com/aws/aws-cdk-rfcs/issues/27)||🤷 stale +[67](https://github.com/aws/aws-cdk-rfcs/issues/67)|[Monitoring Packs](https://github.com/aws/aws-cdk-rfcs/issues/67)||🤷 stale +[277](https://github.com/aws/aws-cdk-rfcs/issues/277)|[cdk logs](https://github.com/aws/aws-cdk-rfcs/issues/277)||🤷 stale +[317](https://github.com/aws/aws-cdk-rfcs/issues/317)|[CDK third-party dependencies management](https://github.com/aws/aws-cdk-rfcs/issues/317)||🤷 stale +[380](https://github.com/aws/aws-cdk-rfcs/issues/380)|[Remove Node.js as an installed pre-requisite for the jsii runtime](https://github.com/aws/aws-cdk-rfcs/issues/380)||🤷 stale +[418](https://github.com/aws/aws-cdk-rfcs/issues/418)|[CDK Operator CLI](https://github.com/aws/aws-cdk-rfcs/issues/418)||🤷 stale +[450](https://github.com/aws/aws-cdk-rfcs/issues/450)|[AWS CDK public roadmap](https://github.com/aws/aws-cdk-rfcs/issues/450)||🤷 stale + diff --git a/FULL_INDEX.md b/FULL_INDEX.md new file mode 100644 index 000000000..50793b3a2 --- /dev/null +++ b/FULL_INDEX.md @@ -0,0 +1,172 @@ +# Full index of all RFCs + +**Jump to**: +[Full list](./FULL_INDEX.md) | +[Accepted](./ACCEPTED.md) | +[Proposed](./PROPOSED.md) | +[Closed](./CLOSED.md) + + +\#|Title|Owner|Status +---|-----|-----|------ +[1](https://github.com/aws/aws-cdk-rfcs/issues/1)|[CDK Watch](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0001-cdk-update.md)||✅ done +[4](https://github.com/aws/aws-cdk-rfcs/issues/4)|[CDK Testing Toolkit](https://github.com/aws/aws-cdk-rfcs/issues/4)|[@nija-at](https://github.com/nija-at)|✅ done +[5](https://github.com/aws/aws-cdk-rfcs/issues/5)|[Security-restricted environments](https://github.com/aws/aws-cdk-rfcs/issues/5)||✅ done +[6](https://github.com/aws/aws-cdk-rfcs/issues/6)|[Monolithic Packaging](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0006-monolothic-packaging.md)||✅ done +[7](https://github.com/aws/aws-cdk-rfcs/issues/7)|[Lambda Bundles](https://github.com/aws/aws-cdk-rfcs/issues/7)||✅ done +[8](https://github.com/aws/aws-cdk-rfcs/issues/8)|[Project Structure Guidelines](https://github.com/aws/aws-cdk-rfcs/issues/8)|[@rix0rrr](https://github.com/rix0rrr)|✅ done +[9](https://github.com/aws/aws-cdk-rfcs/issues/9)|[Master developer guide sources in main repo](https://github.com/aws/aws-cdk-rfcs/issues/9)||💡 proposed +[10](https://github.com/aws/aws-cdk-rfcs/issues/10)|[New workshop modules](https://github.com/aws/aws-cdk-rfcs/issues/10)||💡 proposed +[13](https://github.com/aws/aws-cdk-rfcs/issues/13)|[Improvements to Reference docs](https://github.com/aws/aws-cdk-rfcs/issues/13)||💡 proposed +[14](https://github.com/aws/aws-cdk-rfcs/issues/14)|[Toolchain 2.0](https://github.com/aws/aws-cdk-rfcs/issues/14)||💡 proposed +[15](https://github.com/aws/aws-cdk-rfcs/issues/15)|[Scaffolding](https://github.com/aws/aws-cdk-rfcs/issues/15)||✅ done +[16](https://github.com/aws/aws-cdk-rfcs/issues/16)|[RFC Process](https://github.com/aws/aws-cdk-rfcs/pull/53)|[@MrArnoldPalmer](https://github.com/MrArnoldPalmer)|✅ done +[17](https://github.com/aws/aws-cdk-rfcs/issues/17)|[CLI support for multiple-environments](https://github.com/aws/aws-cdk-rfcs/issues/17)||💡 proposed +[18](https://github.com/aws/aws-cdk-rfcs/issues/18)|[Open Context Providers](https://github.com/aws/aws-cdk-rfcs/pull/167)|[@ddneilson](https://github.com/ddneilson)|💡 proposed +[19](https://github.com/aws/aws-cdk-rfcs/issues/19)|[Introspection API](https://github.com/aws/aws-cdk-rfcs/issues/19)||💡 proposed +[20](https://github.com/aws/aws-cdk-rfcs/issues/20)|[Security posture summary](https://github.com/aws/aws-cdk-rfcs/issues/20)||💡 proposed +[22](https://github.com/aws/aws-cdk-rfcs/issues/22)|[Cost calculator](https://github.com/aws/aws-cdk-rfcs/issues/22)||💡 proposed +[23](https://github.com/aws/aws-cdk-rfcs/issues/23)|[Stateful resource support](https://github.com/aws/aws-cdk-rfcs/issues/23)||💡 proposed +[25](https://github.com/aws/aws-cdk-rfcs/issues/25)|[Defaults & configuration policy](https://github.com/aws/aws-cdk-rfcs/issues/25)||💡 proposed +[26](https://github.com/aws/aws-cdk-rfcs/issues/26)|[Monitoring packs](https://github.com/aws/aws-cdk-rfcs/issues/26)||💡 proposed +[27](https://github.com/aws/aws-cdk-rfcs/issues/27)|[200 resource limit tools & guidance](https://github.com/aws/aws-cdk-rfcs/issues/27)||🤷 stale +[30](https://github.com/aws/aws-cdk-rfcs/issues/30)|[Improve synthesized template output](https://github.com/aws/aws-cdk-rfcs/issues/30)||💡 proposed +[31](https://github.com/aws/aws-cdk-rfcs/issues/31)|[Integration tests](https://github.com/aws/aws-cdk-rfcs/issues/31)||💡 proposed +[32](https://github.com/aws/aws-cdk-rfcs/issues/32)|[App-centric operational experience](https://github.com/aws/aws-cdk-rfcs/issues/32)||💡 proposed +[34](https://github.com/aws/aws-cdk-rfcs/issues/34)|[Third-party construct ecosystem](https://github.com/aws/aws-cdk-rfcs/issues/34)||✅ done +[35](https://github.com/aws/aws-cdk-rfcs/issues/35)|[Publish construct library guidelines](https://github.com/aws/aws-cdk-rfcs/issues/35)||✅ done +[36](https://github.com/aws/aws-cdk-rfcs/issues/36)|[Constructs Programming Model](https://github.com/aws/aws-cdk-rfcs/issues/36)||✅ done +[37](https://github.com/aws/aws-cdk-rfcs/issues/37)|[Release from a "release" branch](https://github.com/aws/aws-cdk-rfcs/issues/37)|[@MrArnoldPalmer](https://github.com/MrArnoldPalmer)|✅ done +[39](https://github.com/aws/aws-cdk-rfcs/issues/39)|[Release public artifacts (lambda layers for custom resources, docker images)](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0039-reduce-module-size.md)||💡 proposed +[40](https://github.com/aws/aws-cdk-rfcs/issues/40)|[Stack traces across language boundaries](https://github.com/aws/aws-cdk-rfcs/issues/40)||💡 proposed +[48](https://github.com/aws/aws-cdk-rfcs/issues/48)|[Faster builds](https://github.com/aws/aws-cdk-rfcs/issues/48)||💡 proposed +[49](https://github.com/aws/aws-cdk-rfcs/issues/49)|[CI/CD for CDK apps](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0049-continuous-delivery.md)|[@rix0rrr](https://github.com/rix0rrr)|✅ done +[51](https://github.com/aws/aws-cdk-rfcs/issues/51)|[Standardize security groups](https://github.com/aws/aws-cdk-rfcs/issues/51)||💡 proposed +[52](https://github.com/aws/aws-cdk-rfcs/issues/52)|[Support resource import](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0052-resource-importing-support.md)||✅ done +[55](https://github.com/aws/aws-cdk-rfcs/issues/55)|[Feature Flags](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0055-feature-flags.md)||✅ done +[58](https://github.com/aws/aws-cdk-rfcs/issues/58)|[Improved ergonomics for stack default environment](https://github.com/aws/aws-cdk-rfcs/issues/58)||💡 proposed +[60](https://github.com/aws/aws-cdk-rfcs/issues/60)|[Bazel Build System](https://github.com/aws/aws-cdk-rfcs/pull/61)||👎 rejected +[63](https://github.com/aws/aws-cdk-rfcs/issues/63)|[CDK in Secure Environments](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0063-precreated-roles.md)||💡 proposed +[64](https://github.com/aws/aws-cdk-rfcs/issues/64)|[Garbage Collection for Assets](https://github.com/aws/aws-cdk-rfcs/issues/64)|[@kaizencc](https://github.com/kaizencc)|💡 proposed +[65](https://github.com/aws/aws-cdk-rfcs/issues/65)|[CDK Code Generation from AWS Console](https://github.com/aws/aws-cdk-rfcs/issues/65)||💡 proposed +[66](https://github.com/aws/aws-cdk-rfcs/issues/66)|[StackSets Support](https://github.com/aws/aws-cdk-rfcs/issues/66)||✅ done +[67](https://github.com/aws/aws-cdk-rfcs/issues/67)|[Monitoring Packs](https://github.com/aws/aws-cdk-rfcs/issues/67)||🤷 stale +[69](https://github.com/aws/aws-cdk-rfcs/issues/69)|[One-off "job" Stacks ("auto destruct")](https://github.com/aws/aws-cdk-rfcs/issues/69)||💡 proposed +[70](https://github.com/aws/aws-cdk-rfcs/issues/70)|[Cost Estimation Tools](https://github.com/aws/aws-cdk-rfcs/issues/70)||💡 proposed +[71](https://github.com/aws/aws-cdk-rfcs/issues/71)|[Deployment Triggers](https://github.com/aws/aws-cdk-rfcs/issues/71)||✅ done +[72](https://github.com/aws/aws-cdk-rfcs/issues/72)|[Stack Policy](https://github.com/aws/aws-cdk-rfcs/issues/72)||💡 proposed +[73](https://github.com/aws/aws-cdk-rfcs/issues/73)|[AWS Resource Model](https://github.com/aws/aws-cdk-rfcs/issues/73)||💡 proposed +[74](https://github.com/aws/aws-cdk-rfcs/issues/74)|[Common API for Resources with Web Addresses](https://github.com/aws/aws-cdk-rfcs/issues/74)||💡 proposed +[77](https://github.com/aws/aws-cdk-rfcs/issues/77)|[CloudFormation Registry Support](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0077-import-external-resources.md)||✅ done +[78](https://github.com/aws/aws-cdk-rfcs/issues/78)|[Feature proposal: Workspaces](https://github.com/aws/aws-cdk-rfcs/issues/78)||💡 proposed +[79](https://github.com/aws/aws-cdk-rfcs/issues/79)|[CDK v2.0](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0079-cdk-2.0.md)||✅ done +[81](https://github.com/aws/aws-cdk-rfcs/issues/81)|[AWS Landing Zone CDK pattern request](https://github.com/aws/aws-cdk-rfcs/issues/81)||💡 proposed +[82](https://github.com/aws/aws-cdk-rfcs/issues/82)|[Weak references](https://github.com/aws/aws-cdk-rfcs/issues/82)||💡 proposed +[83](https://github.com/aws/aws-cdk-rfcs/issues/83)|[Global Name Prefix](https://github.com/aws/aws-cdk-rfcs/issues/83)||💡 proposed +[86](https://github.com/aws/aws-cdk-rfcs/issues/86)|[AWS Account Alias Resource](https://github.com/aws/aws-cdk-rfcs/issues/86)||💡 proposed +[92](https://github.com/aws/aws-cdk-rfcs/issues/92)|[CI/CD Asset Publishing](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0092-asset-publishing.md)|[@rix0rrr](https://github.com/rix0rrr)|✅ done +[95](https://github.com/aws/aws-cdk-rfcs/issues/95)|[Cognito Construct Library](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0095-cognito-construct-library)|[@nija-at](https://github.com/nija-at)|✅ done +[107](https://github.com/aws/aws-cdk-rfcs/issues/107)|[Publish a Construct Library Module Lifecycle document](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0107-construct-library-module-lifecycle.md)|[@ccfife](https://github.com/ccfife)|✅ done +[110](https://github.com/aws/aws-cdk-rfcs/issues/110)|[CLI Compatibility Strategy](https://github.com/aws/aws-cdk-rfcs/blob/main/text/00110-cli-framework-compatibility-strategy.md)|[@iliapolo](https://github.com/iliapolo)|✅ done +[116](https://github.com/aws/aws-cdk-rfcs/issues/116)|[Easier identification of experimental modules](https://github.com/aws/aws-cdk-rfcs/issues/116)||✅ done +[127](https://github.com/aws/aws-cdk-rfcs/issues/127)|[CDK to directly reference/import/update an existing stack](https://github.com/aws/aws-cdk-rfcs/issues/127)||💡 proposed +[139](https://github.com/aws/aws-cdk-rfcs/issues/139)|["fromLookup" for additional resources](https://github.com/aws/aws-cdk-rfcs/issues/139)||💡 proposed +[158](https://github.com/aws/aws-cdk-rfcs/issues/158)|[Implement Custom Resources in the AWS Construct Library as CFN Registry Resource Types](https://github.com/aws/aws-cdk-rfcs/pull/170)||💡 proposed +[159](https://github.com/aws/aws-cdk-rfcs/issues/159)|[Cross-App Resource Sharing](https://github.com/aws/aws-cdk-rfcs/issues/159)||💡 proposed +[161](https://github.com/aws/aws-cdk-rfcs/issues/161)|[Cross-Region/Account References](https://github.com/aws/aws-cdk-rfcs/issues/161)||💡 proposed +[162](https://github.com/aws/aws-cdk-rfcs/issues/162)|[CDK Refactoring Tools](https://github.com/aws/aws-cdk-rfcs/issues/162)||📆 planning +[164](https://github.com/aws/aws-cdk-rfcs/issues/164)|[Construct Library Segments](https://github.com/aws/aws-cdk-rfcs/pull/169)|[@nija-at](https://github.com/nija-at)|👎 rejected +[171](https://github.com/aws/aws-cdk-rfcs/issues/171)|[CloudFront Module Redesign](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0171-cloudfront-redesign.md)||✅ done +[175](https://github.com/aws/aws-cdk-rfcs/issues/175)|[AppSync Mapping Template Object Model](https://github.com/aws/aws-cdk-rfcs/pull/177)|[@MrArnoldPalmer](https://github.com/MrArnoldPalmer)|👎 rejected +[180](https://github.com/aws/aws-cdk-rfcs/issues/180)|[CustomResources: Allow usage across accounts](https://github.com/aws/aws-cdk-rfcs/issues/180)||💡 proposed +[192](https://github.com/aws/aws-cdk-rfcs/issues/192)|[Removal of the "constructs" compatibility layer (v2.0)](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0192-remove-constructs-compat.md)|[@eladb](https://github.com/eladb)|✅ done +[193](https://github.com/aws/aws-cdk-rfcs/issues/193)|[Fixing of type unions](https://github.com/aws/aws-cdk-rfcs/pull/194)|[@RomainMuller](https://github.com/RomainMuller)|💡 proposed +[201](https://github.com/aws/aws-cdk-rfcs/issues/201)|[Construct scope relocation](https://github.com/aws/aws-cdk-rfcs/issues/201)||💡 proposed +[204](https://github.com/aws/aws-cdk-rfcs/issues/204)|[JSII Go Support](https://github.com/aws/aws-cdk-rfcs/blob/main/text/204-golang-bindings.md)|[@MrArnoldPalmer](https://github.com/MrArnoldPalmer)|✅ done +[217](https://github.com/aws/aws-cdk-rfcs/issues/217)|[Alternative Infrastructure Providers](https://github.com/aws/aws-cdk-rfcs/issues/217)|[@ccfife](https://github.com/ccfife)|💡 proposed +[219](https://github.com/aws/aws-cdk-rfcs/issues/219)|[ECS Patterns Service Builder](https://github.com/aws/aws-cdk-rfcs/issues/219)||💡 proposed +[223](https://github.com/aws/aws-cdk-rfcs/issues/223)|[Improvements to Lambda Development Experience](https://github.com/aws/aws-cdk-rfcs/issues/223)||💡 proposed +[228](https://github.com/aws/aws-cdk-rfcs/issues/228)|[CDK CLI Triggers](https://github.com/aws/aws-cdk-rfcs/issues/228)||💡 proposed +[229](https://github.com/aws/aws-cdk-rfcs/issues/229)|[Construct library pattern for metrics](https://github.com/aws/aws-cdk-rfcs/issues/229)||💡 proposed +[230](https://github.com/aws/aws-cdk-rfcs/issues/230)|[Construct library pattern for grants](https://github.com/aws/aws-cdk-rfcs/issues/230)||💡 proposed +[231](https://github.com/aws/aws-cdk-rfcs/issues/231)|[Construct library pattern for resources that use a VPC](https://github.com/aws/aws-cdk-rfcs/issues/231)||💡 proposed +[232](https://github.com/aws/aws-cdk-rfcs/issues/232)|[Construct library pattern for resources that need IAM roles](https://github.com/aws/aws-cdk-rfcs/issues/232)||💡 proposed +[242](https://github.com/aws/aws-cdk-rfcs/issues/242)|[Bootstrap stacks as CDK apps](https://github.com/aws/aws-cdk-rfcs/issues/242)||💡 proposed +[244](https://github.com/aws/aws-cdk-rfcs/issues/244)|[Migration path for EKS Developer Preview](https://github.com/aws/aws-cdk-rfcs/pull/245)||💡 proposed +[247](https://github.com/aws/aws-cdk-rfcs/issues/247)|[CDK Common Stored Data Type Model](https://github.com/aws/aws-cdk-rfcs/issues/247)||💡 proposed +[248](https://github.com/aws/aws-cdk-rfcs/issues/248)|[Standardized context key for "cheap mode"](https://github.com/aws/aws-cdk-rfcs/issues/248)||💡 proposed +[249](https://github.com/aws/aws-cdk-rfcs/issues/249)|[Experimental Code in CDK v2](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0249-v2-experiments.expired.md)|[@ericzbeard](https://github.com/ericzbeard)|✅ done +[253](https://github.com/aws/aws-cdk-rfcs/issues/253)|[CDK Metadata v2](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0253-cdk-metadata-v2.md)||✅ done +[256](https://github.com/aws/aws-cdk-rfcs/issues/256)|[ReactCDK: Add JSX/TSX Support](https://github.com/aws/aws-cdk-rfcs/pull/258)||💡 proposed +[272](https://github.com/aws/aws-cdk-rfcs/issues/272)|[CI/CD to Cloudfront Deploy](https://github.com/aws/aws-cdk-rfcs/issues/272)||👎 rejected +[275](https://github.com/aws/aws-cdk-rfcs/issues/275)|[route53-patterns for cross account DNS delegation](https://github.com/aws/aws-cdk-rfcs/issues/275)||💡 proposed +[277](https://github.com/aws/aws-cdk-rfcs/issues/277)|[cdk logs](https://github.com/aws/aws-cdk-rfcs/issues/277)||🤷 stale +[282](https://github.com/aws/aws-cdk-rfcs/issues/282)|[CDK Pipelines security posture change approvals](https://github.com/aws/aws-cdk-rfcs/issues/282)||✅ done +[294](https://github.com/aws/aws-cdk-rfcs/issues/294)|[Policy Definition and Enforcement](https://github.com/aws/aws-cdk-rfcs/issues/294)||✅ done +[300](https://github.com/aws/aws-cdk-rfcs/issues/300)|[Programmatic access of AWS CDK CLI](https://github.com/aws/aws-cdk-rfcs/issues/300)||💡 proposed +[305](https://github.com/aws/aws-cdk-rfcs/issues/305)|[support code signing of assets](https://github.com/aws/aws-cdk-rfcs/issues/305)||💡 proposed +[309](https://github.com/aws/aws-cdk-rfcs/issues/309)|[Parameter Store for cross stack references](https://github.com/aws/aws-cdk-rfcs/issues/309)||💡 proposed +[317](https://github.com/aws/aws-cdk-rfcs/issues/317)|[CDK third-party dependencies management](https://github.com/aws/aws-cdk-rfcs/issues/317)||🤷 stale +[322](https://github.com/aws/aws-cdk-rfcs/issues/322)|[CDK Pipelines Updated API](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0322-cdk-pipelines-updated-api.md)||✅ done +[324](https://github.com/aws/aws-cdk-rfcs/issues/324)|[Construct Hub](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0324-cdk-construct-hub.md)|[@RomainMuller](https://github.com/RomainMuller)|✅ done +[328](https://github.com/aws/aws-cdk-rfcs/issues/328)|[polyglot assert library](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0328-polyglot-assert.md)|[@nija-at](https://github.com/nija-at)|✅ done +[340](https://github.com/aws/aws-cdk-rfcs/issues/340)|[Kinesis Data Firehose Delivery Stream L2](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0340-firehose-l2.md)|[@BenChaimberg](https://github.com/BenChaimberg)|✅ done +[348](https://github.com/aws/aws-cdk-rfcs/issues/348)|[CloudFormationController - refactor CloudFormation stacks](https://github.com/aws/aws-cdk-rfcs/issues/348)||💡 proposed +[353](https://github.com/aws/aws-cdk-rfcs/issues/353)|[Constructs for all public CloudFormation resources and modules](https://github.com/aws/aws-cdk-rfcs/blob/main/text/353-cfn-registry-constructs.md)||✅ done +[359](https://github.com/aws/aws-cdk-rfcs/issues/359)|[Construct Hub Deny List](https://github.com/aws/aws-cdk-rfcs/blob/main/text/359-construct-hub-deny-list.md)||✅ done +[362](https://github.com/aws/aws-cdk-rfcs/issues/362)|[Construct Library for Contributor Insights Rules](https://github.com/aws/aws-cdk-rfcs/issues/362)||✍️ review +[370](https://github.com/aws/aws-cdk-rfcs/issues/370)|[CLI deploy with change set review confirmation](https://github.com/aws/aws-cdk-rfcs/issues/370)||💡 proposed +[374](https://github.com/aws/aws-cdk-rfcs/issues/374)|[The jsii compiler to follow TypeScript versioning](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0374-jsii-ts-version.md)||✅ done +[375](https://github.com/aws/aws-cdk-rfcs/issues/375)|[Support Encode Properties for CloudFormation CustomResource](https://github.com/aws/aws-cdk-rfcs/issues/375)||💡 proposed +[380](https://github.com/aws/aws-cdk-rfcs/issues/380)|[Remove Node.js as an installed pre-requisite for the jsii runtime](https://github.com/aws/aws-cdk-rfcs/issues/380)||🤷 stale +[388](https://github.com/aws/aws-cdk-rfcs/issues/388)|[CLI Banners](https://github.com/aws/aws-cdk-rfcs/issues/388)||✅ done +[394](https://github.com/aws/aws-cdk-rfcs/issues/394)|[WAF v2 L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/394)||💡 proposed +[399](https://github.com/aws/aws-cdk-rfcs/issues/399)|[SSM Document as Objects](https://github.com/aws/aws-cdk-rfcs/issues/399)||💡 proposed +[400](https://github.com/aws/aws-cdk-rfcs/issues/400)|[RUM AppMonitor L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/400)||💡 proposed +[402](https://github.com/aws/aws-cdk-rfcs/issues/402)|[Glue DataBrew L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/402)||💡 proposed +[418](https://github.com/aws/aws-cdk-rfcs/issues/418)|[CDK Operator CLI](https://github.com/aws/aws-cdk-rfcs/issues/418)||🤷 stale +[419](https://github.com/aws/aws-cdk-rfcs/issues/419)|[CDK environment setup for platform/system administrators](https://github.com/aws/aws-cdk-rfcs/issues/419)||✍️ review +[423](https://github.com/aws/aws-cdk-rfcs/issues/423)|[IoT Sitewise L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/423)||💡 proposed +[426](https://github.com/aws/aws-cdk-rfcs/issues/426)|[AppConfig L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/426)||💡 proposed +[428](https://github.com/aws/aws-cdk-rfcs/issues/428)|[Amazon CloudWatch Evidently L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/428)||💡 proposed +[434](https://github.com/aws/aws-cdk-rfcs/issues/434)|[AWS Ground Station L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/434)||💡 proposed +[436](https://github.com/aws/aws-cdk-rfcs/issues/436)|[Amazon GameLift L2 Constructs](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0436-gamelift-l2.md)||✅ done +[437](https://github.com/aws/aws-cdk-rfcs/issues/437)|[CDK post-deployment experience](https://github.com/aws/aws-cdk-rfcs/issues/437)||💡 proposed +[441](https://github.com/aws/aws-cdk-rfcs/issues/441)|[Add Sagemaker endpoint L2 construct](https://github.com/aws/aws-cdk-rfcs/issues/441)||💡 proposed +[446](https://github.com/aws/aws-cdk-rfcs/issues/446)|[Network Firewall L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/446)||💡 proposed +[448](https://github.com/aws/aws-cdk-rfcs/issues/448)|[AWS Compute Optimizer Constructs](https://github.com/aws/aws-cdk-rfcs/issues/448)||💡 proposed +[450](https://github.com/aws/aws-cdk-rfcs/issues/450)|[AWS CDK public roadmap](https://github.com/aws/aws-cdk-rfcs/issues/450)||🤷 stale +[456](https://github.com/aws/aws-cdk-rfcs/issues/456)|[L2 ElastiCache support](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0456-elasticache-l2.md)||👷 implementing +[457](https://github.com/aws/aws-cdk-rfcs/issues/457)|[Create fluent-assertions library to improve consumer test readability](https://github.com/aws/aws-cdk-rfcs/issues/457)||💡 proposed +[458](https://github.com/aws/aws-cdk-rfcs/issues/458)|[Service Catalog ProductStack Asset Support](https://github.com/aws/aws-cdk-rfcs/issues/458)||💡 proposed +[460](https://github.com/aws/aws-cdk-rfcs/issues/460)|[Reduce aws-cdk-lib package size](https://github.com/aws/aws-cdk-rfcs/issues/460)||✅ done +[463](https://github.com/aws/aws-cdk-rfcs/issues/463)|[Glue View L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/463)||💡 proposed +[465](https://github.com/aws/aws-cdk-rfcs/issues/465)|[AWS Organizations L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/465)||💡 proposed +[467](https://github.com/aws/aws-cdk-rfcs/issues/467)|[Add L2 constructs for Amazon FSx Windows](https://github.com/aws/aws-cdk-rfcs/issues/467)||💡 proposed +[469](https://github.com/aws/aws-cdk-rfcs/issues/469)|[AWS Lambda for .NET Support](https://github.com/aws/aws-cdk-rfcs/issues/469)||💡 proposed +[470](https://github.com/aws/aws-cdk-rfcs/issues/470)|[Amazon Aurora Serverless v2 support](https://github.com/aws/aws-cdk-rfcs/issues/470)||💡 proposed +[471](https://github.com/aws/aws-cdk-rfcs/issues/471)|[Amazon Managed Grafana L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/471)||💡 proposed +[473](https://github.com/aws/aws-cdk-rfcs/issues/473)|[EventBridge Pipes L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/473)|[@mrgrain](https://github.com/mrgrain)|👷 implementing +[474](https://github.com/aws/aws-cdk-rfcs/issues/474)|[EventBridge Scheduler L2 Construct](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0474-event-bridge-scheduler-l2.md)||✅ done +[481](https://github.com/aws/aws-cdk-rfcs/issues/481)|[Add L2 constructs for Amazon Redshift Serverless](https://github.com/aws/aws-cdk-rfcs/issues/481)||💡 proposed +[483](https://github.com/aws/aws-cdk-rfcs/issues/483)|[AppFlow L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/483)|[@iliapolo](https://github.com/iliapolo)|💡 proposed +[485](https://github.com/aws/aws-cdk-rfcs/issues/485)|[AWS Batch L2](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0485-aws-batch.md)||✅ done +[487](https://github.com/aws/aws-cdk-rfcs/issues/487)|[New L2 Construct for Step Functions Map State in Distributed Mode](https://github.com/aws/aws-cdk-rfcs/issues/487)||💡 proposed +[489](https://github.com/aws/aws-cdk-rfcs/issues/489)|[Add API to register and execute code before or after CDK App lifecycle events](https://github.com/aws/aws-cdk-rfcs/issues/489)||💡 proposed +[491](https://github.com/aws/aws-cdk-rfcs/issues/491)|[CloudFront Origin Access Control L2](https://github.com/aws/aws-cdk-rfcs/issues/491)||💡 proposed +[492](https://github.com/aws/aws-cdk-rfcs/issues/492)|[Amazon OpenSearch Serverless L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/492)||💡 proposed +[495](https://github.com/aws/aws-cdk-rfcs/issues/495)|[AWS IAM Identity Store L2 construct](https://github.com/aws/aws-cdk-rfcs/issues/495)||💡 proposed +[497](https://github.com/aws/aws-cdk-rfcs/issues/497)|[AWS Glue L2 CDK Construct](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0497-glue-l2-construct.md)|[@TheRealAmazonKendra](https://github.com/TheRealAmazonKendra)|✅ done +[499](https://github.com/aws/aws-cdk-rfcs/issues/499)|[AppConfig L2 Constructs](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0499-appconfig-constructs.md)||💡 proposed +[501](https://github.com/aws/aws-cdk-rfcs/issues/501)|[L2 Constructs for Lattice Service](https://github.com/aws/aws-cdk-rfcs/issues/501)||💡 proposed +[502](https://github.com/aws/aws-cdk-rfcs/issues/502)|[Amazon VPC Lattice L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/502)||⏰ final comments +[507](https://github.com/aws/aws-cdk-rfcs/issues/507)|[Full control over VPC and subnet configuration](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0507-subnets)|[@otaviomacedo](https://github.com/otaviomacedo)|👍 approved +[509](https://github.com/aws/aws-cdk-rfcs/issues/509)|[Add Step Functions SageMaker CreateProcessingJob task construct](https://github.com/aws/aws-cdk-rfcs/issues/509)||💡 proposed +[510](https://github.com/aws/aws-cdk-rfcs/issues/510)|[DyanmoDB Global Table L2 Construct](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0510-dynamodb-global-table.md)|[@vinayak-kukreja](https://github.com/vinayak-kukreja)|✅ done +[512](https://github.com/aws/aws-cdk-rfcs/issues/512)|[Thumbprint L2 Construct for use with IAM OIDC Provider](https://github.com/aws/aws-cdk-rfcs/issues/512)||💡 proposed +[513](https://github.com/aws/aws-cdk-rfcs/issues/513)|[Application Specific Staging Resources](https://github.com/aws/aws-cdk-rfcs/issues/513)||✅ done +[521](https://github.com/aws/aws-cdk-rfcs/issues/521)|[Verified Access L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/521)||💡 proposed +[523](https://github.com/aws/aws-cdk-rfcs/issues/523)|[Construct to create Cedar Policy](https://github.com/aws/aws-cdk-rfcs/issues/523)||💡 proposed +[526](https://github.com/aws/aws-cdk-rfcs/issues/526)|[AppSync Merged API L2 construct](https://github.com/aws/aws-cdk-rfcs/issues/526)||💡 proposed +[528](https://github.com/aws/aws-cdk-rfcs/issues/528)|[Verified Permissions L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/528)||💡 proposed + diff --git a/PROPOSED.md b/PROPOSED.md new file mode 100644 index 000000000..bf0aad4fe --- /dev/null +++ b/PROPOSED.md @@ -0,0 +1,111 @@ +# Proposed RFCs + +**Jump to**: +[Full list](./FULL_INDEX.md) | +[Accepted](./ACCEPTED.md) | +[Proposed](./PROPOSED.md) | +[Closed](./CLOSED.md) + + +\#|Title|Owner|Status +---|-----|-----|------ +[9](https://github.com/aws/aws-cdk-rfcs/issues/9)|[Master developer guide sources in main repo](https://github.com/aws/aws-cdk-rfcs/issues/9)||💡 proposed +[10](https://github.com/aws/aws-cdk-rfcs/issues/10)|[New workshop modules](https://github.com/aws/aws-cdk-rfcs/issues/10)||💡 proposed +[13](https://github.com/aws/aws-cdk-rfcs/issues/13)|[Improvements to Reference docs](https://github.com/aws/aws-cdk-rfcs/issues/13)||💡 proposed +[14](https://github.com/aws/aws-cdk-rfcs/issues/14)|[Toolchain 2.0](https://github.com/aws/aws-cdk-rfcs/issues/14)||💡 proposed +[17](https://github.com/aws/aws-cdk-rfcs/issues/17)|[CLI support for multiple-environments](https://github.com/aws/aws-cdk-rfcs/issues/17)||💡 proposed +[18](https://github.com/aws/aws-cdk-rfcs/issues/18)|[Open Context Providers](https://github.com/aws/aws-cdk-rfcs/pull/167)|[@ddneilson](https://github.com/ddneilson)|💡 proposed +[19](https://github.com/aws/aws-cdk-rfcs/issues/19)|[Introspection API](https://github.com/aws/aws-cdk-rfcs/issues/19)||💡 proposed +[20](https://github.com/aws/aws-cdk-rfcs/issues/20)|[Security posture summary](https://github.com/aws/aws-cdk-rfcs/issues/20)||💡 proposed +[22](https://github.com/aws/aws-cdk-rfcs/issues/22)|[Cost calculator](https://github.com/aws/aws-cdk-rfcs/issues/22)||💡 proposed +[23](https://github.com/aws/aws-cdk-rfcs/issues/23)|[Stateful resource support](https://github.com/aws/aws-cdk-rfcs/issues/23)||💡 proposed +[25](https://github.com/aws/aws-cdk-rfcs/issues/25)|[Defaults & configuration policy](https://github.com/aws/aws-cdk-rfcs/issues/25)||💡 proposed +[26](https://github.com/aws/aws-cdk-rfcs/issues/26)|[Monitoring packs](https://github.com/aws/aws-cdk-rfcs/issues/26)||💡 proposed +[30](https://github.com/aws/aws-cdk-rfcs/issues/30)|[Improve synthesized template output](https://github.com/aws/aws-cdk-rfcs/issues/30)||💡 proposed +[31](https://github.com/aws/aws-cdk-rfcs/issues/31)|[Integration tests](https://github.com/aws/aws-cdk-rfcs/issues/31)||💡 proposed +[32](https://github.com/aws/aws-cdk-rfcs/issues/32)|[App-centric operational experience](https://github.com/aws/aws-cdk-rfcs/issues/32)||💡 proposed +[39](https://github.com/aws/aws-cdk-rfcs/issues/39)|[Release public artifacts (lambda layers for custom resources, docker images)](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0039-reduce-module-size.md)||💡 proposed +[40](https://github.com/aws/aws-cdk-rfcs/issues/40)|[Stack traces across language boundaries](https://github.com/aws/aws-cdk-rfcs/issues/40)||💡 proposed +[48](https://github.com/aws/aws-cdk-rfcs/issues/48)|[Faster builds](https://github.com/aws/aws-cdk-rfcs/issues/48)||💡 proposed +[51](https://github.com/aws/aws-cdk-rfcs/issues/51)|[Standardize security groups](https://github.com/aws/aws-cdk-rfcs/issues/51)||💡 proposed +[58](https://github.com/aws/aws-cdk-rfcs/issues/58)|[Improved ergonomics for stack default environment](https://github.com/aws/aws-cdk-rfcs/issues/58)||💡 proposed +[63](https://github.com/aws/aws-cdk-rfcs/issues/63)|[CDK in Secure Environments](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0063-precreated-roles.md)||💡 proposed +[64](https://github.com/aws/aws-cdk-rfcs/issues/64)|[Garbage Collection for Assets](https://github.com/aws/aws-cdk-rfcs/issues/64)|[@kaizencc](https://github.com/kaizencc)|💡 proposed +[65](https://github.com/aws/aws-cdk-rfcs/issues/65)|[CDK Code Generation from AWS Console](https://github.com/aws/aws-cdk-rfcs/issues/65)||💡 proposed +[69](https://github.com/aws/aws-cdk-rfcs/issues/69)|[One-off "job" Stacks ("auto destruct")](https://github.com/aws/aws-cdk-rfcs/issues/69)||💡 proposed +[70](https://github.com/aws/aws-cdk-rfcs/issues/70)|[Cost Estimation Tools](https://github.com/aws/aws-cdk-rfcs/issues/70)||💡 proposed +[72](https://github.com/aws/aws-cdk-rfcs/issues/72)|[Stack Policy](https://github.com/aws/aws-cdk-rfcs/issues/72)||💡 proposed +[73](https://github.com/aws/aws-cdk-rfcs/issues/73)|[AWS Resource Model](https://github.com/aws/aws-cdk-rfcs/issues/73)||💡 proposed +[74](https://github.com/aws/aws-cdk-rfcs/issues/74)|[Common API for Resources with Web Addresses](https://github.com/aws/aws-cdk-rfcs/issues/74)||💡 proposed +[78](https://github.com/aws/aws-cdk-rfcs/issues/78)|[Feature proposal: Workspaces](https://github.com/aws/aws-cdk-rfcs/issues/78)||💡 proposed +[81](https://github.com/aws/aws-cdk-rfcs/issues/81)|[AWS Landing Zone CDK pattern request](https://github.com/aws/aws-cdk-rfcs/issues/81)||💡 proposed +[82](https://github.com/aws/aws-cdk-rfcs/issues/82)|[Weak references](https://github.com/aws/aws-cdk-rfcs/issues/82)||💡 proposed +[83](https://github.com/aws/aws-cdk-rfcs/issues/83)|[Global Name Prefix](https://github.com/aws/aws-cdk-rfcs/issues/83)||💡 proposed +[86](https://github.com/aws/aws-cdk-rfcs/issues/86)|[AWS Account Alias Resource](https://github.com/aws/aws-cdk-rfcs/issues/86)||💡 proposed +[127](https://github.com/aws/aws-cdk-rfcs/issues/127)|[CDK to directly reference/import/update an existing stack](https://github.com/aws/aws-cdk-rfcs/issues/127)||💡 proposed +[139](https://github.com/aws/aws-cdk-rfcs/issues/139)|["fromLookup" for additional resources](https://github.com/aws/aws-cdk-rfcs/issues/139)||💡 proposed +[158](https://github.com/aws/aws-cdk-rfcs/issues/158)|[Implement Custom Resources in the AWS Construct Library as CFN Registry Resource Types](https://github.com/aws/aws-cdk-rfcs/pull/170)||💡 proposed +[159](https://github.com/aws/aws-cdk-rfcs/issues/159)|[Cross-App Resource Sharing](https://github.com/aws/aws-cdk-rfcs/issues/159)||💡 proposed +[161](https://github.com/aws/aws-cdk-rfcs/issues/161)|[Cross-Region/Account References](https://github.com/aws/aws-cdk-rfcs/issues/161)||💡 proposed +[180](https://github.com/aws/aws-cdk-rfcs/issues/180)|[CustomResources: Allow usage across accounts](https://github.com/aws/aws-cdk-rfcs/issues/180)||💡 proposed +[193](https://github.com/aws/aws-cdk-rfcs/issues/193)|[Fixing of type unions](https://github.com/aws/aws-cdk-rfcs/pull/194)|[@RomainMuller](https://github.com/RomainMuller)|💡 proposed +[201](https://github.com/aws/aws-cdk-rfcs/issues/201)|[Construct scope relocation](https://github.com/aws/aws-cdk-rfcs/issues/201)||💡 proposed +[217](https://github.com/aws/aws-cdk-rfcs/issues/217)|[Alternative Infrastructure Providers](https://github.com/aws/aws-cdk-rfcs/issues/217)|[@ccfife](https://github.com/ccfife)|💡 proposed +[219](https://github.com/aws/aws-cdk-rfcs/issues/219)|[ECS Patterns Service Builder](https://github.com/aws/aws-cdk-rfcs/issues/219)||💡 proposed +[223](https://github.com/aws/aws-cdk-rfcs/issues/223)|[Improvements to Lambda Development Experience](https://github.com/aws/aws-cdk-rfcs/issues/223)||💡 proposed +[228](https://github.com/aws/aws-cdk-rfcs/issues/228)|[CDK CLI Triggers](https://github.com/aws/aws-cdk-rfcs/issues/228)||💡 proposed +[229](https://github.com/aws/aws-cdk-rfcs/issues/229)|[Construct library pattern for metrics](https://github.com/aws/aws-cdk-rfcs/issues/229)||💡 proposed +[230](https://github.com/aws/aws-cdk-rfcs/issues/230)|[Construct library pattern for grants](https://github.com/aws/aws-cdk-rfcs/issues/230)||💡 proposed +[231](https://github.com/aws/aws-cdk-rfcs/issues/231)|[Construct library pattern for resources that use a VPC](https://github.com/aws/aws-cdk-rfcs/issues/231)||💡 proposed +[232](https://github.com/aws/aws-cdk-rfcs/issues/232)|[Construct library pattern for resources that need IAM roles](https://github.com/aws/aws-cdk-rfcs/issues/232)||💡 proposed +[242](https://github.com/aws/aws-cdk-rfcs/issues/242)|[Bootstrap stacks as CDK apps](https://github.com/aws/aws-cdk-rfcs/issues/242)||💡 proposed +[244](https://github.com/aws/aws-cdk-rfcs/issues/244)|[Migration path for EKS Developer Preview](https://github.com/aws/aws-cdk-rfcs/pull/245)||💡 proposed +[247](https://github.com/aws/aws-cdk-rfcs/issues/247)|[CDK Common Stored Data Type Model](https://github.com/aws/aws-cdk-rfcs/issues/247)||💡 proposed +[248](https://github.com/aws/aws-cdk-rfcs/issues/248)|[Standardized context key for "cheap mode"](https://github.com/aws/aws-cdk-rfcs/issues/248)||💡 proposed +[256](https://github.com/aws/aws-cdk-rfcs/issues/256)|[ReactCDK: Add JSX/TSX Support](https://github.com/aws/aws-cdk-rfcs/pull/258)||💡 proposed +[275](https://github.com/aws/aws-cdk-rfcs/issues/275)|[route53-patterns for cross account DNS delegation](https://github.com/aws/aws-cdk-rfcs/issues/275)||💡 proposed +[300](https://github.com/aws/aws-cdk-rfcs/issues/300)|[Programmatic access of AWS CDK CLI](https://github.com/aws/aws-cdk-rfcs/issues/300)||💡 proposed +[305](https://github.com/aws/aws-cdk-rfcs/issues/305)|[support code signing of assets](https://github.com/aws/aws-cdk-rfcs/issues/305)||💡 proposed +[309](https://github.com/aws/aws-cdk-rfcs/issues/309)|[Parameter Store for cross stack references](https://github.com/aws/aws-cdk-rfcs/issues/309)||💡 proposed +[348](https://github.com/aws/aws-cdk-rfcs/issues/348)|[CloudFormationController - refactor CloudFormation stacks](https://github.com/aws/aws-cdk-rfcs/issues/348)||💡 proposed +[370](https://github.com/aws/aws-cdk-rfcs/issues/370)|[CLI deploy with change set review confirmation](https://github.com/aws/aws-cdk-rfcs/issues/370)||💡 proposed +[375](https://github.com/aws/aws-cdk-rfcs/issues/375)|[Support Encode Properties for CloudFormation CustomResource](https://github.com/aws/aws-cdk-rfcs/issues/375)||💡 proposed +[394](https://github.com/aws/aws-cdk-rfcs/issues/394)|[WAF v2 L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/394)||💡 proposed +[399](https://github.com/aws/aws-cdk-rfcs/issues/399)|[SSM Document as Objects](https://github.com/aws/aws-cdk-rfcs/issues/399)||💡 proposed +[400](https://github.com/aws/aws-cdk-rfcs/issues/400)|[RUM AppMonitor L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/400)||💡 proposed +[402](https://github.com/aws/aws-cdk-rfcs/issues/402)|[Glue DataBrew L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/402)||💡 proposed +[423](https://github.com/aws/aws-cdk-rfcs/issues/423)|[IoT Sitewise L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/423)||💡 proposed +[426](https://github.com/aws/aws-cdk-rfcs/issues/426)|[AppConfig L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/426)||💡 proposed +[428](https://github.com/aws/aws-cdk-rfcs/issues/428)|[Amazon CloudWatch Evidently L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/428)||💡 proposed +[434](https://github.com/aws/aws-cdk-rfcs/issues/434)|[AWS Ground Station L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/434)||💡 proposed +[437](https://github.com/aws/aws-cdk-rfcs/issues/437)|[CDK post-deployment experience](https://github.com/aws/aws-cdk-rfcs/issues/437)||💡 proposed +[441](https://github.com/aws/aws-cdk-rfcs/issues/441)|[Add Sagemaker endpoint L2 construct](https://github.com/aws/aws-cdk-rfcs/issues/441)||💡 proposed +[446](https://github.com/aws/aws-cdk-rfcs/issues/446)|[Network Firewall L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/446)||💡 proposed +[448](https://github.com/aws/aws-cdk-rfcs/issues/448)|[AWS Compute Optimizer Constructs](https://github.com/aws/aws-cdk-rfcs/issues/448)||💡 proposed +[457](https://github.com/aws/aws-cdk-rfcs/issues/457)|[Create fluent-assertions library to improve consumer test readability](https://github.com/aws/aws-cdk-rfcs/issues/457)||💡 proposed +[458](https://github.com/aws/aws-cdk-rfcs/issues/458)|[Service Catalog ProductStack Asset Support](https://github.com/aws/aws-cdk-rfcs/issues/458)||💡 proposed +[463](https://github.com/aws/aws-cdk-rfcs/issues/463)|[Glue View L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/463)||💡 proposed +[465](https://github.com/aws/aws-cdk-rfcs/issues/465)|[AWS Organizations L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/465)||💡 proposed +[467](https://github.com/aws/aws-cdk-rfcs/issues/467)|[Add L2 constructs for Amazon FSx Windows](https://github.com/aws/aws-cdk-rfcs/issues/467)||💡 proposed +[469](https://github.com/aws/aws-cdk-rfcs/issues/469)|[AWS Lambda for .NET Support](https://github.com/aws/aws-cdk-rfcs/issues/469)||💡 proposed +[470](https://github.com/aws/aws-cdk-rfcs/issues/470)|[Amazon Aurora Serverless v2 support](https://github.com/aws/aws-cdk-rfcs/issues/470)||💡 proposed +[471](https://github.com/aws/aws-cdk-rfcs/issues/471)|[Amazon Managed Grafana L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/471)||💡 proposed +[481](https://github.com/aws/aws-cdk-rfcs/issues/481)|[Add L2 constructs for Amazon Redshift Serverless](https://github.com/aws/aws-cdk-rfcs/issues/481)||💡 proposed +[483](https://github.com/aws/aws-cdk-rfcs/issues/483)|[AppFlow L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/483)|[@iliapolo](https://github.com/iliapolo)|💡 proposed +[487](https://github.com/aws/aws-cdk-rfcs/issues/487)|[New L2 Construct for Step Functions Map State in Distributed Mode](https://github.com/aws/aws-cdk-rfcs/issues/487)||💡 proposed +[489](https://github.com/aws/aws-cdk-rfcs/issues/489)|[Add API to register and execute code before or after CDK App lifecycle events](https://github.com/aws/aws-cdk-rfcs/issues/489)||💡 proposed +[491](https://github.com/aws/aws-cdk-rfcs/issues/491)|[CloudFront Origin Access Control L2](https://github.com/aws/aws-cdk-rfcs/issues/491)||💡 proposed +[492](https://github.com/aws/aws-cdk-rfcs/issues/492)|[Amazon OpenSearch Serverless L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/492)||💡 proposed +[495](https://github.com/aws/aws-cdk-rfcs/issues/495)|[AWS IAM Identity Store L2 construct](https://github.com/aws/aws-cdk-rfcs/issues/495)||💡 proposed +[499](https://github.com/aws/aws-cdk-rfcs/issues/499)|[AppConfig L2 Constructs](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0499-appconfig-constructs.md)||💡 proposed +[501](https://github.com/aws/aws-cdk-rfcs/issues/501)|[L2 Constructs for Lattice Service](https://github.com/aws/aws-cdk-rfcs/issues/501)||💡 proposed +[509](https://github.com/aws/aws-cdk-rfcs/issues/509)|[Add Step Functions SageMaker CreateProcessingJob task construct](https://github.com/aws/aws-cdk-rfcs/issues/509)||💡 proposed +[512](https://github.com/aws/aws-cdk-rfcs/issues/512)|[Thumbprint L2 Construct for use with IAM OIDC Provider](https://github.com/aws/aws-cdk-rfcs/issues/512)||💡 proposed +[521](https://github.com/aws/aws-cdk-rfcs/issues/521)|[Verified Access L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/521)||💡 proposed +[523](https://github.com/aws/aws-cdk-rfcs/issues/523)|[Construct to create Cedar Policy](https://github.com/aws/aws-cdk-rfcs/issues/523)||💡 proposed +[526](https://github.com/aws/aws-cdk-rfcs/issues/526)|[AppSync Merged API L2 construct](https://github.com/aws/aws-cdk-rfcs/issues/526)||💡 proposed +[528](https://github.com/aws/aws-cdk-rfcs/issues/528)|[Verified Permissions L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/528)||💡 proposed +[362](https://github.com/aws/aws-cdk-rfcs/issues/362)|[Construct Library for Contributor Insights Rules](https://github.com/aws/aws-cdk-rfcs/issues/362)||✍️ review +[419](https://github.com/aws/aws-cdk-rfcs/issues/419)|[CDK environment setup for platform/system administrators](https://github.com/aws/aws-cdk-rfcs/issues/419)||✍️ review +[502](https://github.com/aws/aws-cdk-rfcs/issues/502)|[Amazon VPC Lattice L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/502)||⏰ final comments + diff --git a/README.md b/README.md index f8f62ed14..d387c516c 100644 --- a/README.md +++ b/README.md @@ -9,181 +9,26 @@ future state of the libraries and to discover projects for contribution. **Jump to**: [What is an RFC?](#what-is-an-rfc) | [RFC Process](#rfc-process) | -[RFC Life Cycle](#the-rfc-life-cycle) +[RFC State Diagram](#the-rfc-life-cycle) + +## Current RFCs + +**Jump to**: +[Full list](./FULL_INDEX.md) | +[Accepted](./ACCEPTED.md) | +[Proposed](./PROPOSED.md) | +[Closed](./CLOSED.md) \#|Title|Owner|Status ---|-----|-----|------ -[52](https://github.com/aws/aws-cdk-rfcs/issues/52)|[Support resource import](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0052-resource-importing-support.md)||👷 implementing -[340](https://github.com/aws/aws-cdk-rfcs/issues/340)|[Kinesis Data Firehose Delivery Stream L2](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0340-firehose-l2.md)|[@BenChaimberg](https://github.com/BenChaimberg)|👷 implementing -[431](https://github.com/aws/aws-cdk-rfcs/issues/431)|[SageMaker Model Hosting L2 Constructs](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0431-sagemaker-l2-endpoint.md)||👷 implementing -[456](https://github.com/aws/aws-cdk-rfcs/issues/456)|[L2 ElastiCache support](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0456-elasticache-l2.md)||👷 implementing -[460](https://github.com/aws/aws-cdk-rfcs/issues/460)|[Reduce aws-cdk-lib package size](https://github.com/aws/aws-cdk-rfcs/issues/460)||👷 implementing -[474](https://github.com/aws/aws-cdk-rfcs/issues/474)|[EventBridge Scheduler L2 Construct](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0474-event-bridge-scheduler-l2.md)||👷 implementing -[457](https://github.com/aws/aws-cdk-rfcs/issues/457)|[Create fluent-assertions library to improve consumer test readability](https://github.com/aws/aws-cdk-rfcs/issues/457)||📆 planning -[507](https://github.com/aws/aws-cdk-rfcs/issues/507)|[Full control over VPC and subnet configuration](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0507-subnets)|[@otaviomacedo](https://github.com/otaviomacedo)|👍 approved -[510](https://github.com/aws/aws-cdk-rfcs/issues/510)|[DyanmoDB Global Table L2 Construct](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0510-dynamodb-global-table.md)|[@vinayak-kukreja](https://github.com/vinayak-kukreja)|👍 approved -[8](https://github.com/aws/aws-cdk-rfcs/issues/8)|[Project Structure Guidelines](https://github.com/aws/aws-cdk-rfcs/issues/8)|[@rix0rrr](https://github.com/rix0rrr)|✍️ review -[175](https://github.com/aws/aws-cdk-rfcs/issues/175)|[AppSync Mapping Template Object Model](https://github.com/aws/aws-cdk-rfcs/pull/177)|[@MrArnoldPalmer](https://github.com/MrArnoldPalmer)|✍️ review -[317](https://github.com/aws/aws-cdk-rfcs/issues/317)|[CDK third-party dependencies management](https://github.com/aws/aws-cdk-rfcs/issues/317)||✍️ review +[456](https://github.com/aws/aws-cdk-rfcs/issues/456)|[L2 ElastiCache support](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0456-elasticache-l2.md)||👷 implementing +[473](https://github.com/aws/aws-cdk-rfcs/issues/473)|[EventBridge Pipes L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/473)|[@mrgrain](https://github.com/mrgrain)|👷 implementing +[162](https://github.com/aws/aws-cdk-rfcs/issues/162)|[CDK Refactoring Tools](https://github.com/aws/aws-cdk-rfcs/issues/162)||📆 planning +[507](https://github.com/aws/aws-cdk-rfcs/issues/507)|[Full control over VPC and subnet configuration](https://github.com/aws/aws-cdk-rfcs/blob/main/text/0507-subnets)|[@otaviomacedo](https://github.com/otaviomacedo)|👍 approved +[502](https://github.com/aws/aws-cdk-rfcs/issues/502)|[Amazon VPC Lattice L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/502)||⏰ final comments [362](https://github.com/aws/aws-cdk-rfcs/issues/362)|[Construct Library for Contributor Insights Rules](https://github.com/aws/aws-cdk-rfcs/issues/362)||✍️ review [419](https://github.com/aws/aws-cdk-rfcs/issues/419)|[CDK environment setup for platform/system administrators](https://github.com/aws/aws-cdk-rfcs/issues/419)||✍️ review -[2](https://github.com/aws/aws-cdk-rfcs/issues/2)|[Support for CloudFormation Resource Imports](https://github.com/aws/aws-cdk-rfcs/issues/2)||💡 proposed -[4](https://github.com/aws/aws-cdk-rfcs/issues/4)|[CDK Testing Toolkit](https://github.com/aws/aws-cdk-rfcs/issues/4)|[@nija-at](https://github.com/nija-at)|💡 proposed -[5](https://github.com/aws/aws-cdk-rfcs/issues/5)|[Security-restricted environments](https://github.com/aws/aws-cdk-rfcs/issues/5)||💡 proposed -[9](https://github.com/aws/aws-cdk-rfcs/issues/9)|[Master developer guide sources in main repo](https://github.com/aws/aws-cdk-rfcs/issues/9)||💡 proposed -[10](https://github.com/aws/aws-cdk-rfcs/issues/10)|[New workshop modules](https://github.com/aws/aws-cdk-rfcs/issues/10)||💡 proposed -[13](https://github.com/aws/aws-cdk-rfcs/issues/13)|[Improvements to Reference docs](https://github.com/aws/aws-cdk-rfcs/issues/13)||💡 proposed -[14](https://github.com/aws/aws-cdk-rfcs/issues/14)|[Toolchain 2.0](https://github.com/aws/aws-cdk-rfcs/issues/14)||💡 proposed -[15](https://github.com/aws/aws-cdk-rfcs/issues/15)|[Scaffolding](https://github.com/aws/aws-cdk-rfcs/issues/15)||💡 proposed -[17](https://github.com/aws/aws-cdk-rfcs/issues/17)|[CLI support for multiple-environments](https://github.com/aws/aws-cdk-rfcs/issues/17)||💡 proposed -[18](https://github.com/aws/aws-cdk-rfcs/issues/18)|[Open Context Providers](https://github.com/aws/aws-cdk-rfcs/pull/167)|[@ddneilson](https://github.com/ddneilson)|💡 proposed -[19](https://github.com/aws/aws-cdk-rfcs/issues/19)|[Introspection API](https://github.com/aws/aws-cdk-rfcs/issues/19)||💡 proposed -[20](https://github.com/aws/aws-cdk-rfcs/issues/20)|[Security posture summary](https://github.com/aws/aws-cdk-rfcs/issues/20)||💡 proposed -[21](https://github.com/aws/aws-cdk-rfcs/issues/21)|[CDK Explorer Roadmap](https://github.com/aws/aws-cdk-rfcs/issues/21)||💡 proposed -[22](https://github.com/aws/aws-cdk-rfcs/issues/22)|[Cost calculator](https://github.com/aws/aws-cdk-rfcs/issues/22)||💡 proposed -[23](https://github.com/aws/aws-cdk-rfcs/issues/23)|[Stateful resource support](https://github.com/aws/aws-cdk-rfcs/issues/23)||💡 proposed -[24](https://github.com/aws/aws-cdk-rfcs/issues/24)|[Resource imports](https://github.com/aws/aws-cdk-rfcs/issues/24)||💡 proposed -[25](https://github.com/aws/aws-cdk-rfcs/issues/25)|[Defaults & configuration policy](https://github.com/aws/aws-cdk-rfcs/issues/25)||💡 proposed -[26](https://github.com/aws/aws-cdk-rfcs/issues/26)|[Monitoring packs](https://github.com/aws/aws-cdk-rfcs/issues/26)||💡 proposed -[27](https://github.com/aws/aws-cdk-rfcs/issues/27)|[200 resource limit tools & guidance](https://github.com/aws/aws-cdk-rfcs/issues/27)||💡 proposed -[30](https://github.com/aws/aws-cdk-rfcs/issues/30)|[Improve synthesized template output](https://github.com/aws/aws-cdk-rfcs/issues/30)||💡 proposed -[31](https://github.com/aws/aws-cdk-rfcs/issues/31)|[Integration tests](https://github.com/aws/aws-cdk-rfcs/issues/31)||💡 proposed -[32](https://github.com/aws/aws-cdk-rfcs/issues/32)|[App-centric operational experience](https://github.com/aws/aws-cdk-rfcs/issues/32)||💡 proposed -[39](https://github.com/aws/aws-cdk-rfcs/issues/39)|[Release public artifacts (lambda layers for custom resources, docker images)](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0039-reduce-module-size.md)||💡 proposed -[40](https://github.com/aws/aws-cdk-rfcs/issues/40)|[Stack traces across language boundaries](https://github.com/aws/aws-cdk-rfcs/issues/40)||💡 proposed -[48](https://github.com/aws/aws-cdk-rfcs/issues/48)|[Faster builds](https://github.com/aws/aws-cdk-rfcs/issues/48)||💡 proposed -[51](https://github.com/aws/aws-cdk-rfcs/issues/51)|[Standardize security groups](https://github.com/aws/aws-cdk-rfcs/issues/51)||💡 proposed -[58](https://github.com/aws/aws-cdk-rfcs/issues/58)|[Improved ergonomics for stack default environment](https://github.com/aws/aws-cdk-rfcs/issues/58)||💡 proposed -[63](https://github.com/aws/aws-cdk-rfcs/issues/63)|[CDK in Secure Environments](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0063-precreated-roles.md)||💡 proposed -[64](https://github.com/aws/aws-cdk-rfcs/issues/64)|[Garbage Collection for Assets](https://github.com/aws/aws-cdk-rfcs/issues/64)|[@kaizencc](https://github.com/kaizencc)|💡 proposed -[65](https://github.com/aws/aws-cdk-rfcs/issues/65)|[CDK Code Generation from AWS Console](https://github.com/aws/aws-cdk-rfcs/issues/65)||💡 proposed -[66](https://github.com/aws/aws-cdk-rfcs/issues/66)|[StackSets Support](https://github.com/aws/aws-cdk-rfcs/issues/66)||💡 proposed -[67](https://github.com/aws/aws-cdk-rfcs/issues/67)|[Monitoring Packs](https://github.com/aws/aws-cdk-rfcs/issues/67)||💡 proposed -[69](https://github.com/aws/aws-cdk-rfcs/issues/69)|[One-off "job" Stacks ("auto destruct")](https://github.com/aws/aws-cdk-rfcs/issues/69)||💡 proposed -[70](https://github.com/aws/aws-cdk-rfcs/issues/70)|[Cost Estimation Tools](https://github.com/aws/aws-cdk-rfcs/issues/70)||💡 proposed -[72](https://github.com/aws/aws-cdk-rfcs/issues/72)|[Stack Policy](https://github.com/aws/aws-cdk-rfcs/issues/72)||💡 proposed -[73](https://github.com/aws/aws-cdk-rfcs/issues/73)|[AWS Resource Model](https://github.com/aws/aws-cdk-rfcs/issues/73)||💡 proposed -[74](https://github.com/aws/aws-cdk-rfcs/issues/74)|[Common API for Resources with Web Addresses](https://github.com/aws/aws-cdk-rfcs/issues/74)||💡 proposed -[78](https://github.com/aws/aws-cdk-rfcs/issues/78)|[Feature proposal: Workspaces](https://github.com/aws/aws-cdk-rfcs/issues/78)||💡 proposed -[81](https://github.com/aws/aws-cdk-rfcs/issues/81)|[AWS Landing Zone CDK pattern request](https://github.com/aws/aws-cdk-rfcs/issues/81)||💡 proposed -[82](https://github.com/aws/aws-cdk-rfcs/issues/82)|[Weak references](https://github.com/aws/aws-cdk-rfcs/issues/82)||💡 proposed -[83](https://github.com/aws/aws-cdk-rfcs/issues/83)|[Global Name Prefix](https://github.com/aws/aws-cdk-rfcs/issues/83)||💡 proposed -[86](https://github.com/aws/aws-cdk-rfcs/issues/86)|[AWS Account Alias Resource](https://github.com/aws/aws-cdk-rfcs/issues/86)||💡 proposed -[127](https://github.com/aws/aws-cdk-rfcs/issues/127)|[CDK to directly reference/import/update an existing stack](https://github.com/aws/aws-cdk-rfcs/issues/127)||💡 proposed -[139](https://github.com/aws/aws-cdk-rfcs/issues/139)|["fromLookup" for additional resources](https://github.com/aws/aws-cdk-rfcs/issues/139)||💡 proposed -[158](https://github.com/aws/aws-cdk-rfcs/issues/158)|[Implement Custom Resources in the AWS Construct Library as CFN Registry Resource Types](https://github.com/aws/aws-cdk-rfcs/pull/170)||💡 proposed -[159](https://github.com/aws/aws-cdk-rfcs/issues/159)|[Cross-App Resource Sharing](https://github.com/aws/aws-cdk-rfcs/issues/159)||💡 proposed -[161](https://github.com/aws/aws-cdk-rfcs/issues/161)|[Cross-Region/Account References](https://github.com/aws/aws-cdk-rfcs/issues/161)||💡 proposed -[162](https://github.com/aws/aws-cdk-rfcs/issues/162)|[CDK Refactoring Tools](https://github.com/aws/aws-cdk-rfcs/issues/162)||💡 proposed -[180](https://github.com/aws/aws-cdk-rfcs/issues/180)|[CustomResources: Allow usage across accounts](https://github.com/aws/aws-cdk-rfcs/issues/180)||💡 proposed -[193](https://github.com/aws/aws-cdk-rfcs/issues/193)|[Fixing of type unions](https://github.com/aws/aws-cdk-rfcs/pull/194)|[@RomainMuller](https://github.com/RomainMuller)|💡 proposed -[201](https://github.com/aws/aws-cdk-rfcs/issues/201)|[Construct scope relocation](https://github.com/aws/aws-cdk-rfcs/issues/201)||💡 proposed -[217](https://github.com/aws/aws-cdk-rfcs/issues/217)|[Alternative Infrastructure Providers](https://github.com/aws/aws-cdk-rfcs/issues/217)|[@ccfife](https://github.com/ccfife)|💡 proposed -[219](https://github.com/aws/aws-cdk-rfcs/issues/219)|[ECS Patterns Service Builder](https://github.com/aws/aws-cdk-rfcs/issues/219)||💡 proposed -[223](https://github.com/aws/aws-cdk-rfcs/issues/223)|[Improvements to Lambda Development Experience](https://github.com/aws/aws-cdk-rfcs/issues/223)||💡 proposed -[228](https://github.com/aws/aws-cdk-rfcs/issues/228)|[CDK CLI Triggers](https://github.com/aws/aws-cdk-rfcs/issues/228)||💡 proposed -[229](https://github.com/aws/aws-cdk-rfcs/issues/229)|[Construct library pattern for metrics](https://github.com/aws/aws-cdk-rfcs/issues/229)||💡 proposed -[230](https://github.com/aws/aws-cdk-rfcs/issues/230)|[Construct library pattern for grants](https://github.com/aws/aws-cdk-rfcs/issues/230)||💡 proposed -[231](https://github.com/aws/aws-cdk-rfcs/issues/231)|[Construct library pattern for resources that use a VPC](https://github.com/aws/aws-cdk-rfcs/issues/231)||💡 proposed -[232](https://github.com/aws/aws-cdk-rfcs/issues/232)|[Construct library pattern for resources that need IAM roles](https://github.com/aws/aws-cdk-rfcs/issues/232)||💡 proposed -[242](https://github.com/aws/aws-cdk-rfcs/issues/242)|[Bootstrap stacks as CDK apps](https://github.com/aws/aws-cdk-rfcs/issues/242)||💡 proposed -[244](https://github.com/aws/aws-cdk-rfcs/issues/244)|[Migration path for EKS Developer Preview](https://github.com/aws/aws-cdk-rfcs/pull/245)||💡 proposed -[247](https://github.com/aws/aws-cdk-rfcs/issues/247)|[CDK Common Stored Data Type Model](https://github.com/aws/aws-cdk-rfcs/issues/247)||💡 proposed -[248](https://github.com/aws/aws-cdk-rfcs/issues/248)|[Standardized context key for "cheap mode"](https://github.com/aws/aws-cdk-rfcs/issues/248)||💡 proposed -[256](https://github.com/aws/aws-cdk-rfcs/issues/256)|[ReactCDK: Add JSX/TSX Support](https://github.com/aws/aws-cdk-rfcs/pull/258)||💡 proposed -[275](https://github.com/aws/aws-cdk-rfcs/issues/275)|[route53-patterns for cross account DNS delegation](https://github.com/aws/aws-cdk-rfcs/issues/275)||💡 proposed -[277](https://github.com/aws/aws-cdk-rfcs/issues/277)|[cdk logs](https://github.com/aws/aws-cdk-rfcs/issues/277)||💡 proposed -[294](https://github.com/aws/aws-cdk-rfcs/issues/294)|[Policy Definition and Enforcement](https://github.com/aws/aws-cdk-rfcs/issues/294)||💡 proposed -[300](https://github.com/aws/aws-cdk-rfcs/issues/300)|[Programmatic access of AWS CDK CLI](https://github.com/aws/aws-cdk-rfcs/issues/300)||💡 proposed -[305](https://github.com/aws/aws-cdk-rfcs/issues/305)|[support code signing of assets](https://github.com/aws/aws-cdk-rfcs/issues/305)||💡 proposed -[309](https://github.com/aws/aws-cdk-rfcs/issues/309)|[Parameter Store for cross stack references](https://github.com/aws/aws-cdk-rfcs/issues/309)||💡 proposed -[313](https://github.com/aws/aws-cdk-rfcs/issues/313)|[Questions on the Go Bindings RFC](https://github.com/aws/aws-cdk-rfcs/issues/313)||💡 proposed -[348](https://github.com/aws/aws-cdk-rfcs/issues/348)|[CloudFormationController - refactor CloudFormation stacks](https://github.com/aws/aws-cdk-rfcs/issues/348)||💡 proposed -[370](https://github.com/aws/aws-cdk-rfcs/issues/370)|[CLI deploy with change set review confirmation](https://github.com/aws/aws-cdk-rfcs/issues/370)||💡 proposed -[375](https://github.com/aws/aws-cdk-rfcs/issues/375)|[Support Encode Properties for CloudFormation CustomResource](https://github.com/aws/aws-cdk-rfcs/issues/375)||💡 proposed -[380](https://github.com/aws/aws-cdk-rfcs/issues/380)|[Remove Node.js as an installed pre-requisite for the jsii runtime](https://github.com/aws/aws-cdk-rfcs/issues/380)||💡 proposed -[394](https://github.com/aws/aws-cdk-rfcs/issues/394)|[WAF v2 L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/394)||💡 proposed -[399](https://github.com/aws/aws-cdk-rfcs/issues/399)|[SSM Document as Objects](https://github.com/aws/aws-cdk-rfcs/issues/399)||💡 proposed -[400](https://github.com/aws/aws-cdk-rfcs/issues/400)|[RUM AppMonitor L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/400)||💡 proposed -[402](https://github.com/aws/aws-cdk-rfcs/issues/402)|[Glue DataBrew L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/402)||💡 proposed -[418](https://github.com/aws/aws-cdk-rfcs/issues/418)|[CDK Operator CLI](https://github.com/aws/aws-cdk-rfcs/issues/418)||💡 proposed -[423](https://github.com/aws/aws-cdk-rfcs/issues/423)|[IoT Sitewise L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/423)||💡 proposed -[426](https://github.com/aws/aws-cdk-rfcs/issues/426)|[AppConfig L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/426)||💡 proposed -[428](https://github.com/aws/aws-cdk-rfcs/issues/428)|[Amazon CloudWatch Evidently L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/428)||💡 proposed -[434](https://github.com/aws/aws-cdk-rfcs/issues/434)|[AWS Ground Station L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/434)||💡 proposed -[437](https://github.com/aws/aws-cdk-rfcs/issues/437)|[CDK post-deployment experience](https://github.com/aws/aws-cdk-rfcs/issues/437)||💡 proposed -[441](https://github.com/aws/aws-cdk-rfcs/issues/441)|[Add Sagemaker endpoint L2 construct](https://github.com/aws/aws-cdk-rfcs/issues/441)||💡 proposed -[446](https://github.com/aws/aws-cdk-rfcs/issues/446)|[Network Firewall L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/446)||💡 proposed -[448](https://github.com/aws/aws-cdk-rfcs/issues/448)|[AWS Compute Optimizer Constructs](https://github.com/aws/aws-cdk-rfcs/issues/448)||💡 proposed -[450](https://github.com/aws/aws-cdk-rfcs/issues/450)|[AWS CDK public roadmap](https://github.com/aws/aws-cdk-rfcs/issues/450)||💡 proposed -[458](https://github.com/aws/aws-cdk-rfcs/issues/458)|[Service Catalog ProductStack Asset Support](https://github.com/aws/aws-cdk-rfcs/issues/458)||💡 proposed -[463](https://github.com/aws/aws-cdk-rfcs/issues/463)|[Glue View L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/463)||💡 proposed -[465](https://github.com/aws/aws-cdk-rfcs/issues/465)|[AWS Organizations L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/465)||💡 proposed -[467](https://github.com/aws/aws-cdk-rfcs/issues/467)|[Add L2 constructs for Amaxon FSx Windows](https://github.com/aws/aws-cdk-rfcs/issues/467)||💡 proposed -[469](https://github.com/aws/aws-cdk-rfcs/issues/469)|[AWS Lambda for .NET Support](https://github.com/aws/aws-cdk-rfcs/issues/469)||💡 proposed -[470](https://github.com/aws/aws-cdk-rfcs/issues/470)|[Amazon Aurora Serverless v2 support](https://github.com/aws/aws-cdk-rfcs/issues/470)||💡 proposed -[471](https://github.com/aws/aws-cdk-rfcs/issues/471)|[Amazon Managed Grafana L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/471)||💡 proposed -[473](https://github.com/aws/aws-cdk-rfcs/issues/473)|[EventBridge Pipes L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/473)|[@mrgrain](https://github.com/mrgrain)|💡 proposed -[481](https://github.com/aws/aws-cdk-rfcs/issues/481)|[Add L2 constructs for Amazon Redshift Serverless](https://github.com/aws/aws-cdk-rfcs/issues/481)||💡 proposed -[483](https://github.com/aws/aws-cdk-rfcs/issues/483)|[AppFlow L2 Constructs](https://github.com/aws/aws-cdk-rfcs/issues/483)|[@iliapolo](https://github.com/iliapolo)|💡 proposed -[487](https://github.com/aws/aws-cdk-rfcs/issues/487)|[New L2 Construct for Step Functions Map State in Distributed Mode](https://github.com/aws/aws-cdk-rfcs/issues/487)||💡 proposed -[489](https://github.com/aws/aws-cdk-rfcs/issues/489)|[Add API to register and execute code before or after CDK App lifecycle events](https://github.com/aws/aws-cdk-rfcs/issues/489)||💡 proposed -[491](https://github.com/aws/aws-cdk-rfcs/issues/491)|[CloudFront Origin Access Control L2](https://github.com/aws/aws-cdk-rfcs/issues/491)||💡 proposed -[492](https://github.com/aws/aws-cdk-rfcs/issues/492)|[Amazon OpenSearch Serverless L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/492)||💡 proposed -[495](https://github.com/aws/aws-cdk-rfcs/issues/495)|[AWS IAM Identity Store L2 construct](https://github.com/aws/aws-cdk-rfcs/issues/495)||💡 proposed -[497](https://github.com/aws/aws-cdk-rfcs/issues/497)|[AWS Glue L2 CDK Construct](https://github.com/aws/aws-cdk-rfcs/issues/497)|[@TheRealAmazonKendra](https://github.com/TheRealAmazonKendra)|💡 proposed -[499](https://github.com/aws/aws-cdk-rfcs/issues/499)|[AppConfig L2 Constructs](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0499-appconfig-constructs.md)||💡 proposed -[501](https://github.com/aws/aws-cdk-rfcs/issues/501)|[L2 Constructs for Lattice Service](https://github.com/aws/aws-cdk-rfcs/issues/501)||💡 proposed -[502](https://github.com/aws/aws-cdk-rfcs/issues/502)|[Amazon VPC Lattice L2 Construct](https://github.com/aws/aws-cdk-rfcs/issues/502)||💡 proposed -[509](https://github.com/aws/aws-cdk-rfcs/issues/509)|[Add Step Functions SageMaker CreateProcessingJob task construct](https://github.com/aws/aws-cdk-rfcs/issues/509)||💡 proposed -[512](https://github.com/aws/aws-cdk-rfcs/issues/512)|[Thumbprint L2 Construct for use with IAM OIDC Provider](https://github.com/aws/aws-cdk-rfcs/issues/512)||💡 proposed -[513](https://github.com/aws/aws-cdk-rfcs/issues/513)|[Application Specific Staging Resources](https://github.com/aws/aws-cdk-rfcs/issues/513)||💡 proposed -[521](https://github.com/aws/aws-cdk-rfcs/issues/521)|[Verified Access L2 Contructs.](https://github.com/aws/aws-cdk-rfcs/issues/521)||💡 proposed -[523](https://github.com/aws/aws-cdk-rfcs/issues/523)|[Construct to create Cedar Policy](https://github.com/aws/aws-cdk-rfcs/issues/523)||💡 proposed -[526](https://github.com/aws/aws-cdk-rfcs/issues/526)|[AppSync Merged API L2 construct](https://github.com/aws/aws-cdk-rfcs/issues/526)||💡 proposed -[528](https://github.com/aws/aws-cdk-rfcs/issues/528)|[Verified Permissions L2 Contructs](https://github.com/aws/aws-cdk-rfcs/issues/528)||💡 proposed -[530](https://github.com/aws/aws-cdk-rfcs/issues/530)|[RFC Pipeline does not run Linting automatically..](https://github.com/aws/aws-cdk-rfcs/issues/530)||💡 proposed -[1](https://github.com/aws/aws-cdk-rfcs/issues/1)|[CDK Watch](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0001-cdk-update.md)||✅ done -[6](https://github.com/aws/aws-cdk-rfcs/issues/6)|[Monolithic Packaging](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0006-monolothic-packaging.md)||✅ done -[7](https://github.com/aws/aws-cdk-rfcs/issues/7)|[Lambda Bundles](https://github.com/aws/aws-cdk-rfcs/issues/7)||✅ done -[16](https://github.com/aws/aws-cdk-rfcs/issues/16)|[RFC Process](https://github.com/aws/aws-cdk-rfcs/pull/53)|[@MrArnoldPalmer](https://github.com/MrArnoldPalmer)|✅ done -[34](https://github.com/aws/aws-cdk-rfcs/issues/34)|[Third-party construct ecosystem](https://github.com/aws/aws-cdk-rfcs/issues/34)||✅ done -[35](https://github.com/aws/aws-cdk-rfcs/issues/35)|[Publish construct library guidelines](https://github.com/aws/aws-cdk-rfcs/issues/35)||✅ done -[36](https://github.com/aws/aws-cdk-rfcs/issues/36)|[Constructs Programming Model](https://github.com/aws/aws-cdk-rfcs/issues/36)||✅ done -[37](https://github.com/aws/aws-cdk-rfcs/issues/37)|[Release from a "release" branch](https://github.com/aws/aws-cdk-rfcs/issues/37)|[@MrArnoldPalmer](https://github.com/MrArnoldPalmer)|✅ done -[49](https://github.com/aws/aws-cdk-rfcs/issues/49)|[CI/CD for CDK apps](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0049-continuous-delivery.md)|[@rix0rrr](https://github.com/rix0rrr)|✅ done -[55](https://github.com/aws/aws-cdk-rfcs/issues/55)|[Feature Flags](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0055-feature-flags.md)||✅ done -[71](https://github.com/aws/aws-cdk-rfcs/issues/71)|[Deployment Triggers](https://github.com/aws/aws-cdk-rfcs/issues/71)||✅ done -[79](https://github.com/aws/aws-cdk-rfcs/issues/79)|[CDK v2.0](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0079-cdk-2.0.md)||✅ done -[92](https://github.com/aws/aws-cdk-rfcs/issues/92)|[CI/CD Asset Publishing](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0092-asset-publishing.md)|[@rix0rrr](https://github.com/rix0rrr)|✅ done -[95](https://github.com/aws/aws-cdk-rfcs/issues/95)|[Cognito Construct Library](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0095-cognito-construct-library)|[@nija-at](https://github.com/nija-at)|✅ done -[107](https://github.com/aws/aws-cdk-rfcs/issues/107)|[Publish a Construct Library Module Lifecycle document](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0107-construct-library-module-lifecycle.md)|[@ccfife](https://github.com/ccfife)|✅ done -[110](https://github.com/aws/aws-cdk-rfcs/issues/110)|[CLI Compatibility Strategy](https://github.com/aws/aws-cdk-rfcs/blob/master/text/00110-cli-framework-compatibility-strategy.md)|[@iliapolo](https://github.com/iliapolo)|✅ done -[116](https://github.com/aws/aws-cdk-rfcs/issues/116)|[Easier identification of experimental modules](https://github.com/aws/aws-cdk-rfcs/issues/116)||✅ done -[171](https://github.com/aws/aws-cdk-rfcs/issues/171)|[CloudFront Module Redesign](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0171-cloudfront-redesign.md)||✅ done -[192](https://github.com/aws/aws-cdk-rfcs/issues/192)|[Removal of the "constructs" compatibility layer (v2.0)](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0192-remove-constructs-compat.md)|[@eladb](https://github.com/eladb)|✅ done -[204](https://github.com/aws/aws-cdk-rfcs/issues/204)|[JSII Go Support](https://github.com/aws/aws-cdk-rfcs/blob/master/text/204-golang-bindings.md)|[@MrArnoldPalmer](https://github.com/MrArnoldPalmer)|✅ done -[249](https://github.com/aws/aws-cdk-rfcs/issues/249)|[Experimental Code in CDK v2](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0249-v2-experiments.expired.md)|[@ericzbeard](https://github.com/ericzbeard)|✅ done -[253](https://github.com/aws/aws-cdk-rfcs/issues/253)|[CDK Metadata v2](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0253-cdk-metadata-v2.md)||✅ done -[282](https://github.com/aws/aws-cdk-rfcs/issues/282)|[CDK Pipelines security posture change approvals](https://github.com/aws/aws-cdk-rfcs/issues/282)||✅ done -[287](https://github.com/aws/aws-cdk-rfcs/issues/287)|[Deprecated API Warnings](https://github.com/aws/aws-cdk-rfcs/blob/master/text/287-cli-deprecation-warnings.md)||✅ done -[308](https://github.com/aws/aws-cdk-rfcs/issues/308)|[CLI notices](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0308-cli-advisories.md)||✅ done -[322](https://github.com/aws/aws-cdk-rfcs/issues/322)|[CDK Pipelines Updated API](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0322-cdk-pipelines-updated-api.md)||✅ done -[324](https://github.com/aws/aws-cdk-rfcs/issues/324)|[Construct Hub](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0324-cdk-construct-hub.md)|[@RomainMuller](https://github.com/RomainMuller)|✅ done -[328](https://github.com/aws/aws-cdk-rfcs/issues/328)|[polyglot assert library](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0328-polyglot-assert.md)|[@nija-at](https://github.com/nija-at)|✅ done -[353](https://github.com/aws/aws-cdk-rfcs/issues/353)|[Constructs for all public CloudFormation resources and modules](https://github.com/aws/aws-cdk-rfcs/blob/master/text/353-cfn-registry-constructs.md)||✅ done -[359](https://github.com/aws/aws-cdk-rfcs/issues/359)|[Construct Hub Deny List](https://github.com/aws/aws-cdk-rfcs/blob/master/text/359-construct-hub-deny-list.md)||✅ done -[374](https://github.com/aws/aws-cdk-rfcs/issues/374)|[The jsii compiler to follow TypeScript versioning](https://github.com/aws/aws-cdk-rfcs/issues/374)||✅ done -[388](https://github.com/aws/aws-cdk-rfcs/issues/388)|[CLI Banners](https://github.com/aws/aws-cdk-rfcs/issues/388)||✅ done -[477](https://github.com/aws/aws-cdk-rfcs/issues/477)|[Add policy validation to CDK](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0477-policy-validation.md)|[@otaviomacedo](https://github.com/otaviomacedo)|✅ done -[60](https://github.com/aws/aws-cdk-rfcs/issues/60)|[Bazel Build System](https://github.com/aws/aws-cdk-rfcs/pull/61)||👎 rejected -[164](https://github.com/aws/aws-cdk-rfcs/issues/164)|[Construct Library Segments](https://github.com/aws/aws-cdk-rfcs/pull/169)|[@nija-at](https://github.com/nija-at)|👎 rejected -[272](https://github.com/aws/aws-cdk-rfcs/issues/272)|[CI/CD to Cloudfront Deploy](https://github.com/aws/aws-cdk-rfcs/issues/272)||👎 rejected -[77](https://github.com/aws/aws-cdk-rfcs/issues/77)|[CloudFormation Registry Support](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0077-import-external-resources.md)||❓unknown -[436](https://github.com/aws/aws-cdk-rfcs/issues/436)|[Amazon GameLift L2 Constructs](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0436-gamelift-l2.md)||❓unknown -[485](https://github.com/aws/aws-cdk-rfcs/issues/485)|[AWS Batch L2](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0485-aws-batch.md)||❓unknown -[527](https://github.com/aws/aws-cdk-rfcs/issues/527)|[Thanks for this context. If more options are likely to added, I'd prefer to see this as an enum like class instead of an actual enum so that it's more extensible if options or props need to be added to potential auth types.](https://github.com/aws/aws-cdk-rfcs/issues/527)||❓unknown ## What is an RFC? @@ -320,6 +165,7 @@ mistakes using a linter. To get early feedback while you are writing, use the [VSCode > markdownlint extensions](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint), > or run the `./lint.sh` script in the root of the repository. +> Run `./lint.sh --fix` auto fix all fixable violations. ### 5. Feedback @@ -359,7 +205,7 @@ Before you can merge your RFC, you will need the API Bar Raiser to sign-off on the public API of your feature. This is will normally be described under the **Working Backwards** section of your RFC. -To sign-off, the API bar raiser will add the **api-approved** label to the RFC +To sign-off, the API bar raiser will add the **status/api-approved** label to the RFC pull request. Once the API was signed-off, update your RFC document and add a `[x]` the @@ -418,7 +264,7 @@ digraph states { review [label = "In Review"]; fcp [label = "Final Comment Period"]; approved [label = "Approved"]; - plannning [label = "Planning"]; + planning [label = "Planning"]; implementing [label = "Implementing"]; done [label = "Done"]; rejected [label = "Rejected"]; @@ -431,8 +277,8 @@ digraph states { fcp -> review [label = "revision requested"]; fcp -> approved [label = "pull request approved and merged"]; fcp -> rejected [label = "rfc rejected"]; - approved -> plannning [label = "pull request with implementation plan created"]; - plannning -> implementing [label = "rfc with implementation plan approved and merged"]; + approved -> planning [label = "pull request with implementation plan created"]; + planning -> implementing [label = "rfc with implementation plan approved and merged"]; implementing -> done [label = "implementation completed"]; } --> @@ -448,12 +294,14 @@ digraph states { 4. **Approved** - The RFC PR is approved and merged to `master`, and the RFC is now ready to be implemented. 5. **Planning** - A PR is created with the **Implementation Plan** section of the RFC. -6. **Implementing** - Implemetation plan is approved and merged and the RFC is actively +6. **Implementing** - Implementation plan is approved and merged and the RFC is actively being implemented. 7. **Done** - Implementation is complete and merged across appropriate repositories. 8. **Rejected** - During the review period, the RFC may be rejected and then it will be marked as such. +9. **Stale** - The RFC did not get any significant enough progress or tracking and has become stale. + We welcome a re-submission with substantial enough changes to overcome the original issues. --- diff --git a/lint.sh b/lint.sh index 28a7b1e22..c36821d20 100755 --- a/lint.sh +++ b/lint.sh @@ -6,4 +6,5 @@ scriptdir=$(cd $(dirname $0) && pwd) linters=$PWD/tools/linters (cd $linters && npm ci) -$linters/node_modules/.bin/markdownlint . --ignore node_modules --ignore tools +cliargs="--ignore node_modules --ignore tools ${@:1}" +$linters/node_modules/.bin/markdownlint . $cliargs diff --git a/text/00110-cli-framework-compatibility-strategy.md b/text/00110-cli-framework-compatibility-strategy.md index d3ba3d525..9ce7884f0 100644 --- a/text/00110-cli-framework-compatibility-strategy.md +++ b/text/00110-cli-framework-compatibility-strategy.md @@ -79,7 +79,7 @@ introducing breaking changes (cx-protocol version bump), are not very good: manifest upgrade. This is also something we need to **remember**. There are also some quirky implementation details, in -[`versioning.ts`](https://github.com/aws/aws-cdk/blob/master/packages/@aws-cdk/cx-api/lib/versioning.ts): +[`versioning.ts`](https://github.com/aws/aws-cdk/blob/main/packages/@aws-cdk/cx-api/lib/versioning.ts): ```typescript const toolkitVersion = parseSemver(CLOUD_ASSEMBLY_VERSION); @@ -107,7 +107,7 @@ if (semver.lt(frameworkVersion, toolkitVersion)) { This code (and comments) is contradictory to our current compatibility model, where we actually attempt to support two way compatibility. To facilitate this, we added the -[`upgradeAssemblyManifest`](https://github.com/aws/aws-cdk/blob/master/packages/@aws-cdk/cx-api/lib/versioning.ts#L60) +[`upgradeAssemblyManifest`](https://github.com/aws/aws-cdk/blob/main/packages/@aws-cdk/cx-api/lib/versioning.ts#L60) function. Thats not to say that what we currently have can't work. But the fact that we @@ -364,10 +364,10 @@ used to create it. To actually validate this behavior, we add a unit test for the `exec.ts` file. -### Step 3: Remove [`versioning.ts`](https://github.com/aws/aws-cdk/blob/master/packages/@aws-cdk/cx-api/lib/versioning.ts) +### Step 3: Remove [`versioning.ts`](https://github.com/aws/aws-cdk/blob/main/packages/@aws-cdk/cx-api/lib/versioning.ts) Given all the above steps, we don't need the functionality provided by -[`versioning.ts`](https://github.com/aws/aws-cdk/blob/master/packages/@aws-cdk/cx-api/lib/versioning.ts). +[`versioning.ts`](https://github.com/aws/aws-cdk/blob/main/packages/@aws-cdk/cx-api/lib/versioning.ts). Lets dive deep into why is that exactly. #### Schema Evolution @@ -386,7 +386,7 @@ This enables the CLI to essentially not be aware of any schema version expect for the last one. This is done in the -[`upgradeAssemblyManifest`](https://github.com/aws/aws-cdk/blob/master/packages/@aws-cdk/cx-api/lib/versioning.ts#L60) +[`upgradeAssemblyManifest`](https://github.com/aws/aws-cdk/blob/main/packages/@aws-cdk/cx-api/lib/versioning.ts#L60) function. We stipulate that this is no longer needed. The compatibility checks will make @@ -411,7 +411,7 @@ This brings us to the next item. #### Compatibility Validation This is done in the -[`verifyManifestVersion`](https://github.com/aws/aws-cdk/blob/master/packages/@aws-cdk/cx-api/lib/versioning.ts#L39) +[`verifyManifestVersion`](https://github.com/aws/aws-cdk/blob/main/packages/@aws-cdk/cx-api/lib/versioning.ts#L39) function, and contains two validations: 1. **Framework cannot be bigger than CLI.** @@ -517,7 +517,7 @@ This is a concrete example on how things can break when we introduce changes to the _cx-api_. 1. Rename `target` in - [`ContainerImageAssetMetadataEntry`](https://github.com/aws/aws-cdk/blob/master/packages/@aws-cdk/cx-api/lib/assets.ts#L74) + [`ContainerImageAssetMetadataEntry`](https://github.com/aws/aws-cdk/blob/main/packages/@aws-cdk/cx-api/lib/assets.ts#L74) to `buildTarget`. 2. Perform necessary changes in CLI and fix all relevant tests. diff --git a/text/0039-reduce-module-size.md b/text/0039-reduce-module-size.md index f5ea75384..8cc5ae70e 100644 --- a/text/0039-reduce-module-size.md +++ b/text/0039-reduce-module-size.md @@ -75,7 +75,7 @@ Repeat the same for `lambda-layer-kubectl`, and `lambda-layer-node-proxy-agent`. --- Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): - [x] Signed-off by API Bar Raiser diff --git a/text/0049-continuous-delivery.md b/text/0049-continuous-delivery.md index bf9c0243e..2fc92aad6 100644 --- a/text/0049-continuous-delivery.md +++ b/text/0049-continuous-delivery.md @@ -118,7 +118,7 @@ bootstrap => source => build => synthesis => mutate => publish => deploy 3. **build + synthesis**: compiles the CDK app code into an executable program (user-defined) and invokes the compiled executable through `cdk synth` to produce a - [cloud assembly](https://github.com/aws/aws-cdk/blob/master/design/cloud-assembly.md) + [cloud assembly](https://github.com/aws/aws-cdk/blob/main/design/cloud-assembly.md) from the app. The cloud assembly includes a CloudFormation template for each stack and asset sources (docker images, s3 files, etc) that must be packaged and published to the asset store in each environment that consumes them. diff --git a/text/0052-resource-importing-support.md b/text/0052-resource-importing-support.md index 2048b2796..45378dbe5 100644 --- a/text/0052-resource-importing-support.md +++ b/text/0052-resource-importing-support.md @@ -119,7 +119,7 @@ error, propagates it back to the user. --- Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): ``` diff --git a/text/0055-feature-flags.md b/text/0055-feature-flags.md index b1fb3c5ec..066e308ae 100644 --- a/text/0055-feature-flags.md +++ b/text/0055-feature-flags.md @@ -182,14 +182,14 @@ contribution guide and will involve the following steps: - If the feature is being tracked in a single issue without an RFC, approval should be indicated in this issue. 2. Define a new const under - [cx-api/lib/features.ts](https://github.com/aws/aws-cdk/blob/master/packages/%40aws-cdk/cx-api/lib/features.ts) + [cx-api/lib/features.ts](https://github.com/aws/aws-cdk/blob/main/packages/%40aws-cdk/cx-api/lib/features.ts) with the name of the context key that **enables** this new feature (for example, `ENABLE_STACK_NAME_DUPLICATES`). The context key should be in the form `module.Type:feature` (e.g. `@aws-cdk/core:enableStackNameDuplicates`). 3. Use `node.tryGetContext(cxapi.ENABLE_XXX)` to check if this feature is enabled in your code. If it is not defined, revert to the legacy behavior. 4. Add your feature flag to - [cx-api/lib/future.ts](https://github.com/aws/aws-cdk/blob/master/packages/%40aws-cdk/cx-api/lib/future.ts). + [cx-api/lib/future.ts](https://github.com/aws/aws-cdk/blob/main/packages/%40aws-cdk/cx-api/lib/future.ts). This map is inserted to generated `cdk.json` files for new projects created through `cdk init`. 5. In your PR title (which goes into CHANGELOG), add a `(behind feature flag)` diff --git a/text/0063-precreated-roles.md b/text/0063-precreated-roles.md index 87a89cd6c..1fb290352 100644 --- a/text/0063-precreated-roles.md +++ b/text/0063-precreated-roles.md @@ -109,7 +109,7 @@ single role has all the required permissions. --- Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): ``` diff --git a/text/0079-cdk-2.0.md b/text/0079-cdk-2.0.md index 278646f25..c2abaeda7 100644 --- a/text/0079-cdk-2.0.md +++ b/text/0079-cdk-2.0.md @@ -253,8 +253,8 @@ There are some packages that both the CLI and the framework depend on: This means we cannot move these packages under `aws-cdk-lib`, as they need to consumable by the CLI. The simplest approach would be to keep publishing them as is, and have the framework and CLI continue to declare a dependency on them. -However, since [@aws-cdk/cx-api](https://github.com/aws/aws-cdk/blob/master/packages/@aws-cdk/core/lib/stage.ts#L186) -and [@aws-cdk/cloud-assembly-schema](https://github.com/aws/aws-cdk/blob/master/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/shared/base-load-balancer.ts#L99) +However, since [@aws-cdk/cx-api](https://github.com/aws/aws-cdk/blob/main/packages/@aws-cdk/core/lib/stage.ts#L186) +and [@aws-cdk/cloud-assembly-schema](https://github.com/aws/aws-cdk/blob/main/packages/@aws-cdk/aws-elasticloadbalancingv2/lib/shared/base-load-balancer.ts#L99) are exposed in the public API of `aws-cdk-lib`, this would require `aws-cdk-lib` to take a `peerDependency` on them, which we cannot afford. The approach we take here is as follows: diff --git a/text/0095-cognito-construct-library/working-backwards-readme.md b/text/0095-cognito-construct-library/working-backwards-readme.md index bbe3373cb..64473e7c4 100644 --- a/text/0095-cognito-construct-library/working-backwards-readme.md +++ b/text/0095-cognito-construct-library/working-backwards-readme.md @@ -321,7 +321,7 @@ to read more about user pool workflows using lambda triggers, and details around each trigger. Check out the -[documentation](https://github.com/aws/aws-cdk/blob/master/packages/%40aws-cdk/aws-cognito/lib/user-pool.ts#L148) +[documentation](https://github.com/aws/aws-cdk/blob/main/packages/%40aws-cdk/aws-cognito/lib/user-pool.ts#L148) to find the list of triggers supported by the CDK. Code sample: diff --git a/text/0192-remove-constructs-compat.md b/text/0192-remove-constructs-compat.md index f7440c8cb..444d99edf 100644 --- a/text/0192-remove-constructs-compat.md +++ b/text/0192-remove-constructs-compat.md @@ -450,7 +450,7 @@ on the `constructs` library. See the RFC for [monolithic packaging] for more details. [monolithic packaging]: - https://github.com/aws/aws-cdk-rfcs/blob/master/text/0006-monolothic-packaging.md + https://github.com/aws/aws-cdk-rfcs/blob/main/text/0006-monolothic-packaging.md ## Design @@ -798,7 +798,7 @@ The prepare hook was used in the CDK in a few cases: The first two use cases have already been addressed by centralizing the "prepare" logic at the stage level (into -[prepare-app.ts](https://github.com/aws/aws-cdk/blob/master/packages/%40aws-cdk/core/lib/private/prepare-app.ts)). +[prepare-app.ts](https://github.com/aws/aws-cdk/blob/main/packages/%40aws-cdk/core/lib/private/prepare-app.ts)). #### What can we do on 1.x for 06-NO-PREPARE @@ -818,7 +818,7 @@ The reason this is not available at the base class is because the abstraction did not "hold water" as the AWS CDK evolved and new CDKs emerged. In the AWS CDK, we eventually ended up with a centralized synthesis logic at the `Stage`-level -([synthesis.ts](https://github.com/aws/aws-cdk/blob/master/packages/%40aws-cdk/core/lib/private/synthesis.ts)). +([synthesis.ts](https://github.com/aws/aws-cdk/blob/main/packages/%40aws-cdk/core/lib/private/synthesis.ts)). The main reason was that we needed to "break" the recursion in various domain-specific points (e.g. stages, nested stacks) which meant that the generic logic of "traverse the entire tree and call `synthesize`" did not hold. In @@ -1089,7 +1089,7 @@ for constructs 10.x. - [x] Change `addDependency` to accept `IDependable` instead of `IConstruct`. - [x] Return only local dependencies in `node.dependencies` - [ ] Migrate - [DependencyGraph](https://github.com/awslabs/cdk8s/blob/master/packages/cdk8s/src/dependency.ts) + [DependencyGraph](https://github.com/awslabs/cdk8s/blob/main/packages/cdk8s/src/dependency.ts) from cdk8s into `constructs`. - [04-STACK-ROOT](#04-stack-root) - N/A diff --git a/text/0249-v2-experiments.expired.md b/text/0249-v2-experiments.expired.md index 708894852..9fced0747 100644 --- a/text/0249-v2-experiments.expired.md +++ b/text/0249-v2-experiments.expired.md @@ -7,7 +7,7 @@ rfc pr: https://github.com/aws/aws-cdk-rfcs/pull/250 # Summary **⚠️ NOTE:** This RFC is expired and has been superceded by -. +. This document is retained for historical context. --- diff --git a/text/0249-v2-experiments.md b/text/0249-v2-experiments.md index 29ecd94a0..eb5e0c5f6 100644 --- a/text/0249-v2-experiments.md +++ b/text/0249-v2-experiments.md @@ -361,5 +361,5 @@ These are the goals of this RFC, in order from most to least important: ### Appendix B: Previous RFC This is the second version of this RFC. A previous version was reviewed and approved, and can be found here: -. +. The original version is more implementation- and trade-off focused, whereas this RFC focused on the working-backwards artifacts. diff --git a/text/0253-cdk-metadata-v2.md b/text/0253-cdk-metadata-v2.md index 678ebb542..3948aaa0d 100644 --- a/text/0253-cdk-metadata-v2.md +++ b/text/0253-cdk-metadata-v2.md @@ -138,7 +138,7 @@ constructs, authored and vended by AWS. We decided against an open system, instead preferring to have a specific allow-list of packages (or package prefixes) we are going to report on. For example, the current list looks like this and can be found -[here](https://github.com/aws/aws-cdk/blob/master/packages/@aws-cdk/core/lib/private/runtime-info.ts): +[here](https://github.com/aws/aws-cdk/blob/main/packages/@aws-cdk/core/lib/private/runtime-info.ts): ```ts const ALLOWLIST_SCOPES = ['@aws-cdk', '@aws-solutions-konstruk', '@aws-solutions-constructs', '@amzn']; diff --git a/text/0264-registry-schema-codegen.md b/text/0264-registry-schema-codegen.md index 589ad25ec..547be0ec4 100644 --- a/text/0264-registry-schema-codegen.md +++ b/text/0264-registry-schema-codegen.md @@ -202,11 +202,11 @@ it. For example, useful information we can get from cfn-lint: -* [OnlyOne](https://github.com/aws-cloudformation/cfn-python-lint/blob/master/src/cfnlint/data/AdditionalSpecs/OnlyOne.json), +* [OnlyOne](https://github.com/aws-cloudformation/cfn-python-lint/blob/main/src/cfnlint/data/AdditionalSpecs/OnlyOne.json), mutually exclusive properties in a structure. -* [Inclusive](https://github.com/aws-cloudformation/cfn-python-lint/blob/master/src/cfnlint/data/AdditionalSpecs/Inclusive.json), +* [Inclusive](https://github.com/aws-cloudformation/cfn-python-lint/blob/main/src/cfnlint/data/AdditionalSpecs/Inclusive.json), a set of property dependencies. -* [Exclusive](https://github.com/aws-cloudformation/cfn-python-lint/blob/master/src/cfnlint/data/AdditionalSpecs/Exclusive.json), +* [Exclusive](https://github.com/aws-cloudformation/cfn-python-lint/blob/main/src/cfnlint/data/AdditionalSpecs/Exclusive.json), properties that preclude each other. Etc. diff --git a/text/0328-polyglot-assert.md b/text/0328-polyglot-assert.md index 5c7dea193..e3ae62cef 100644 --- a/text/0328-polyglot-assert.md +++ b/text/0328-polyglot-assert.md @@ -232,9 +232,9 @@ import { assertions } from 'aws-cdk-lib'; ``` Read more about `aws-cdk-lib` at - and about the + and about the CDK module lifecycle at -. +. ## Internal FAQ diff --git a/text/0340-firehose-l2.md b/text/0340-firehose-l2.md index d07ea69e5..ac0954c2a 100644 --- a/text/0340-firehose-l2.md +++ b/text/0340-firehose-l2.md @@ -655,7 +655,7 @@ For non-AWS service destinations, use `HttpDestination`. --- Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): - [X] Signed-off by API Bar Raiser @rix0rrr diff --git a/text/0374-jsii-ts-version.md b/text/0374-jsii-ts-version.md new file mode 100644 index 000000000..854a32d87 --- /dev/null +++ b/text/0374-jsii-ts-version.md @@ -0,0 +1,658 @@ +# The `jsii` compiler (and `jsii-rosetta`) to follow TypeScript versioning + +* **Original Author(s)**: @RomainMuller +* **Tracking Issue**: #374 + +This RFC proposes to change the versioning scheme of the `jsii` compiler and +`jsii-rosetta` to stop conforming to [semantic versioning][semver], and instead +use the `major.minor` version of the [TypeScript] compiler it is built on. + +Other packages (such as `jsii-pacmak`, `@jsii/spec`, ...) are not affected by +this proposal and will continue to conform to [semantic versioning][semver]. In +particular, code generated by `jsii-pamcak` will continue to use the `1.x` +release line of `@jsii/kernel`, `@jsii/runtime`, and the languages' runtime +libraries, so as to remain completely backwards compatible. + +## Working Backwards + +### Release Notes entry + +```markdown +Starting with this release, all packages in the *jsii* toolchain that internally +use the [TypeScript] compiler (i.e: `jsii` and `jsii-rosetta`) will be released +on a new release line that uses the same `major.minor` number as the +[TypeScript] compiler they are built against. All other packages (such as +`@jsii/spec`, `jsii-pacmak`, etc...) will continue to be released against the +same `1.x` release line they are currently released in. + +The [TypeScript] compiler does not conform to [semantic versioning][semver]), +and instead guarantees the absence of breaking changes within a given +`major.minor` release line. We recommend developers model their dependencies on +`jsii` and `jsii-rosetta` using a minor-pinned version range (e.g: `~4.9.0`) in +order to avoid new [TypeScript] language versions breaking their codebases at +undesirable times. + +New features will be introduced only in the *latest* `major.minor` release line +of `jsii` and `jsii-rosetta` (typically corresponding to the current stable +release of the [TypeScript] compiler). Breaking changes may be introduced with +every new `major.minor` release line and will continue to be documented in the +CHANGELOG. + +Users may need to modify their code when upgrading from one `major.minor` release +line to another (addressing [TypeScript] language evolutions and `jsii` feature +evolutions). While upgrading to the latest release line of `jsii` helps minimize +the effort required for these updates, the release strategy allows developers to +do so on their own schedule. + +This change is made to allow developers to benefit from the latest and greatest +features of the [TypeScript] language without requiring the entire ecosystem to +make the switch at the same time. + +BREAKING CHANGE: In order to allow developers to use the latest & greatest +features of TypeScript, the `jsii` compiler and `jsii-rosetta` are now made +in-line with those of the `typescript` compiler (e.g: `jsii@4.9.x` is built on +TypeScript 4.9.x). Since the TypeScript compiler does not follow semantic +versioning, we strongly recommend you upgrade your `devDependency` on `jsii` and +`jsii-rosetta` to use a tilde range (e.g: `~4.9.0`) to be able to control when +you migrate to future [TypeScript] language versions. New `jsii` and +`jsii-rosetta` features will only be introduced in the _latest_ release line, +while older release lines only receive bug fixes until they are declared +end-of-life. +``` + +### `README.md` for the `jsii` compiler + +````md +In order to allow developers to access and leverage the latest and greatest of +*TypeScript* language features, `jsii` compiler releases follow the `typescript` +package releases. For example, `jsii` version `4.3.x` is built on top of version +`4.3.x` of the `typescript` compiler. + +Going forward, new `jsii` compiler features will only be introduced in the +_latest_ available release line (corresponding to the latest TypeScript +version), while older release lines will only receive bug fixes until they reach +end-of-life. + +> IMPORTANT: The `typescript` package does not follow semantic versioning. +> Minor releases of the `typescript` compiler almost always include syntax +> breaking changes together with new language features. Since `jsii` releases in +> line with `typescript` minor lines, `jsii` does not adhere to semantic +> versioning either. + +The `jsii` release notes for the initial release on each new *major.minor* line +will include a link to the corresponding TypeScript release notes entry, and a +description of any `jsii` breaking changes that may have been introduced with +the release. + +When setting up a `jsii` project, we recommend pinning the dependency on the +`jsii` compiler to the desired minor version line (which corresponds to the +`typescript` release line), using a `~` SemVer range: + +```js +{ + // ... + "devDependencies": { + // ... + "jsii": "~4.9.0", + // ... + }, + // ... +} +``` +```` + +### `README.md` for the `jsii-rosetta` package + +````md +In order to allow developers to access and leverage the latest and greatest of +*TypeScript* language features, `jsii-rosetta` releases follow the `typescript` +package releases. For example, `jsii-rosetta` version `4.9.x` is built on top of +version `4.9.x` of the `typescript` compiler. + +Going forward, new `jsii-rosetta` features will only be introduced in the +_latest_ available release line (corresponding to the latest TypeScript +version), while older release lines will only receive bug fixes until they reach +end-of-life. + +> IMPORTANT: The `typescript` package does not follow semantic versioning. +> Minor releases of the `typescript` compiler almost always include syntax +> breaking changes together with new language features. Since `jsii-rosetta` +> releases in line with `typescript` minor lines, `jsii-rosetta` does not adhere +> to semantic versioning either. + +The `jsii-rosetta` release notes for the initial release on each new +*major.minor* line will include a link to the corresponding TypeScript release +notes entry, and a description of any `jsii` breaking changes that may have been +introduced with the release. + +When using `jsii-rosetta` in a project, we recommend pinning the dependency on +`jsii-rosetta` to the desired minor version line (which corresponds to the +`typescript` release line), using a `~` SemVer range: + +```js +{ + // ... + "devDependencies": { + // ... + "jsii-rosetta": "~4.9.0", + // ... + }, + // ... +} +``` +```` + +## Public FAQ + +> This section should include answers to questions readers will likely ask about +> this release. Similar to the "working backwards", this section should be +> written in a language as if the feature is now released. +> +> The template includes a some common questions, feel free to add any questions +> that might be relevant to this feature or omit questions that you feel are not +> applicable. + +### What are we launching today? + +We are announcing a change in versioning strategy for the `jsii` compiler and +`jsii-rosetta`. Starting today, new releases of the `jsii` and `jsii-rosetta` +packages will use the same `major.minor` version as the [TypeScript] compiler +they are built on. Other packages in the jsii toolchain (`jsii-pacmak`, +`@jsii/spec`, ...) are unaffected by this change. + +Since the [TypeScript] compiler does not conform to [SemVer], future releases of +the `jsii` compiler will not conform to [SemVer] either. In line with the +[TypeScript] compiler versioning scheme, breaking changes may be introduced in +any new release that updates the `major` or `minor` version, but **not** when +only the `patch` level changed. + +This change enables `jsii` users to benefit from the latest and greatest +features introduced in the [TypeScript] language as well as from performance +improvements and bug fixes introduced in recent versions of [TypeScript], +without requiring the entire ecosystem to update compiler versions at the same +time. + +### Why should I use this feature? + +The new `jsii` versioning strategy gives developers more control over the +[TypeScript] language version they are developing, without forcing an update +schedule on them. + +Developers are free to decide when it is appropriate for them to upgrade their +`jsii` dependency to a new `major.minor` version line, bringing in new +[TypeScript] language features as well as performance improvements and bug +fixes. + +### Do I need to use the same `jsii` version as my dependencies? + +The `jsii` compiler makes the due dilligence to ensure the artifacts produced +(in particular, the `.d.ts` declarations files and the `.jsii` assemblies) +remain compatible with previous versions, so that consumers of libraries need +not update at the same time as their dependencies. + +### What happens to `jsii` v1? + +Version `1.0.0` of the `jsii` compiler was released over two years ago (in +February 2020), and will transition to the *Maintenance* tier of the +[AWS SDKs and Tools maintenance policy][aws-policy] 6 months after this release. + +During this initial 6 months period, `jsii` will continue to receive full +support, including bug fixes and feature support, as it has in the past two +years. + +Once it enters the *Maintenance* tier, it will only receive fixes for critical +bugs and security issues. The `v1` release line will remain in *Maintenace* for +12 months, after which it will transition into the *End-of-Life* tier. + +### What is the support policy for these new releases? + +Starting with release `4.9.0`, new features will only be added to the *current* +release line (the *latest* `major.minor` stream), which corresponds to the +currently active [TypeScript] release line. + +Critical bug fixes and security patches will be provided for previous release +lines for 12 months, which covers 3 or 4 previous lines. Features will not be +back-ported to non-current release lines. + +Previous release lines will be considered *end-of-life* 12 months after they +were superceded by a new *current* line. + +Below is a chart of what this would have looked like if this proposal was +enacted ahead of TypeScript 4.0 being released, and new `jsii` release lines +were perfectly synchronized with TypeScript releases: + +```mermaid +gantt + title Support Policy Example (assuming 1 year maintenance) + axisFormat %Y-%m + todayMarker off + + section 1.x + Current :crit, 2020-01-01,2020-08-20 + Active (6 months) :2020-08-20,2021-02-20 + Maintenance (1 year) :2021-02-20,2022-02-20 + End-of-Life :milestone, 0d + + section 4.0.x + Current :crit, 2020-08-20, 2020-11-19 + Maintenance (1 year) :2021-11-19 + End-of-Life :milestone, 0d + + section 4.1.x + Current :crit, 2020-11-19, 2021-02-23 + Maintenance (1 year) :2022-02-23 + End-of-Life :milestone, 0d + + section 4.2.x + Current :crit, 2021-02-23, 2021-05-26 + Maintenance (1 year) :2022-05-26 + End-of-Life :milestone, 0d + + section 4.3.x + Current :crit, 2021-05-26, 2021-08-26 + Maintenance (1 year) :2022-08-26 + End-of-Life :milestone, 0d + + section 4.4.x + Current :crit, 2021-08-26, 2021-11-17 + Maintenance (1 year) :2022-11-17 + End-of-Life :milestone, 0d + + section 4.5.x + Current :crit, 2021-11-17, 2022-02-28 + Maintenance (1 year) :2023-02-28 + End-of-Life :milestone, 0d + + section 4.6.x + Current :crit, 2022-02-28, 2022-05-24 + Maintenance (1 year) :2023-05-24 + End-of-Life :milestone, 0d + + section 4.7.x + Current :crit, 2022-05-24, 2022-08-25 + Maintenance (1 year) :2023-08-25 + End-of-Life :milestone, 0d + + section 4.8.x + Current :crit, 2022-08-25, 12w + %% 4.8 is the current TypeScript release at time of writing... +``` + +
+Alternate Scenario (6 months maintenance) + +Shortening the maintenance window to 6 months instead of 12 allows reducing the +amount of previous lines that are maintained at any given time to 2 to 3, at the +expense of increased pressure on customers to migrate to newer versions. + +```mermaid +gantt + title Support Policy Example (assuming 6 months maintenance) + axisFormat %Y-%m + todayMarker off + + section 1.x + Current :crit, 2020-01-01,2020-08-20 + Active (6 months) :2020-08-20,2021-02-20 + Maintenance (6 months) :2021-02-20,2021-08-20 + End-of-Life :milestone, 0d + + section 4.0.x + Current :crit, 2020-08-20, 2020-11-19 + Maintenance (6 months) :2021-05-19 + End-of-Life :milestone, 0d + + section 4.1.x + Current :crit, 2020-11-19, 2021-02-23 + Maintenance (6 months) :2021-08-23 + End-of-Life :milestone, 0d + + section 4.2.x + Current :crit, 2021-02-23, 2021-05-26 + Maintenance (6 months) :2021-11-26 + End-of-Life :milestone, 0d + + section 4.3.x + Current :crit, 2021-05-26, 2021-08-26 + Maintenance (6 months) :2022-02-26 + End-of-Life :milestone, 0d + + section 4.4.x + Current :crit, 2021-08-26, 2021-11-17 + Maintenance (6 months) :2022-05-17 + End-of-Life :milestone, 0d + + section 4.5.x + Current :crit, 2021-11-17, 2022-02-28 + Maintenance (6 months) :2022-08-28 + End-of-Life :milestone, 0d + + section 4.6.x + Current :crit, 2022-02-28, 2022-05-24 + Maintenance (6 months) :2022-11-24 + End-of-Life :milestone, 0d + + section 4.7.x + Current :crit, 2022-05-24, 2022-08-25 + Maintenance (6 months) :2023-02-25 + End-of-Life :milestone, 0d + + section 4.8.x + Current :crit, 2022-08-25, 12w + %% 4.8 is the current TypeScript release at time of writing... +``` + +
+ +
+Alternate Scenario (current + previous) + +Adopting a maintenace policy similar to that of the Go compiler toolchain +guarantees only one previous release line needs maintenance at any given time, +as this is the gist of the maintenance policy: + +> We support the past two *TypeScript* releases. For example, 4.7 a,d 4.8 when +> 4.8 is the latest active release. + +```mermaid +gantt + title Support Policy Example (current + previous) + axisFormat %Y-%m + todayMarker off + + section 1.x + Current :crit, 2020-01-01,2020-08-20 + Active (6 months) :2020-08-20,2021-02-20 + Maintenance (1 year) :2021-02-20,2022-02-20 + End-of-Life :milestone, 0d + + section 4.0.x + Current :crit, 2020-08-20, 2020-11-19 + Maintenance :2021-02-23 + End-of-Life :milestone, 0d + + section 4.1.x + Current :crit, 2020-11-19, 2021-02-23 + Maintenance :2021-05-26 + End-of-Life :milestone, 0d + + section 4.2.x + Current :crit, 2021-02-23, 2021-05-26 + Maintenance :2021-08-26 + End-of-Life :milestone, 0d + + section 4.3.x + Current :crit, 2021-05-26, 2021-08-26 + Maintenance :2021-11-17 + End-of-Life :milestone, 0d + + section 4.4.x + Current :crit, 2021-08-26, 2021-11-17 + Maintenance :2022-02-28 + End-of-Life :milestone, 0d + + section 4.5.x + Current :crit, 2021-11-17, 2022-02-28 + Maintenance :2022-05-24 + End-of-Life :milestone, 0d + + section 4.6.x + Current :crit, 2022-02-28, 2022-05-24 + Maintenance :2022-08-25 + End-of-Life :milestone, 0d + + section 4.7.x + Current :crit, 2022-05-24, 2022-08-25 + Maintenance :2022-08-25, 12w + + section 4.8.x + Current :crit, 2022-08-25, 12w + %% 4.8 is the current TypeScript release at time of writing... +``` + +
+ +## Internal FAQ + +### How will we maintain backwards compatibility? + +The change only affects the [TypeScript] compiler version used internally by the +`jsii` compiler and the versioning scheme for the `jsii` package itself. + +The compiler will continue to emit `.jsii` assemblies that conform to the schema +defined in the `@jsii/spec` package, which will hence continue to be compatible +with all other tools part of the jsii toolchain (including `jsii-pacmak`, ...). + +In order to maximize compatibility between [TypeScript] compiler versions, and +since [TypeScript] occasionally introduces backwards-incompatible syntax changes +(additions, modifications) to the declarations files (`.d.ts`), the `jsii` +compiler will proactively produce down-leveled declarations files targeting +[TypeScript] compiler versions used by previous (not yet *end-of-life*) releases +of `jsii`. This can be achieved using the [`downlevel-dts`][downlevel-dts] +utility. Failure to do so may make it impossible to use a library compiled with +a given release of `jsii` in a project that is still using an older release, +which would be akin to forcing dependents to upgrade at the same pace as their +dependencies (which is undesirable). + +### Why are we doing this? + +Before this change, `jsii` users had been stuck with [TypeScript] `3.9` for a +very long time, due to the introduction of several breaking changes in the +language specification: upgrading the [TypeScript] compiler that `jsii` builds +on would cause existing code to break. + +In order to allow each package author to decide for themselves without hinging +on their dependencies' choices, or influencing their dependents, we are making +it possible for every developer to decide when they want to migrate to a new +version of the [TypeScript] language, by following [TypeScript]'s versioning for +the compiler, and continuing to perform coordinated releases of every other +package in the toolchain (those are unaffected by this change). + +The `jsii-rosetta` package also internally uses the [TypeScript] compiler that +needs to be compatible with the [TypeScript] language level used by the project. +Developers hence need to also be able to control which [TypeScript] version is +being used by `jsii-rosetta` if they want to use this. + +Using the same `major.minor` version as the [TypeScript] compiler makes it easy +for developers to identify which [TypeScript] language features are available to +them or not. As the [TypeScript] compiler does not conform to [semantic +versioning][semver], this implies `jsii` and `jsii-rosetta` also need to stop +conforming to it. + +### Why should we _not_ do this? + +[Semantic versioning][semver] is the dominant versioning scheme in the +JavaScript world, and diverging from it might break assumptions customers make +when consuming packages from [npm](npmjs.com). + +Following [TypeScript] versions means releasing new `major.minor` releases (that +may include breaking changes) more often than is currently done (the +[TypeScript] maintainers typically declare a new `major.minor` line four +times per year: in February, May, August and November respectively). This is a +lot more release lines than other AWS products offer, and it would not be +reasonable to uphold the [AWS SDKs and Tools maintenance policy][aws-policy], +as it requires offering full support (features and bug fixes) for "Generally +Available" releases for a minimum of 24 months (this would require providing +full support for 8 different releases, and back-porting automation is likely to +be difficult due to the amount of breaking changes in the [TypeScript] compiler +API between releases). Diverging from this [policy][aws-policy] is a significant +change that customers may not expect. + +Additionally, since we cannot afford to back-port new features (especially if +significant) on older releases, this means users may need to update their code +in order to gain access to new features introduced in the compiler. While this +may be a desirable forcing function on developers to upgrade to the latest +release line, it may impose challenges when such features cannot be implemented +in a way that is compatible with previous versions of the compiler (e.g: it may +be difficult or impossible to implement [RFC 193][RFC193] in a backwards +compatible manner, as it likely requires the introduction of a new type kind, +which previous release lines would not recognize). + +[RFC193]: https://github.com/aws/aws-cdk-rfcs/pull/194 + +### What is the technical solution (design) of this feature? + +The proposed delivery plan for this feature is as follows: + +* Communicate about the upcoming change in new releases on the `v1` release + line, including a planned timeline for the initial release of the `v4.9` line, + and language about the departure from [SemVer]. + +* **Optional:** Separate the `jsii` compiler from the rest of packages in the + jsii toolchain into separate repositories. This would make it easier to + release the `jsii` compiler separately from other parts of the toolchain that + follow a different versioning scheme. + + - Move other packages to a new mono-repository (or to several new individual + package repositories), e.g: `github.com/aws/jsii-toolchain`. + + - Make the `github.com/aws/jsii` repository by a single-package repository. + +* Update the *release* automation to use the [TypeScript] compiler version's + `major.minor` level, and only update the `patch` level on new releases. + +* Upgrade the [TypeScript] compiler internally used by `jsii` to the current + `latest` release of the `typescript` package. + +* Make the `jsii` compiler transparently prepare down-leveled declarations files + to ensure backwards-compatibility of compiler outputs with previous releases + of `jsii`. This can be done using the [`downlevel-dts`][downlevel-dts] package + to produce declarations files compatible with [TypeScript] `3.9`, and adding + a `typesVersions` key to the `package.json` file of packages. + + - See proof-of-concept: [`aws/jsii#3501`][aws/jsii-3501] + +* Release the initial `jsii` release on the `4.9` line (for practical reasons, + we will disregard [TypeScript] releases between `3.9` and the _current_ + version when this proposal is implemented, which at time of writing is `4.8`). + +* Formally announce that the `v1` release line of `jsii` will move into the + *Maintenance* tier of the [AWS SDKs and Tools maintenance policy][aws-policy] + in 6 months, and explain the policy that is applicable to newer releases. + +* **6 months later:** Formally announce that the `v1` release line of `jsii` is + entering the *Maintenance* tier of the [AWS SDKs and Tools maintenance + policy][aws-policy], and will continue to receive critical bug and security + fixes for 12 months before transitioning to *end-of-life*, and repeat the + maintenance policy that new releases will benefit from. + +* **12 months later:** Formally announce that the `v1` release line of `jsii` is + transitioning to *end-of-life* and will no longer receive any updates. Repeat + the maintenance policy that is applicable to newer releases. + +### Is this a breaking change? + +This is not a breaking change in the traditional sense, however this is a +significant change in versioning schemes used for the `jsii` compiler, and a +departure from the [AWS SDKs and Tools maintenance policy][aws-policy]. + +As such, this warrants ample communication with our customer base to avoid they +are caught by surprise, or have broken expectations. + +### What alternative solutions did you consider? + +#### Bring-your-own TypeScript version + +One of the main rationales for this change is to enable the use of new +TypeScript releases without forcing the entire package ecosystem to make the +change at the same time (due to language-breaking changes). + +An option to address this would be to allow customers to "bring their own" +TypeScript compiler, by making it a `peerDependency`. This however comes with +a significant challenge: the TypeScript compiler API is not stable between +TypeScript releases. Addressing this would require maintaining an adapter layer +for each supported version of the TypeScript compiler, and this would require +tremendous efforts, in particular as there appears to be no way in TypeScript +to re-export a `namespace` including all the type declarations it contains, as +`typeof ts` (assuming `ts` is the TypeScript compiler namespace) only represents +entities with a run-time value, and none of the interfaces it contains. The +consequence of this is that writing an adapter for a particular [TypeScript] +version requires wrapping all useful functions of the compiler API and +re-declaring the types they use, which represents hundreds if not thousands of +lines of code for each supported version. + +#### Only de-couple the `jsii` package version, but stick with [SemVer] + +It would technically be possible to de-couple the `jsii` package from the rest +of the toolchain's versioning, and to issue a new `jsii` major version each time +we update the [TypeScript] compiler it internally uses. This would however make +it difficult for customers to understand the relationship between `jsii` major +releases and the [TypeScript] language level they support. + +Using the same version number prefix (`major.minor`) as the [TypeScript] +compiler makes the relationship clear and removes the need to maintain separate +documentation for customers to understand what they are upgrading to. + +#### Release a different package for each supported [TypeScript] version + +The release model used by `cdk8s-plus` involves releasing a different package +for each version of the underlying resources (e.g: `cdk8s-plus-22` targets +version 22 of the resources). A similar model could be used for `jsii`, where a +package named `jsii-4.9` could be released for the compiler that builds on +[TypeScript] `4.9.x`. + +This release pattern however creates an opportunity for supply-chain attacks as +a malicious party could release `jsii-4.10` ahead of us and possibly exploit +unsuspecting users. + +The attack vector can be mitigated by scoping the packages since npm scopes +provide ownership guarantees, which would require releasing +`@jsii/typescript-4.9`. However this approach makes it more difficult for +customers to know when a new release of the compiler is available, since +dependency maintenance automation will only look for new versions of the same +package. + +### What are the drawbacks of this solution? + +This solution is a stark departure from versioning schemes and maintenance +policies used by AWS on open-source products. It implies offering critical bug +fixes and security updates for up to 5 different release lines (1 current, and +3 to 4 previous), which might require significant effort. + +Following the [TypeScript] `major.minor` reduces our ability to introduce +breaking changes to the `jsii` compiler, as these must be timed together with +[TypeScript] `major.minor` release timelines. However, since [TypeScript] +releases a new `major.minor` line 4 times a year, this is not a blocker, but +will require careful planning. + +Breaking changes that could be tempting to introduce in new `major.minor` +release lines include: + +- Upgrading default severity of some diagnostic messages to `ERROR` +- Adding new compile-time validations +- Dropping support for a recently end-of-life `node` version (this happens once + or twice a year) +- Dropping support for a particular TypeScript language version (for example, + [DefinitelyTyped] packages only support TypeScript compilers that are less + than 2 years old) +- Changing configuration file syntax, format, default values or required entries +- Addressing a security issue that requires breaking existing code + +[DefinitelyTyped]: https://github.com/DefinitelyTyped/DefinitelyTyped#support-window + +### What is the high-level project plan? + +Item | Estimation | Notes +------------------------------------------|------------|-------- +Initial communication | 1 day | +**Optional:** Break mono-repository out | 5 days | +Have `jsii` down-level `.d.ts` | 5 days | [`aws/jsii#3501`][aws/jsii-3501] +Update release automation | 2 days | +Update contributor guide | 1 day | +Update jsii documentation | 2 days | +Update [TypeScript] dependency | 15 days | +Initial Release | 1 day | +Update `projen`'s `JsiiProject` defaults | 1 day | +Migrate `aws-cdk` to new `jsii` release | 10 days | Via a pre-release +Validate ConstructHub support | 3 days | +Maintenance Announcement | 1 day | +Move to Maintenance | 1 day | +Move to end-of-life | 1 day | + +### Are there any open issues that need to be addressed later? + +[semver]: https://semver.org/spec/v2.0.0.html +[TypeScript]: https://www.typescriptlang.org +[aws-policy]: https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html +[downlevel-dts]: https://www.npmjs.com/package/downlevel-dts +[aws/jsii-3501]: https://github.com/aws/jsii/pull/3501 diff --git a/text/0431-sagemaker-l2-endpoint.md b/text/0431-sagemaker-l2-endpoint.md index a429c0d99..bb0d6eff9 100644 --- a/text/0431-sagemaker-l2-endpoint.md +++ b/text/0431-sagemaker-l2-endpoint.md @@ -275,7 +275,7 @@ productionVariant.metricModelLatency().createAlarm(this, 'ModelLatencyAlarm', { --- Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): ``` diff --git a/text/0436-gamelift-l2.md b/text/0436-gamelift-l2.md index 066ddbed7..b2bbca077 100644 --- a/text/0436-gamelift-l2.md +++ b/text/0436-gamelift-l2.md @@ -953,7 +953,7 @@ in the *Amazon GameLift FleetIQ Developer Guide*. --- Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): ``` diff --git a/text/0456-elasticache-l2.md b/text/0456-elasticache-l2.md index 1faaef81c..e44779aba 100644 --- a/text/0456-elasticache-l2.md +++ b/text/0456-elasticache-l2.md @@ -187,7 +187,7 @@ See the documentation on `SecretValue` for more details. --- Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): - [ ] Signed-off by API Bar Raiser @corymhall diff --git a/text/0474-event-bridge-scheduler-l2.md b/text/0474-event-bridge-scheduler-l2.md index b20a8a580..77c65df7d 100644 --- a/text/0474-event-bridge-scheduler-l2.md +++ b/text/0474-event-bridge-scheduler-l2.md @@ -409,7 +409,7 @@ in the *AWS Event Bridge Scheduler User Guide*. --- Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): ``` diff --git a/text/0477-policy-validation.md b/text/0477-policy-validation.md index e4cc7e26c..36f6d1e57 100644 --- a/text/0477-policy-validation.md +++ b/text/0477-policy-validation.md @@ -413,7 +413,7 @@ export class CfnGuardValidator implements IPolicyValidationPlugin { ``` Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): ```text diff --git a/text/0499-appconfig-constructs.md b/text/0499-appconfig-constructs.md index 2c9519f64..6ae210863 100644 --- a/text/0499-appconfig-constructs.md +++ b/text/0499-appconfig-constructs.md @@ -299,7 +299,7 @@ such as `onDeploymentComplete(EventDestination)`. --- Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): ``` diff --git a/text/0507-subnets.md b/text/0507-subnets.md index 158ec6dc3..f9958edd7 100644 --- a/text/0507-subnets.md +++ b/text/0507-subnets.md @@ -322,7 +322,7 @@ const lb = new elbv2.ApplicationLoadBalancer(this, 'LB', { --- Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): ``` diff --git a/text/0510-dynamodb-global-table.md b/text/0510-dynamodb-global-table.md index dd2a645b7..f0d78ce57 100644 --- a/text/0510-dynamodb-global-table.md +++ b/text/0510-dynamodb-global-table.md @@ -467,7 +467,7 @@ GlobalTable.fromTableName(stack, 'FooTableId', 'FooTable'); --- Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): ``` diff --git a/text/204-golang-bindings.md b/text/204-golang-bindings.md index a528ce163..53c328ceb 100644 --- a/text/204-golang-bindings.md +++ b/text/204-golang-bindings.md @@ -78,7 +78,7 @@ const ( ) ``` -*_NOTE_*: This would be consistent with how the [aws-sdk-go](https://github.com/aws/aws-sdk-go/blob/master/service/ecs/api.go#L20410-L20416) handles +*_NOTE_*: This would be consistent with how the [aws-sdk-go](https://github.com/aws/aws-sdk-go/blob/main/service/ecs/api.go#L20410-L20416) handles enums. ### Possible Extensions @@ -189,7 +189,7 @@ type iSecurityGroup struct { ### JSII Datatype Interfaces (Structs) -In jsii, the InterfaceType has a [datatype field](https://github.com/aws/jsii/blob/master/packages/%40jsii/spec/lib/assembly.ts#L879-L888) attribute +In jsii, the InterfaceType has a [datatype field](https://github.com/aws/jsii/blob/main/packages/%40jsii/spec/lib/assembly.ts#L879-L888) attribute that indicates that the interface only contains readonly properties. While this does corresponds directly to a Go struct, we would likely need to generate both a Go interface that contains getter methods that correspond to each property as well as a Go struct that implements that interface. This is in order to support subtyping, as the interface is typically what is passed as an argument into other functions, as well as to ensure forward @@ -204,7 +204,7 @@ property that would be implemented by the corresponding struct (jsii datatype pr generated). Since Go does not allow a struct to have exported members with the same name as an interface method, we would have to prefix the interface methods; the recommendation here is to use a `Get` prefix. -[Example](https://github.com/aws/aws-cdk/blob/master/packages/%40aws-cdk/aws-ecs/lib/container-definition.ts#L596): +[Example](https://github.com/aws/aws-cdk/blob/main/packages/%40aws-cdk/aws-ecs/lib/container-definition.ts#L596): ```ts export interface HealthCheck { @@ -746,7 +746,7 @@ Go, which is not an object-oriented language. While custom structs, which can be methods", can be used to encapsulate object-like behavior in Go, subtyping on these custom structs is not possible. In order to simulate subtyping, we would need to generate an interface in addition to a concrete struct for each jsii class. -The jsii [ClassType](https://github.com/aws/jsii/blob/master/packages/%40jsii/spec/lib/assembly.ts#L803) provides information on whether a +The jsii [ClassType](https://github.com/aws/jsii/blob/main/packages/%40jsii/spec/lib/assembly.ts#L803) provides information on whether a class is abstract, whether it extends another class, and whether it implements other interfaces. We will discuss each case in turn. ### Case 1: Simple class diff --git a/text/353-cfn-registry-constructs.md b/text/353-cfn-registry-constructs.md index 03b714c23..b8c585f25 100644 --- a/text/353-cfn-registry-constructs.md +++ b/text/353-cfn-registry-constructs.md @@ -37,7 +37,7 @@ in the public registry. --- Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): ``` diff --git a/text/359-construct-hub-deny-list.md b/text/359-construct-hub-deny-list.md index 36f2bee46..4305ee17a 100644 --- a/text/359-construct-hub-deny-list.md +++ b/text/359-construct-hub-deny-list.md @@ -30,7 +30,7 @@ if we run into a denied package. --- Ticking the box below indicates that the public API of this RFC has been -signed-off by the API bar raiser (the `api-approved` label was applied to the +signed-off by the API bar raiser (the `status/api-approved` label was applied to the RFC pull request): ``` diff --git a/tools/linters/package.json b/tools/linters/package.json index eb89d067e..6f3d06951 100644 --- a/tools/linters/package.json +++ b/tools/linters/package.json @@ -1,7 +1,8 @@ { - "name": "linters", + "name": "@cdklabs/linters", "version": "1.0.0", - "license": "ISC", + "license": "Apache-2.0", + "private": true, "dependencies": { "markdownlint-cli": "^0.35.0" } diff --git a/tools/rfc-render/fetch-issues.js b/tools/rfc-render/fetch-issues.js new file mode 100644 index 000000000..897114245 --- /dev/null +++ b/tools/rfc-render/fetch-issues.js @@ -0,0 +1,105 @@ +const { Octokit } = require('@octokit/rest'); +const { STATUS_LIST, UNKNOWN_STATUS } = require('./status'); +const fs = require('fs').promises; +const path = require('path'); + +exports.issuesGroupedByStatus = issuesGroupedByStatus; + +const STATUS_LABELS = Object.keys(STATUS_LIST); + +async function issuesGroupedByStatus(filterStatus = undefined) { + const files = await fs.readdir(path.join(__dirname, '..', '..', 'text')); + + const octo = new Octokit({ + auth: process.env.PROJEN_GITHUB_TOKEN || process.env.GITHUB_TOKEN + }); + + const issueByStatus = {}; + + const labelQuery = filterStatus ? `label:${filterStatus.join(',')}` : ''; + const fullQuery = `repo:aws/aws-cdk-rfcs is:issue ${labelQuery}`; + console.log(fullQuery); + const request = octo.search.issuesAndPullRequests.endpoint.merge({ + q: fullQuery, + }); + + const result = await octo.paginate(request); + + for (const issue of result) { + // skip pull requests + if (issue.pull_request) { + continue; + } + + const status = determineStatus(issue.labels); + // kip not requested status + if (filterStatus && !filterStatus.includes(status)) { + continue; + } + // skip closed issues of unknown status + if (issue.state === 'closed' && status === UNKNOWN_STATUS) { + continue; + } + + const { champion, pr_number } = findMetadata(issue); + const doc = findDocFile(files, issue.number); + + let link; + + // we we already have a doc, then the link should go to it + if (doc) { + link = `https://github.com/aws/aws-cdk-rfcs/blob/main/text/${doc}`; + } else if (pr_number) { + link = `https://github.com/aws/aws-cdk-rfcs/pull/${pr_number}`; + } else { + link = `https://github.com/aws/aws-cdk-rfcs/issues/${issue.number}`; + } + + (issueByStatus[status] ??= []).push({ + number: issue.number, + title: issue.title, + link, + assignee: issue.assignee && issue.assignee.login, + champion, + status, + doc, + }); + } + + return issueByStatus; +} + + +function findDocFile(files, number) { + return files.find(file => parseInt(file.split('-')[0]) === number); +} + +function findMetadata(issue) { + const body = issue.body || ''; + const lines = body.split('\n'); + const titleIndex = lines.findIndex(line => line.startsWith('|PR|Champion|')); + if (titleIndex === -1) { + return { champion: '' }; + } + + let [, pr, champion] = lines[titleIndex + 2].split('|'); + champion = champion ? champion.trim() : ''; + + const pr_number = (pr.startsWith('#') ? pr.substring(1) : '').trim(); + return { champion, pr_number }; +} + +function determineStatus(item) { + const result = []; + for (const label of item) { + if (STATUS_LABELS.includes(label.name)) { + result.push(label.name); + } + } + + if (result.length !== 1) { + return UNKNOWN_STATUS; + } else { + return result[0]; + } +} diff --git a/tools/rfc-render/inject-table.js b/tools/rfc-render/inject-table.js old mode 100644 new mode 100755 index 901dd734d..fb225f421 --- a/tools/rfc-render/inject-table.js +++ b/tools/rfc-render/inject-table.js @@ -1,36 +1,49 @@ +#!/usr/bin/env node + const fs = require('fs').promises; const path = require('path'); const { render } = require('./render-rfc-table'); +const { parseArgs } = require('util'); async function main() { - - if (!process.argv[2]) { - throw new Error(`Usage: ${process.argv[1]} README.md`); - } - - const readmeFile = path.resolve(process.argv[2]); - if (!readmeFile) { - throw new Error(`usage: ${process.argv[1]} README.md`); - } - - console.error(`reading ${readmeFile}`); + const { values: { status = undefined }, positionals: [readme = 'README.md'] } = parseArgs({ + options: { + status: { + type: 'string', + short: 's', + multiple: true, + } + }, + strict: true, + allowPositionals: true, + }) + + const readmeFile = path.resolve(readme); + const statusList = status?.map(s => s.startsWith('status/') ? s : `status/${s}`); + + console.info(`Injecting '${readmeFile}' with status: ${statusList ? statusList.join(', ') : ''}`); const text = (await fs.readFile(readmeFile, 'utf-8')); const lines = text.split('\n'); + const begin = lines.indexOf(''); const end = lines.indexOf(''); if (begin === -1 || end === -1) { - throw new Error('unable to find begin/end markers in readme'); + throw new Error(`unable to find begin/end markers in file ${readmeFile}`); } - const final = [ ...lines.slice(0, begin + 1), ...(await render()), ...lines.slice(end) ]; + const final = [...lines.slice(0, begin + 1), ...(await render(statusList, Boolean(statusList))), ...lines.slice(end)]; - console.error(`writing ${readmeFile}`); + console.error(`Writing ${readmeFile}`); await fs.writeFile(readmeFile, final.join('\n')); + console.error(`Done`); } main().catch(e => { + console.error(); console.error(e); - process.exit(1); + console.error(); + console.error(`Usage:\n\t${path.relative(process.cwd(), process.argv[1])} README.md [--status ] [--status ] [...]`) + process.exitCode = 1; }); \ No newline at end of file diff --git a/tools/rfc-render/package-lock.json b/tools/rfc-render/package-lock.json index a8028def1..d5bf97356 100644 --- a/tools/rfc-render/package-lock.json +++ b/tools/rfc-render/package-lock.json @@ -1,381 +1,210 @@ { - "name": "rfc-render", + "name": "@cdklabs/rfc-render", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@actions/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz", - "integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==", - "requires": { - "@actions/http-client": "^2.0.1", - "uuid": "^8.3.2" - }, + "packages": { + "": { + "name": "@cdklabs/rfc-render", + "version": "1.0.0", + "license": "Apache-2.0", "dependencies": { - "@actions/http-client": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz", - "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==", - "requires": { - "tunnel": "^0.0.6" - } - } - } - }, - "@actions/github": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@actions/github/-/github-2.1.0.tgz", - "integrity": "sha512-G4ncMlh4pLLAvNgHUYUtpWQ1zPf/VYqmRH9oshxLabdaOOnp7i1hgSgzr2xne2YUaSND3uqemd3YYTIsm2f/KQ==", - "requires": { - "@actions/http-client": "^1.0.3", - "@octokit/graphql": "^4.3.1", - "@octokit/rest": "^16.15.0" + "@octokit/rest": "^20.0.2" } }, - "@actions/http-client": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz", - "integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==", - "requires": { - "tunnel": "0.0.6" + "node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "engines": { + "node": ">= 18" } }, - "@octokit/auth-token": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.0.tgz", - "integrity": "sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg==", - "requires": { - "@octokit/types": "^2.0.0" + "node_modules/@octokit/core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.1.tgz", + "integrity": "sha512-lyeeeZyESFo+ffI801SaBKmCfsvarO+dgV8/0gD8u1d87clbEdWsP5yC+dSj3zLhb2eIf5SJrn6vDz9AheETHw==", + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.0.0", + "@octokit/request": "^8.0.2", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" } }, - "@octokit/endpoint": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.5.1.tgz", - "integrity": "sha512-nBFhRUb5YzVTCX/iAK1MgQ4uWo89Gu0TH00qQHoYRCsE12dWcG1OiLd7v2EIo2+tpUKPMOQ62QFy9hy9Vg2ULg==", - "requires": { - "@octokit/types": "^2.0.0", - "is-plain-object": "^3.0.0", - "universal-user-agent": "^4.0.0" + "node_modules/@octokit/core/node_modules/@octokit/endpoint": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.1.tgz", + "integrity": "sha512-hRlOKAovtINHQPYHZlfyFwaM8OyetxeoC81lAkBy34uLb8exrZB50SQdeW3EROqiY9G9yxQTpp5OHTV54QD+vA==", + "dependencies": { + "@octokit/types": "^12.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" } }, - "@octokit/graphql": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.3.1.tgz", - "integrity": "sha512-hCdTjfvrK+ilU2keAdqNBWOk+gm1kai1ZcdjRfB30oA3/T6n53UVJb7w0L5cR3/rhU91xT3HSqCd+qbvH06yxA==", - "requires": { - "@octokit/request": "^5.3.0", - "@octokit/types": "^2.0.0", - "universal-user-agent": "^4.0.0" + "node_modules/@octokit/core/node_modules/@octokit/graphql": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", + "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", + "dependencies": { + "@octokit/request": "^8.0.1", + "@octokit/types": "^12.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" } }, - "@octokit/request": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.3.1.tgz", - "integrity": "sha512-5/X0AL1ZgoU32fAepTfEoggFinO3rxsMLtzhlUX+RctLrusn/CApJuGFCd0v7GMFhF+8UiCsTTfsu7Fh1HnEJg==", - "requires": { - "@octokit/endpoint": "^5.5.0", - "@octokit/request-error": "^1.0.1", - "@octokit/types": "^2.0.0", - "deprecation": "^2.0.0", - "is-plain-object": "^3.0.0", - "node-fetch": "^2.3.0", - "once": "^1.4.0", - "universal-user-agent": "^4.0.0" + "node_modules/@octokit/core/node_modules/@octokit/request": { + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.4.tgz", + "integrity": "sha512-M0aaFfpGPEKrg7XoA/gwgRvc9MSXHRO2Ioki1qrPDbl1e9YhjIwVoHE7HIKmv/m3idzldj//xBujcFNqGX6ENA==", + "dependencies": { + "@octokit/endpoint": "^9.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" } }, - "@octokit/request-error": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.0.tgz", - "integrity": "sha512-DNBhROBYjjV/I9n7A8kVkmQNkqFAMem90dSxqvPq57e2hBr7mNTX98y3R2zDpqMQHVRpBDjsvsfIGgBzy+4PAg==", - "requires": { - "@octokit/types": "^2.0.0", + "node_modules/@octokit/core/node_modules/@octokit/request-error": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", + "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "dependencies": { + "@octokit/types": "^12.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" } }, - "@octokit/rest": { - "version": "16.38.3", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.38.3.tgz", - "integrity": "sha512-Ui5W4Gzv0YHe9P3KDZAuU/BkRrT88PCuuATfWBMBf4fux4nB8th8LlyVAVnHKba1s/q4umci+sNHzoFYFujPEg==", - "requires": { - "@octokit/auth-token": "^2.4.0", - "@octokit/request": "^5.2.0", - "@octokit/request-error": "^1.0.2", - "atob-lite": "^2.0.0", - "before-after-hook": "^2.0.0", - "btoa-lite": "^1.0.0", - "deprecation": "^2.0.0", - "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2", - "lodash.uniq": "^4.5.0", - "octokit-pagination-methods": "^1.1.0", - "once": "^1.4.0", - "universal-user-agent": "^4.0.0" - } - }, - "@octokit/types": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.1.1.tgz", - "integrity": "sha512-89LOYH+d/vsbDX785NOfLxTW88GjNd0lWRz1DVPVsZgg9Yett5O+3MOvwo7iHgvUwbFz0mf/yPIjBkUbs4kxoQ==", - "requires": { - "@types/node": ">= 8" + "node_modules/@octokit/core/node_modules/@octokit/types": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.0.0.tgz", + "integrity": "sha512-EzD434aHTFifGudYAygnFlS1Tl6KhbTynEWELQXIbTY8Msvb5nEqTZIm7sbPEt4mQYLZwu3zPKVdeIrw0g7ovg==", + "dependencies": { + "@octokit/openapi-types": "^19.0.0" } }, - "@types/node": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.5.0.tgz", - "integrity": "sha512-Onhn+z72D2O2Pb2ql2xukJ55rglumsVo1H6Fmyi8mlU9SvKdBk/pUSUAiBY/d9bAOF7VVWajX3sths/+g6ZiAQ==" - }, - "atob-lite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", - "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=" - }, - "before-after-hook": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz", - "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==" - }, - "btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=" - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "node_modules/@octokit/core/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@octokit/core/node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "node_modules/@octokit/openapi-types": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.0.0.tgz", + "integrity": "sha512-PclQ6JGMTE9iUStpzMkwLCISFn/wDeRjkZFIKALpvJQNBGwDoYYi2fFvuHwssoQ1rXI5mfh6jgTgWuddeUzfWw==" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.0.0.tgz", + "integrity": "sha512-oIJzCpttmBTlEhBmRvb+b9rlnGpmFgDtZ0bB6nq39qIod6A5DP+7RkVLMOixIgRCYSHDTeayWqmiJ2SZ6xgfdw==", + "dependencies": { + "@octokit/types": "^12.0.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=5" } }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.0.0.tgz", + "integrity": "sha512-EzD434aHTFifGudYAygnFlS1Tl6KhbTynEWELQXIbTY8Msvb5nEqTZIm7sbPEt4mQYLZwu3zPKVdeIrw0g7ovg==", + "dependencies": { + "@octokit/openapi-types": "^19.0.0" } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "node_modules/@octokit/plugin-request-log": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.0.tgz", + "integrity": "sha512-2uJI1COtYCq8Z4yNSnM231TgH50bRkheQ9+aH8TnZanB6QilOnx8RMD2qsnamSOXtDj0ilxvevf5fGsBhBBzKA==", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=5" } }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.0.1.tgz", + "integrity": "sha512-fgS6HPkPvJiz8CCliewLyym9qAx0RZ/LKh3sATaPfM41y/O2wQ4Z9MrdYeGPVh04wYmHFmWiGlKPC7jWVtZXQA==", + "dependencies": { + "@octokit/types": "^12.0.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=5" } }, - "is-plain-object": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", - "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==", - "requires": { - "isobject": "^4.0.0" + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.0.0.tgz", + "integrity": "sha512-EzD434aHTFifGudYAygnFlS1Tl6KhbTynEWELQXIbTY8Msvb5nEqTZIm7sbPEt4mQYLZwu3zPKVdeIrw0g7ovg==", + "dependencies": { + "@octokit/openapi-types": "^19.0.0" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "macos-release": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz", - "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" + "node_modules/@octokit/rest": { + "version": "20.0.2", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.0.2.tgz", + "integrity": "sha512-Ux8NDgEraQ/DMAU1PlAohyfBBXDwhnX2j33Z1nJNziqAfHi70PuxkFYIcIt8aIAxtRE7KVuKp8lSR8pA0J5iOQ==", + "dependencies": { + "@octokit/core": "^5.0.0", + "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/plugin-request-log": "^4.0.0", + "@octokit/plugin-rest-endpoint-methods": "^10.0.0" + }, + "engines": { + "node": ">= 18" } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" }, - "octokit-pagination-methods": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", - "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==" + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { + "dependencies": { "wrappy": "1" } }, - "os-name": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", - "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", - "requires": { - "macos-release": "^2.2.0", - "windows-release": "^3.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" - }, - "universal-user-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.0.tgz", - "integrity": "sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA==", - "requires": { - "os-name": "^3.1.0" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "windows-release": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz", - "integrity": "sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA==", - "requires": { - "execa": "^1.0.0" - } - }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" diff --git a/tools/rfc-render/package.json b/tools/rfc-render/package.json index f03ce11fd..db48bc54b 100644 --- a/tools/rfc-render/package.json +++ b/tools/rfc-render/package.json @@ -1,17 +1,21 @@ { - "name": "rfc-render", + "name": "@cdklabs/rfc-render", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "render:all": "npm run render:readme && npm run render:full && npm run render:proposed && npm run render:accepted && npm run render:closed", + "render:readme": "node inject-table.js ../../README.md -s unknown -s implementing -s planning -s approved -s final-comment-period -s api-approved -s review", + "render:full": "node inject-table.js ../../FULL_INDEX.md", + "render:proposed": "node inject-table.js ../../PROPOSED.md -s proposed -s review -s api-approved -s final-comment-period", + "render:accepted": "node inject-table.js ../../ACCEPTED.md -s approved -s planning -s implementing -s done", + "render:closed": "node inject-table.js ../../CLOSED.md -s rejected -s stale" }, "keywords": [], - "author": "", - "license": "ISC", + "author": "AWS", + "private": true, + "license": "Apache-2.0", "dependencies": { - "@actions/core": "^1.9.1", - "@actions/github": "^2.1.0", - "@octokit/rest": "^16.38.3" + "@octokit/rest": "^20.0.2" } } diff --git a/tools/rfc-render/render-rfc-table.js b/tools/rfc-render/render-rfc-table.js index 679edc720..d266d1cd4 100644 --- a/tools/rfc-render/render-rfc-table.js +++ b/tools/rfc-render/render-rfc-table.js @@ -1,116 +1,41 @@ -const Octokit = require('@octokit/rest'); -const fs = require('fs').promises; -const path = require('path'); - -const UNKNOWN_STATUS = 'status/unknown'; - -// order matters here and intentional: sorted chronological in reverse order - -// when it will be delivered. First the ones actually being worked on (coming -// soon), then the ones in planning (less soon), approved (sometimes), etc. The -// "done" items are last because they are less interesting in this list. - -const display = { - 'status/implementing': '👷 implementing', - 'status/planning': '📆 planning', - 'status/approved': '👍 approved', - 'status/final-comment-period': '⏰ final comments', - 'status/review': '✍️ review', - 'status/proposed': '💡 proposed', - 'status/done': '✅ done', - 'status/rejected': '👎 rejected', - [UNKNOWN_STATUS]: '❓unknown', -} - - -const labels = Object.keys(display); +const { issuesGroupedByStatus } = require('./fetch-issues'); +const { STATUS_LIST } = require('./status'); +const labels = Object.keys(STATUS_LIST); exports.render = render; -async function render() { - const lines = []; - const files = await fs.readdir(path.join(__dirname, '..', '..', 'text')); - - const octo = new Octokit({ - auth: process.env.GITHUB_TOKEN - }); - - const issueByStatus = { }; - - for (const status of labels) { - issueByStatus[status] = []; - } - - const request = octo.issues.listForRepo.endpoint.merge({ - repo: 'aws-cdk-rfcs', - owner: 'aws', - state: 'all', - }); +async function render(renderStatus = undefined, groupByStatus = true) { + const issuesByStatus = await issuesGroupedByStatus(renderStatus); - const result = await octo.paginate(request); - - for (const issue of result) { - // skip pull requests - if (issue.pull_request) { - continue; - } - - const status = determineStatus(issue.labels); - let warning = ''; - - if (issue.state === 'closed') { - - // skip closed issues of unknown status - if (status === UNKNOWN_STATUS) { - continue; - } - - } - - const { champion, pr_number } = findMetadata(issue); - const doc = findDocFile(files, issue.number); - - let link; - - // we we already have a doc, then the link should go to it - if (doc) { - link = `https://github.com/aws/aws-cdk-rfcs/blob/master/text/${doc}`; - } else if (pr_number) { - link = `https://github.com/aws/aws-cdk-rfcs/pull/${pr_number}`; - } else { - link = `https://github.com/aws/aws-cdk-rfcs/issues/${issue.number}`; - } - - issueByStatus[status].push({ - number: issue.number, - title: issue.title, - link, - assignee: issue.assignee && issue.assignee.login, - champion, - status, - doc, - warning - }); - } + const lines = []; lines.push('\\#|Title|Owner|Status'); lines.push('---|-----|-----|------'); - for (const issues of Object.values(issueByStatus)) { - for (const row of issues.sort(byNumber)) { - const cols = [ - `[${row.number}](https://github.com/aws/aws-cdk-rfcs/issues/${row.number})`, - `[${row.title.trim()}](${row.link})`, - renderUser(row.assignee), - display[row.status], - ]; - - lines.push(cols.join('|')); + if (groupByStatus) { + for (const statusGroup of (renderStatus || Object.keys(issuesByStatus))) { + for (const row of issuesByStatus[statusGroup]?.sort(byNumber) || []) { + lines.push(renderRow(row)); + } + } + } else { + for (const row of Object.values(issuesByStatus).flat().sort(byNumber)) { + lines.push(renderRow(row)); } } return lines; } +function renderRow(row) { + return [ + `[${row.number}](https://github.com/aws/aws-cdk-rfcs/issues/${row.number})`, + `[${row.title.trim()}](${row.link})`, + renderUser(row.assignee), + STATUS_LIST[row.status], + ].join('|'); +} + function byNumber(a, b) { return a.number - b.number; } @@ -131,37 +56,3 @@ function renderUser(user) { return `[@${user}](https://github.com/${user})`; } - -function findDocFile(files, number) { - return files.find(file => parseInt(file.split('-')[0]) === number); -} - -function findMetadata(issue) { - const body = issue.body || ''; - const lines = body.split('\n'); - const titleIndex = lines.findIndex(line => line.startsWith('|PR|Champion|')); - if (titleIndex === -1) { - return { champion: '' }; - } - - let [ , pr, champion ] = lines[titleIndex + 2].split('|'); - champion = champion ? champion.trim() : ''; - - const pr_number = (pr.startsWith('#') ? pr.substring(1) : '').trim(); - return { champion, pr_number }; -} - -function determineStatus(item) { - const result = []; - for (const label of item) { - if (labels.includes(label.name)) { - result.push(label.name); - } - } - - if (result.length !== 1) { - return UNKNOWN_STATUS; - } else { - return result[0]; - } -} diff --git a/tools/rfc-render/status.js b/tools/rfc-render/status.js new file mode 100644 index 000000000..eb01b39aa --- /dev/null +++ b/tools/rfc-render/status.js @@ -0,0 +1,17 @@ +exports.UNKNOWN_STATUS = 'status/unknown'; + +// Order does not matters here +// The cli input is an ordered list of status +exports.STATUS_LIST = { + [exports.UNKNOWN_STATUS]: '❓unknown', + 'status/implementing': '👷 implementing', + 'status/planning': '📆 planning', + 'status/approved': '👍 approved', + 'status/final-comment-period': '⏰ final comments', + 'status/api-approved': '📐 API approved', + 'status/review': '✍️ review', + 'status/proposed': '💡 proposed', + 'status/done': '✅ done', + 'status/stale': '🤷 stale', + 'status/rejected': '👎 rejected', +}