From f5ceed5d6fd344e63ef21c26b50b62abb9d0efe3 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Fri, 19 Mar 2021 16:54:41 +0100 Subject: [PATCH 1/9] chore: un-jsii and bundle `@aws-cdk/yaml-cfn` The `yaml-cfn` library is used as an implementation detail of `cloudformation-include`, `aws-cdk`, `decdk`, and the monopackages. Un-jsii it and bundle it into the framework packages that need it. Does not need to be accessed over jsii and does not need to be exposed in the monopackages. --- .../cloudformation-include/package.json | 3 +++ packages/@aws-cdk/yaml-cfn/package.json | 26 ------------------- packages/aws-cdk-lib/package.json | 1 + packages/monocdk/package.json | 1 + 4 files changed, 5 insertions(+), 26 deletions(-) diff --git a/packages/@aws-cdk/cloudformation-include/package.json b/packages/@aws-cdk/cloudformation-include/package.json index c913b93bcdf41..c4e272c695920 100644 --- a/packages/@aws-cdk/cloudformation-include/package.json +++ b/packages/@aws-cdk/cloudformation-include/package.json @@ -371,6 +371,9 @@ "pkglint": "0.0.0", "ts-jest": "^26.5.4" }, + "bundledDependencies": [ + "@aws-cdk/yaml-cfn" + ], "keywords": [ "aws", "cdk", diff --git a/packages/@aws-cdk/yaml-cfn/package.json b/packages/@aws-cdk/yaml-cfn/package.json index 7fc68d44a23af..842455998dad5 100644 --- a/packages/@aws-cdk/yaml-cfn/package.json +++ b/packages/@aws-cdk/yaml-cfn/package.json @@ -23,32 +23,6 @@ "cloudformation", "yaml" ], - "jsii": { - "outdir": "dist", - "targets": { - "java": { - "package": "software.amazon.awscdk.yaml.cfn", - "maven": { - "groupId": "software.amazon.awscdk", - "artifactId": "cdk-yaml-cfn" - } - }, - "dotnet": { - "namespace": "Amazon.CDK.Yaml.Cfn", - "packageId": "Amazon.CDK.Yaml.Cfn", - "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png" - }, - "python": { - "distName": "aws-cdk.yaml-cfn", - "module": "aws_cdk.yaml_cfn", - "classifiers": [ - "Framework :: AWS CDK", - "Framework :: AWS CDK :: 1" - ] - } - }, - "projectReferences": true - }, "scripts": { "build": "cdk-build", "watch": "cdk-watch", diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index 3f4b9857b9231..4a2d535a8d819 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -77,6 +77,7 @@ }, "license": "Apache-2.0", "bundledDependencies": [ + "@aws-cdk/yaml-cfn", "@balena/dockerignore", "case", "fs-extra", diff --git a/packages/monocdk/package.json b/packages/monocdk/package.json index 2978fe7a2e8d0..2fbb8357a9265 100644 --- a/packages/monocdk/package.json +++ b/packages/monocdk/package.json @@ -82,6 +82,7 @@ }, "license": "Apache-2.0", "bundledDependencies": [ + "@aws-cdk/yaml-cfn", "@balena/dockerignore", "case", "fs-extra", From 25c628f34393d0a412ae1a5f0b87b23b6427ae1e Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Fri, 19 Mar 2021 18:07:48 +0100 Subject: [PATCH 2/9] Need tsconfig.json to be checked in now --- packages/@aws-cdk/yaml-cfn/.gitignore | 3 +-- packages/@aws-cdk/yaml-cfn/tsconfig.json | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 packages/@aws-cdk/yaml-cfn/tsconfig.json diff --git a/packages/@aws-cdk/yaml-cfn/.gitignore b/packages/@aws-cdk/yaml-cfn/.gitignore index bb785cfb74f08..8b9c845e5d12a 100644 --- a/packages/@aws-cdk/yaml-cfn/.gitignore +++ b/packages/@aws-cdk/yaml-cfn/.gitignore @@ -3,7 +3,6 @@ *.d.ts node_modules dist -tsconfig.json .jsii .LAST_BUILD @@ -15,4 +14,4 @@ nyc.config.js !.eslintrc.js !jest.config.js -junit.xml \ No newline at end of file +junit.xml diff --git a/packages/@aws-cdk/yaml-cfn/tsconfig.json b/packages/@aws-cdk/yaml-cfn/tsconfig.json new file mode 100644 index 0000000000000..5e75173fa8734 --- /dev/null +++ b/packages/@aws-cdk/yaml-cfn/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target":"ES2018", + "module": "commonjs", + "lib": ["es2016", "es2017.object", "es2017.string"], + "declaration": true, + "composite": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, + "inlineSourceMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization":false + }, + "include": ["**/*.ts" ], + "exclude": ["node_modules"] +} From 6e63a260385de5138e5077f62d44bbbaa0c23719 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Fri, 19 Mar 2021 18:37:21 +0100 Subject: [PATCH 3/9] Can't be in peerDependencies --- packages/@aws-cdk/cloudformation-include/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/@aws-cdk/cloudformation-include/package.json b/packages/@aws-cdk/cloudformation-include/package.json index c4e272c695920..c2ec62d8d0dc2 100644 --- a/packages/@aws-cdk/cloudformation-include/package.json +++ b/packages/@aws-cdk/cloudformation-include/package.json @@ -359,7 +359,6 @@ "@aws-cdk/aws-wafv2": "0.0.0", "@aws-cdk/aws-workspaces": "0.0.0", "@aws-cdk/core": "0.0.0", - "@aws-cdk/yaml-cfn": "0.0.0", "constructs": "^3.2.0" }, "devDependencies": { From 8aeb33ef6a57bb8f3e364733d9a7e8c1b52f23ff Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Mon, 22 Mar 2021 11:13:48 +0100 Subject: [PATCH 4/9] pkglint fix --- package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.json b/package.json index f82766ba1d48f..870548795394e 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,8 @@ "@aws-cdk/cloud-assembly-schema/jsonschema/**", "@aws-cdk/cloud-assembly-schema/semver", "@aws-cdk/cloud-assembly-schema/semver/**", + "@aws-cdk/cloudformation-include/@aws-cdk/yaml-cfn", + "@aws-cdk/cloudformation-include/@aws-cdk/yaml-cfn/**", "@aws-cdk/core/@balena/dockerignore", "@aws-cdk/core/@balena/dockerignore/**", "@aws-cdk/core/fs-extra", From 88315b8e89006122f8547ce94ca7b811334acc63 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Mon, 22 Mar 2021 14:10:31 +0100 Subject: [PATCH 5/9] More package thingy updates thingy --- package.json | 4 + packages/aws-cdk-lib/package.json | 1 + packages/decdk/.gitignore | 10 ++ packages/decdk/.npmignore | 7 + packages/decdk/package.json | 203 ++++++++++++++++++++++- packages/decdk/test/fixture/package.json | 64 ++++++- packages/monocdk/package.json | 1 + 7 files changed, 275 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 870548795394e..8bd95b264ef88 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,8 @@ "@aws-cdk/cx-api/semver/**", "@aws-cdk/yaml-cfn/yaml", "@aws-cdk/yaml-cfn/yaml/**", + "aws-cdk-lib/@aws-cdk/yaml-cfn", + "aws-cdk-lib/@aws-cdk/yaml-cfn/**", "aws-cdk-lib/@balena/dockerignore", "aws-cdk-lib/@balena/dockerignore/**", "aws-cdk-lib/case", @@ -95,6 +97,8 @@ "aws-cdk-lib/semver/**", "aws-cdk-lib/yaml", "aws-cdk-lib/yaml/**", + "monocdk/@aws-cdk/yaml-cfn", + "monocdk/@aws-cdk/yaml-cfn/**", "monocdk/@balena/dockerignore", "monocdk/@balena/dockerignore/**", "monocdk/case", diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index 4a2d535a8d819..8450524044b96 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -89,6 +89,7 @@ "yaml" ], "dependencies": { + "@aws-cdk/yaml-cfn": "0.0.0", "@balena/dockerignore": "^1.0.2", "case": "1.6.3", "fs-extra": "^9.1.0", diff --git a/packages/decdk/.gitignore b/packages/decdk/.gitignore index 88e6bb7a9196f..90b59f2e2a444 100644 --- a/packages/decdk/.gitignore +++ b/packages/decdk/.gitignore @@ -3,3 +3,13 @@ !deps.js test/fixture/.jsii cdk.schema.json + +dist +.LAST_PACKAGE +.LAST_BUILD +*.snk +junit.xml +.nyc_output +coverage +nyc.config.js +!.eslintrc.js \ No newline at end of file diff --git a/packages/decdk/.npmignore b/packages/decdk/.npmignore index 9f3f17837f80a..c1025a864531b 100644 --- a/packages/decdk/.npmignore +++ b/packages/decdk/.npmignore @@ -22,3 +22,10 @@ dist *.tsbuildinfo + +# exclude cdk artifacts +**/cdk.out +test/ +tsconfig.json +junit.xml +.eslintrc.js \ No newline at end of file diff --git a/packages/decdk/package.json b/packages/decdk/package.json index 591d6165b33df..6d60ac209c84b 100644 --- a/packages/decdk/package.json +++ b/packages/decdk/package.json @@ -6,19 +6,21 @@ "types": "lib/index.d.ts", "repository": { "type": "git", - "url": "https://github.com/aws/aws-cdk.git" + "url": "https://github.com/aws/aws-cdk.git", + "directory": "packages/decdk" }, "bin": { "decdk": "bin/decdk", "decdk-schema": "bin/decdk-schema" }, "scripts": { - "build": "node ./deps.js && tsc -b && chmod +x bin/decdk && chmod +x bin/decdk-schema && bin/decdk-schema > cdk.schema.json", - "watch": "tsc -b -w", - "test": "jest", - "package": "mkdir -p dist/js && cd dist/js && npm pack ../../", - "build+test": "npm run build && npm test", - "build+test+package": "npm run build+test && npm run package" + "build": "cdk-build", + "watch": "cdk-watch", + "test": "cdk-test", + "package": "cdk-package", + "build+test": "yarn build && yarn test", + "build+test+package": "yarn build+test && yarn package", + "pkglint": "pkglint -f" }, "author": { "name": "Amazon Web Services", @@ -222,7 +224,8 @@ "@types/yaml": "1.9.7", "@types/yargs": "^15.0.13", "jest": "^26.6.3", - "jsii": "^1.25.0" + "cdk-build-tools": "0.0.0", + "pkglint": "0.0.0" }, "keywords": [ "aws", @@ -230,6 +233,188 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 8.10.0" + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "publishConfig": { + "tag": "latest" + }, + "peerDependencies": { + "@aws-cdk/alexa-ask": "0.0.0", + "@aws-cdk/assets": "0.0.0", + "@aws-cdk/aws-accessanalyzer": "0.0.0", + "@aws-cdk/aws-acmpca": "0.0.0", + "@aws-cdk/aws-amazonmq": "0.0.0", + "@aws-cdk/aws-amplify": "0.0.0", + "@aws-cdk/aws-apigateway": "0.0.0", + "@aws-cdk/aws-apigatewayv2": "0.0.0", + "@aws-cdk/aws-apigatewayv2-authorizers": "0.0.0", + "@aws-cdk/aws-apigatewayv2-integrations": "0.0.0", + "@aws-cdk/aws-appconfig": "0.0.0", + "@aws-cdk/aws-appflow": "0.0.0", + "@aws-cdk/aws-applicationautoscaling": "0.0.0", + "@aws-cdk/aws-applicationinsights": "0.0.0", + "@aws-cdk/aws-appmesh": "0.0.0", + "@aws-cdk/aws-appstream": "0.0.0", + "@aws-cdk/aws-appsync": "0.0.0", + "@aws-cdk/aws-athena": "0.0.0", + "@aws-cdk/aws-auditmanager": "0.0.0", + "@aws-cdk/aws-autoscaling": "0.0.0", + "@aws-cdk/aws-autoscaling-common": "0.0.0", + "@aws-cdk/aws-autoscaling-hooktargets": "0.0.0", + "@aws-cdk/aws-autoscalingplans": "0.0.0", + "@aws-cdk/aws-backup": "0.0.0", + "@aws-cdk/aws-batch": "0.0.0", + "@aws-cdk/aws-budgets": "0.0.0", + "@aws-cdk/aws-cassandra": "0.0.0", + "@aws-cdk/aws-ce": "0.0.0", + "@aws-cdk/aws-certificatemanager": "0.0.0", + "@aws-cdk/aws-chatbot": "0.0.0", + "@aws-cdk/aws-cloud9": "0.0.0", + "@aws-cdk/aws-cloudformation": "0.0.0", + "@aws-cdk/aws-cloudfront": "0.0.0", + "@aws-cdk/aws-cloudfront-origins": "0.0.0", + "@aws-cdk/aws-cloudtrail": "0.0.0", + "@aws-cdk/aws-cloudwatch": "0.0.0", + "@aws-cdk/aws-cloudwatch-actions": "0.0.0", + "@aws-cdk/aws-codeartifact": "0.0.0", + "@aws-cdk/aws-codebuild": "0.0.0", + "@aws-cdk/aws-codecommit": "0.0.0", + "@aws-cdk/aws-codedeploy": "0.0.0", + "@aws-cdk/aws-codeguruprofiler": "0.0.0", + "@aws-cdk/aws-codegurureviewer": "0.0.0", + "@aws-cdk/aws-codepipeline": "0.0.0", + "@aws-cdk/aws-codepipeline-actions": "0.0.0", + "@aws-cdk/aws-codestar": "0.0.0", + "@aws-cdk/aws-codestarconnections": "0.0.0", + "@aws-cdk/aws-codestarnotifications": "0.0.0", + "@aws-cdk/aws-cognito": "0.0.0", + "@aws-cdk/aws-config": "0.0.0", + "@aws-cdk/aws-databrew": "0.0.0", + "@aws-cdk/aws-datapipeline": "0.0.0", + "@aws-cdk/aws-datasync": "0.0.0", + "@aws-cdk/aws-dax": "0.0.0", + "@aws-cdk/aws-detective": "0.0.0", + "@aws-cdk/aws-devopsguru": "0.0.0", + "@aws-cdk/aws-directoryservice": "0.0.0", + "@aws-cdk/aws-dlm": "0.0.0", + "@aws-cdk/aws-dms": "0.0.0", + "@aws-cdk/aws-docdb": "0.0.0", + "@aws-cdk/aws-dynamodb": "0.0.0", + "@aws-cdk/aws-ec2": "0.0.0", + "@aws-cdk/aws-ecr": "0.0.0", + "@aws-cdk/aws-ecr-assets": "0.0.0", + "@aws-cdk/aws-ecs": "0.0.0", + "@aws-cdk/aws-ecs-patterns": "0.0.0", + "@aws-cdk/aws-efs": "0.0.0", + "@aws-cdk/aws-eks": "0.0.0", + "@aws-cdk/aws-elasticache": "0.0.0", + "@aws-cdk/aws-elasticbeanstalk": "0.0.0", + "@aws-cdk/aws-elasticloadbalancing": "0.0.0", + "@aws-cdk/aws-elasticloadbalancingv2": "0.0.0", + "@aws-cdk/aws-elasticloadbalancingv2-actions": "0.0.0", + "@aws-cdk/aws-elasticloadbalancingv2-targets": "0.0.0", + "@aws-cdk/aws-elasticsearch": "0.0.0", + "@aws-cdk/aws-emr": "0.0.0", + "@aws-cdk/aws-emrcontainers": "0.0.0", + "@aws-cdk/aws-events": "0.0.0", + "@aws-cdk/aws-events-targets": "0.0.0", + "@aws-cdk/aws-eventschemas": "0.0.0", + "@aws-cdk/aws-fms": "0.0.0", + "@aws-cdk/aws-fsx": "0.0.0", + "@aws-cdk/aws-gamelift": "0.0.0", + "@aws-cdk/aws-globalaccelerator": "0.0.0", + "@aws-cdk/aws-glue": "0.0.0", + "@aws-cdk/aws-greengrass": "0.0.0", + "@aws-cdk/aws-greengrassv2": "0.0.0", + "@aws-cdk/aws-guardduty": "0.0.0", + "@aws-cdk/aws-iam": "0.0.0", + "@aws-cdk/aws-imagebuilder": "0.0.0", + "@aws-cdk/aws-inspector": "0.0.0", + "@aws-cdk/aws-iot": "0.0.0", + "@aws-cdk/aws-iot1click": "0.0.0", + "@aws-cdk/aws-iotanalytics": "0.0.0", + "@aws-cdk/aws-iotevents": "0.0.0", + "@aws-cdk/aws-iotsitewise": "0.0.0", + "@aws-cdk/aws-iotthingsgraph": "0.0.0", + "@aws-cdk/aws-iotwireless": "0.0.0", + "@aws-cdk/aws-ivs": "0.0.0", + "@aws-cdk/aws-kendra": "0.0.0", + "@aws-cdk/aws-kinesis": "0.0.0", + "@aws-cdk/aws-kinesisanalytics": "0.0.0", + "@aws-cdk/aws-kinesisanalytics-flink": "0.0.0", + "@aws-cdk/aws-kinesisfirehose": "0.0.0", + "@aws-cdk/aws-kms": "0.0.0", + "@aws-cdk/aws-lakeformation": "0.0.0", + "@aws-cdk/aws-lambda": "0.0.0", + "@aws-cdk/aws-lambda-destinations": "0.0.0", + "@aws-cdk/aws-lambda-event-sources": "0.0.0", + "@aws-cdk/aws-lambda-nodejs": "0.0.0", + "@aws-cdk/aws-lambda-python": "0.0.0", + "@aws-cdk/aws-licensemanager": "0.0.0", + "@aws-cdk/aws-logs": "0.0.0", + "@aws-cdk/aws-logs-destinations": "0.0.0", + "@aws-cdk/aws-lookoutvision": "0.0.0", + "@aws-cdk/aws-macie": "0.0.0", + "@aws-cdk/aws-managedblockchain": "0.0.0", + "@aws-cdk/aws-mediaconnect": "0.0.0", + "@aws-cdk/aws-mediaconvert": "0.0.0", + "@aws-cdk/aws-medialive": "0.0.0", + "@aws-cdk/aws-mediapackage": "0.0.0", + "@aws-cdk/aws-mediastore": "0.0.0", + "@aws-cdk/aws-msk": "0.0.0", + "@aws-cdk/aws-mwaa": "0.0.0", + "@aws-cdk/aws-neptune": "0.0.0", + "@aws-cdk/aws-networkfirewall": "0.0.0", + "@aws-cdk/aws-networkmanager": "0.0.0", + "@aws-cdk/aws-opsworks": "0.0.0", + "@aws-cdk/aws-opsworkscm": "0.0.0", + "@aws-cdk/aws-pinpoint": "0.0.0", + "@aws-cdk/aws-pinpointemail": "0.0.0", + "@aws-cdk/aws-qldb": "0.0.0", + "@aws-cdk/aws-quicksight": "0.0.0", + "@aws-cdk/aws-ram": "0.0.0", + "@aws-cdk/aws-rds": "0.0.0", + "@aws-cdk/aws-redshift": "0.0.0", + "@aws-cdk/aws-resourcegroups": "0.0.0", + "@aws-cdk/aws-robomaker": "0.0.0", + "@aws-cdk/aws-route53": "0.0.0", + "@aws-cdk/aws-route53-patterns": "0.0.0", + "@aws-cdk/aws-route53-targets": "0.0.0", + "@aws-cdk/aws-route53resolver": "0.0.0", + "@aws-cdk/aws-s3": "0.0.0", + "@aws-cdk/aws-s3-assets": "0.0.0", + "@aws-cdk/aws-s3-deployment": "0.0.0", + "@aws-cdk/aws-s3-notifications": "0.0.0", + "@aws-cdk/aws-s3outposts": "0.0.0", + "@aws-cdk/aws-sagemaker": "0.0.0", + "@aws-cdk/aws-sam": "0.0.0", + "@aws-cdk/aws-sdb": "0.0.0", + "@aws-cdk/aws-secretsmanager": "0.0.0", + "@aws-cdk/aws-securityhub": "0.0.0", + "@aws-cdk/aws-servicecatalog": "0.0.0", + "@aws-cdk/aws-servicecatalogappregistry": "0.0.0", + "@aws-cdk/aws-servicediscovery": "0.0.0", + "@aws-cdk/aws-ses": "0.0.0", + "@aws-cdk/aws-ses-actions": "0.0.0", + "@aws-cdk/aws-signer": "0.0.0", + "@aws-cdk/aws-sns": "0.0.0", + "@aws-cdk/aws-sns-subscriptions": "0.0.0", + "@aws-cdk/aws-sqs": "0.0.0", + "@aws-cdk/aws-ssm": "0.0.0", + "@aws-cdk/aws-sso": "0.0.0", + "@aws-cdk/aws-stepfunctions": "0.0.0", + "@aws-cdk/aws-stepfunctions-tasks": "0.0.0", + "@aws-cdk/aws-synthetics": "0.0.0", + "@aws-cdk/aws-timestream": "0.0.0", + "@aws-cdk/aws-transfer": "0.0.0", + "@aws-cdk/aws-waf": "0.0.0", + "@aws-cdk/aws-wafregional": "0.0.0", + "@aws-cdk/aws-wafv2": "0.0.0", + "@aws-cdk/aws-workspaces": "0.0.0", + "@aws-cdk/core": "0.0.0", + "@aws-cdk/custom-resources": "0.0.0", + "@aws-cdk/lambda-layer-awscli": "0.0.0", + "@aws-cdk/lambda-layer-kubectl": "0.0.0", + "@aws-cdk/pipelines": "0.0.0" } } diff --git a/packages/decdk/test/fixture/package.json b/packages/decdk/test/fixture/package.json index 37ba6d2665de7..3f5e6a181bbc9 100644 --- a/packages/decdk/test/fixture/package.json +++ b/packages/decdk/test/fixture/package.json @@ -5,15 +5,67 @@ "main": "index.js", "types": "index.d.ts", "jsii": { - "outdir": "dist" + "outdir": "dist", + "projectReferences": true, + "targets": { + "java": { + "maven": { + "groupId": "software.amazon.awscdk", + "artifactId": "cdk-fixture" + }, + "package": "software.amazon.awscdk.fixture" + }, + "python": { + "distName": "aws-cdk.fixture", + "module": "aws_cdk.fixture", + "classifiers": [ + "Framework :: AWS CDK", + "Framework :: AWS CDK :: 1" + ] + }, + "dotnet": { + "namespace": "Amazon.CDK.Fixture", + "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png" + } + } }, "repository": { - "url": "https://github.com/aws/aws-cdk", - "type": "git" + "url": "https://github.com/aws/aws-cdk.git", + "type": "git", + "directory": "packages/decdk/test/fixture" }, "author": { "name": "Amazon Web Services", - "url": "https://aws.amazon.com" + "url": "https://aws.amazon.com", + "organization": true }, - "license": "Apache-2.0" -} \ No newline at end of file + "license": "Apache-2.0", + "publishConfig": { + "tag": "latest" + }, + "homepage": "https://github.com/aws/aws-cdk", + "keywords": [ + "aws", + "cdk" + ], + "scripts": { + "package": "cdk-package", + "build": "cdk-build", + "watch": "cdk-watch", + "rosetta:extract": "yarn --silent jsii-rosetta extract", + "compat": "cdk-compat", + "pkglint": "pkglint -f", + "build+test": "yarn build", + "build+test+package": "yarn build+test" + }, + "devDependencies": { + "cdk-build-tools": "0.0.0", + "pkglint": "0.0.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "awscdkio": { + "announce": false + } +} diff --git a/packages/monocdk/package.json b/packages/monocdk/package.json index 2fbb8357a9265..f78b477a77f1a 100644 --- a/packages/monocdk/package.json +++ b/packages/monocdk/package.json @@ -94,6 +94,7 @@ "yaml" ], "dependencies": { + "@aws-cdk/yaml-cfn": "0.0.0", "@balena/dockerignore": "^1.0.2", "case": "1.6.3", "fs-extra": "^9.1.0", From 2b7188f72bebb84aadb7d5640626e327a5cc2097 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Mon, 22 Mar 2021 14:56:04 +0100 Subject: [PATCH 6/9] Undo accidental changes, make work with newer TSC --- packages/decdk/package.json | 203 +---------------------- packages/decdk/test/fixture/package.json | 64 +------ packages/decdk/test/schema.test.ts | 2 +- tools/nodeunit-shim/index.ts | 2 +- 4 files changed, 17 insertions(+), 254 deletions(-) diff --git a/packages/decdk/package.json b/packages/decdk/package.json index 6d60ac209c84b..591d6165b33df 100644 --- a/packages/decdk/package.json +++ b/packages/decdk/package.json @@ -6,21 +6,19 @@ "types": "lib/index.d.ts", "repository": { "type": "git", - "url": "https://github.com/aws/aws-cdk.git", - "directory": "packages/decdk" + "url": "https://github.com/aws/aws-cdk.git" }, "bin": { "decdk": "bin/decdk", "decdk-schema": "bin/decdk-schema" }, "scripts": { - "build": "cdk-build", - "watch": "cdk-watch", - "test": "cdk-test", - "package": "cdk-package", - "build+test": "yarn build && yarn test", - "build+test+package": "yarn build+test && yarn package", - "pkglint": "pkglint -f" + "build": "node ./deps.js && tsc -b && chmod +x bin/decdk && chmod +x bin/decdk-schema && bin/decdk-schema > cdk.schema.json", + "watch": "tsc -b -w", + "test": "jest", + "package": "mkdir -p dist/js && cd dist/js && npm pack ../../", + "build+test": "npm run build && npm test", + "build+test+package": "npm run build+test && npm run package" }, "author": { "name": "Amazon Web Services", @@ -224,8 +222,7 @@ "@types/yaml": "1.9.7", "@types/yargs": "^15.0.13", "jest": "^26.6.3", - "cdk-build-tools": "0.0.0", - "pkglint": "0.0.0" + "jsii": "^1.25.0" }, "keywords": [ "aws", @@ -233,188 +230,6 @@ ], "homepage": "https://github.com/aws/aws-cdk", "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" - }, - "publishConfig": { - "tag": "latest" - }, - "peerDependencies": { - "@aws-cdk/alexa-ask": "0.0.0", - "@aws-cdk/assets": "0.0.0", - "@aws-cdk/aws-accessanalyzer": "0.0.0", - "@aws-cdk/aws-acmpca": "0.0.0", - "@aws-cdk/aws-amazonmq": "0.0.0", - "@aws-cdk/aws-amplify": "0.0.0", - "@aws-cdk/aws-apigateway": "0.0.0", - "@aws-cdk/aws-apigatewayv2": "0.0.0", - "@aws-cdk/aws-apigatewayv2-authorizers": "0.0.0", - "@aws-cdk/aws-apigatewayv2-integrations": "0.0.0", - "@aws-cdk/aws-appconfig": "0.0.0", - "@aws-cdk/aws-appflow": "0.0.0", - "@aws-cdk/aws-applicationautoscaling": "0.0.0", - "@aws-cdk/aws-applicationinsights": "0.0.0", - "@aws-cdk/aws-appmesh": "0.0.0", - "@aws-cdk/aws-appstream": "0.0.0", - "@aws-cdk/aws-appsync": "0.0.0", - "@aws-cdk/aws-athena": "0.0.0", - "@aws-cdk/aws-auditmanager": "0.0.0", - "@aws-cdk/aws-autoscaling": "0.0.0", - "@aws-cdk/aws-autoscaling-common": "0.0.0", - "@aws-cdk/aws-autoscaling-hooktargets": "0.0.0", - "@aws-cdk/aws-autoscalingplans": "0.0.0", - "@aws-cdk/aws-backup": "0.0.0", - "@aws-cdk/aws-batch": "0.0.0", - "@aws-cdk/aws-budgets": "0.0.0", - "@aws-cdk/aws-cassandra": "0.0.0", - "@aws-cdk/aws-ce": "0.0.0", - "@aws-cdk/aws-certificatemanager": "0.0.0", - "@aws-cdk/aws-chatbot": "0.0.0", - "@aws-cdk/aws-cloud9": "0.0.0", - "@aws-cdk/aws-cloudformation": "0.0.0", - "@aws-cdk/aws-cloudfront": "0.0.0", - "@aws-cdk/aws-cloudfront-origins": "0.0.0", - "@aws-cdk/aws-cloudtrail": "0.0.0", - "@aws-cdk/aws-cloudwatch": "0.0.0", - "@aws-cdk/aws-cloudwatch-actions": "0.0.0", - "@aws-cdk/aws-codeartifact": "0.0.0", - "@aws-cdk/aws-codebuild": "0.0.0", - "@aws-cdk/aws-codecommit": "0.0.0", - "@aws-cdk/aws-codedeploy": "0.0.0", - "@aws-cdk/aws-codeguruprofiler": "0.0.0", - "@aws-cdk/aws-codegurureviewer": "0.0.0", - "@aws-cdk/aws-codepipeline": "0.0.0", - "@aws-cdk/aws-codepipeline-actions": "0.0.0", - "@aws-cdk/aws-codestar": "0.0.0", - "@aws-cdk/aws-codestarconnections": "0.0.0", - "@aws-cdk/aws-codestarnotifications": "0.0.0", - "@aws-cdk/aws-cognito": "0.0.0", - "@aws-cdk/aws-config": "0.0.0", - "@aws-cdk/aws-databrew": "0.0.0", - "@aws-cdk/aws-datapipeline": "0.0.0", - "@aws-cdk/aws-datasync": "0.0.0", - "@aws-cdk/aws-dax": "0.0.0", - "@aws-cdk/aws-detective": "0.0.0", - "@aws-cdk/aws-devopsguru": "0.0.0", - "@aws-cdk/aws-directoryservice": "0.0.0", - "@aws-cdk/aws-dlm": "0.0.0", - "@aws-cdk/aws-dms": "0.0.0", - "@aws-cdk/aws-docdb": "0.0.0", - "@aws-cdk/aws-dynamodb": "0.0.0", - "@aws-cdk/aws-ec2": "0.0.0", - "@aws-cdk/aws-ecr": "0.0.0", - "@aws-cdk/aws-ecr-assets": "0.0.0", - "@aws-cdk/aws-ecs": "0.0.0", - "@aws-cdk/aws-ecs-patterns": "0.0.0", - "@aws-cdk/aws-efs": "0.0.0", - "@aws-cdk/aws-eks": "0.0.0", - "@aws-cdk/aws-elasticache": "0.0.0", - "@aws-cdk/aws-elasticbeanstalk": "0.0.0", - "@aws-cdk/aws-elasticloadbalancing": "0.0.0", - "@aws-cdk/aws-elasticloadbalancingv2": "0.0.0", - "@aws-cdk/aws-elasticloadbalancingv2-actions": "0.0.0", - "@aws-cdk/aws-elasticloadbalancingv2-targets": "0.0.0", - "@aws-cdk/aws-elasticsearch": "0.0.0", - "@aws-cdk/aws-emr": "0.0.0", - "@aws-cdk/aws-emrcontainers": "0.0.0", - "@aws-cdk/aws-events": "0.0.0", - "@aws-cdk/aws-events-targets": "0.0.0", - "@aws-cdk/aws-eventschemas": "0.0.0", - "@aws-cdk/aws-fms": "0.0.0", - "@aws-cdk/aws-fsx": "0.0.0", - "@aws-cdk/aws-gamelift": "0.0.0", - "@aws-cdk/aws-globalaccelerator": "0.0.0", - "@aws-cdk/aws-glue": "0.0.0", - "@aws-cdk/aws-greengrass": "0.0.0", - "@aws-cdk/aws-greengrassv2": "0.0.0", - "@aws-cdk/aws-guardduty": "0.0.0", - "@aws-cdk/aws-iam": "0.0.0", - "@aws-cdk/aws-imagebuilder": "0.0.0", - "@aws-cdk/aws-inspector": "0.0.0", - "@aws-cdk/aws-iot": "0.0.0", - "@aws-cdk/aws-iot1click": "0.0.0", - "@aws-cdk/aws-iotanalytics": "0.0.0", - "@aws-cdk/aws-iotevents": "0.0.0", - "@aws-cdk/aws-iotsitewise": "0.0.0", - "@aws-cdk/aws-iotthingsgraph": "0.0.0", - "@aws-cdk/aws-iotwireless": "0.0.0", - "@aws-cdk/aws-ivs": "0.0.0", - "@aws-cdk/aws-kendra": "0.0.0", - "@aws-cdk/aws-kinesis": "0.0.0", - "@aws-cdk/aws-kinesisanalytics": "0.0.0", - "@aws-cdk/aws-kinesisanalytics-flink": "0.0.0", - "@aws-cdk/aws-kinesisfirehose": "0.0.0", - "@aws-cdk/aws-kms": "0.0.0", - "@aws-cdk/aws-lakeformation": "0.0.0", - "@aws-cdk/aws-lambda": "0.0.0", - "@aws-cdk/aws-lambda-destinations": "0.0.0", - "@aws-cdk/aws-lambda-event-sources": "0.0.0", - "@aws-cdk/aws-lambda-nodejs": "0.0.0", - "@aws-cdk/aws-lambda-python": "0.0.0", - "@aws-cdk/aws-licensemanager": "0.0.0", - "@aws-cdk/aws-logs": "0.0.0", - "@aws-cdk/aws-logs-destinations": "0.0.0", - "@aws-cdk/aws-lookoutvision": "0.0.0", - "@aws-cdk/aws-macie": "0.0.0", - "@aws-cdk/aws-managedblockchain": "0.0.0", - "@aws-cdk/aws-mediaconnect": "0.0.0", - "@aws-cdk/aws-mediaconvert": "0.0.0", - "@aws-cdk/aws-medialive": "0.0.0", - "@aws-cdk/aws-mediapackage": "0.0.0", - "@aws-cdk/aws-mediastore": "0.0.0", - "@aws-cdk/aws-msk": "0.0.0", - "@aws-cdk/aws-mwaa": "0.0.0", - "@aws-cdk/aws-neptune": "0.0.0", - "@aws-cdk/aws-networkfirewall": "0.0.0", - "@aws-cdk/aws-networkmanager": "0.0.0", - "@aws-cdk/aws-opsworks": "0.0.0", - "@aws-cdk/aws-opsworkscm": "0.0.0", - "@aws-cdk/aws-pinpoint": "0.0.0", - "@aws-cdk/aws-pinpointemail": "0.0.0", - "@aws-cdk/aws-qldb": "0.0.0", - "@aws-cdk/aws-quicksight": "0.0.0", - "@aws-cdk/aws-ram": "0.0.0", - "@aws-cdk/aws-rds": "0.0.0", - "@aws-cdk/aws-redshift": "0.0.0", - "@aws-cdk/aws-resourcegroups": "0.0.0", - "@aws-cdk/aws-robomaker": "0.0.0", - "@aws-cdk/aws-route53": "0.0.0", - "@aws-cdk/aws-route53-patterns": "0.0.0", - "@aws-cdk/aws-route53-targets": "0.0.0", - "@aws-cdk/aws-route53resolver": "0.0.0", - "@aws-cdk/aws-s3": "0.0.0", - "@aws-cdk/aws-s3-assets": "0.0.0", - "@aws-cdk/aws-s3-deployment": "0.0.0", - "@aws-cdk/aws-s3-notifications": "0.0.0", - "@aws-cdk/aws-s3outposts": "0.0.0", - "@aws-cdk/aws-sagemaker": "0.0.0", - "@aws-cdk/aws-sam": "0.0.0", - "@aws-cdk/aws-sdb": "0.0.0", - "@aws-cdk/aws-secretsmanager": "0.0.0", - "@aws-cdk/aws-securityhub": "0.0.0", - "@aws-cdk/aws-servicecatalog": "0.0.0", - "@aws-cdk/aws-servicecatalogappregistry": "0.0.0", - "@aws-cdk/aws-servicediscovery": "0.0.0", - "@aws-cdk/aws-ses": "0.0.0", - "@aws-cdk/aws-ses-actions": "0.0.0", - "@aws-cdk/aws-signer": "0.0.0", - "@aws-cdk/aws-sns": "0.0.0", - "@aws-cdk/aws-sns-subscriptions": "0.0.0", - "@aws-cdk/aws-sqs": "0.0.0", - "@aws-cdk/aws-ssm": "0.0.0", - "@aws-cdk/aws-sso": "0.0.0", - "@aws-cdk/aws-stepfunctions": "0.0.0", - "@aws-cdk/aws-stepfunctions-tasks": "0.0.0", - "@aws-cdk/aws-synthetics": "0.0.0", - "@aws-cdk/aws-timestream": "0.0.0", - "@aws-cdk/aws-transfer": "0.0.0", - "@aws-cdk/aws-waf": "0.0.0", - "@aws-cdk/aws-wafregional": "0.0.0", - "@aws-cdk/aws-wafv2": "0.0.0", - "@aws-cdk/aws-workspaces": "0.0.0", - "@aws-cdk/core": "0.0.0", - "@aws-cdk/custom-resources": "0.0.0", - "@aws-cdk/lambda-layer-awscli": "0.0.0", - "@aws-cdk/lambda-layer-kubectl": "0.0.0", - "@aws-cdk/pipelines": "0.0.0" + "node": ">= 8.10.0" } } diff --git a/packages/decdk/test/fixture/package.json b/packages/decdk/test/fixture/package.json index 3f5e6a181bbc9..37ba6d2665de7 100644 --- a/packages/decdk/test/fixture/package.json +++ b/packages/decdk/test/fixture/package.json @@ -5,67 +5,15 @@ "main": "index.js", "types": "index.d.ts", "jsii": { - "outdir": "dist", - "projectReferences": true, - "targets": { - "java": { - "maven": { - "groupId": "software.amazon.awscdk", - "artifactId": "cdk-fixture" - }, - "package": "software.amazon.awscdk.fixture" - }, - "python": { - "distName": "aws-cdk.fixture", - "module": "aws_cdk.fixture", - "classifiers": [ - "Framework :: AWS CDK", - "Framework :: AWS CDK :: 1" - ] - }, - "dotnet": { - "namespace": "Amazon.CDK.Fixture", - "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png" - } - } + "outdir": "dist" }, "repository": { - "url": "https://github.com/aws/aws-cdk.git", - "type": "git", - "directory": "packages/decdk/test/fixture" + "url": "https://github.com/aws/aws-cdk", + "type": "git" }, "author": { "name": "Amazon Web Services", - "url": "https://aws.amazon.com", - "organization": true + "url": "https://aws.amazon.com" }, - "license": "Apache-2.0", - "publishConfig": { - "tag": "latest" - }, - "homepage": "https://github.com/aws/aws-cdk", - "keywords": [ - "aws", - "cdk" - ], - "scripts": { - "package": "cdk-package", - "build": "cdk-build", - "watch": "cdk-watch", - "rosetta:extract": "yarn --silent jsii-rosetta extract", - "compat": "cdk-compat", - "pkglint": "pkglint -f", - "build+test": "yarn build", - "build+test+package": "yarn build+test" - }, - "devDependencies": { - "cdk-build-tools": "0.0.0", - "pkglint": "0.0.0" - }, - "engines": { - "node": ">= 10.13.0 <13 || >=13.7.0" - }, - "awscdkio": { - "announce": false - } -} + "license": "Apache-2.0" +} \ No newline at end of file diff --git a/packages/decdk/test/schema.test.ts b/packages/decdk/test/schema.test.ts index 7b097dcc9fcbe..84888d94b365b 100644 --- a/packages/decdk/test/schema.test.ts +++ b/packages/decdk/test/schema.test.ts @@ -79,7 +79,7 @@ test('schemaForInterface: interface with primitives', async () => { * are propagated outwards. */ function spawn(command: string, options: SpawnOptions | undefined) { - return new Promise((resolve, reject) => { + return new Promise((resolve, reject) => { const cp = spawnAsync(command, [], { stdio: 'inherit', ...options }); cp.on('error', reject); diff --git a/tools/nodeunit-shim/index.ts b/tools/nodeunit-shim/index.ts index 8ba50bedefefd..1c4ee174ff229 100644 --- a/tools/nodeunit-shim/index.ts +++ b/tools/nodeunit-shim/index.ts @@ -81,7 +81,7 @@ export function nodeunitShim(exports: Record) { }); } else { // It's a test - test(testName, () => new Promise(ok => { + test(testName, () => new Promise(ok => { testObj(new Test(ok)); })); } From 5d877c42e5f96905088d84567c3e2ea1ac37fd0c Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Tue, 23 Mar 2021 14:41:37 +0100 Subject: [PATCH 7/9] Transitive yaml dependency needs to be bundled as well --- packages/@aws-cdk/cloudformation-include/package.json | 2 +- packages/decdk/.gitignore | 10 ---------- packages/decdk/.npmignore | 7 ------- 3 files changed, 1 insertion(+), 18 deletions(-) diff --git a/packages/@aws-cdk/cloudformation-include/package.json b/packages/@aws-cdk/cloudformation-include/package.json index c2ec62d8d0dc2..8239394eb9c6e 100644 --- a/packages/@aws-cdk/cloudformation-include/package.json +++ b/packages/@aws-cdk/cloudformation-include/package.json @@ -371,7 +371,7 @@ "ts-jest": "^26.5.4" }, "bundledDependencies": [ - "@aws-cdk/yaml-cfn" + "@aws-cdk/yaml-cfn", "yaml" ], "keywords": [ "aws", diff --git a/packages/decdk/.gitignore b/packages/decdk/.gitignore index 90b59f2e2a444..88e6bb7a9196f 100644 --- a/packages/decdk/.gitignore +++ b/packages/decdk/.gitignore @@ -3,13 +3,3 @@ !deps.js test/fixture/.jsii cdk.schema.json - -dist -.LAST_PACKAGE -.LAST_BUILD -*.snk -junit.xml -.nyc_output -coverage -nyc.config.js -!.eslintrc.js \ No newline at end of file diff --git a/packages/decdk/.npmignore b/packages/decdk/.npmignore index c1025a864531b..9f3f17837f80a 100644 --- a/packages/decdk/.npmignore +++ b/packages/decdk/.npmignore @@ -22,10 +22,3 @@ dist *.tsbuildinfo - -# exclude cdk artifacts -**/cdk.out -test/ -tsconfig.json -junit.xml -.eslintrc.js \ No newline at end of file From 052a29663b514d90c2102647d0fa5c0666b2c895 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Wed, 24 Mar 2021 15:21:43 +0100 Subject: [PATCH 8/9] Fix nohoist pkglint rule --- package.json | 9 ++- .../cloudformation-include/package.json | 2 +- tools/pkglint/bin/pkglint.ts | 12 +++- tools/pkglint/lib/packagejson.ts | 2 +- tools/pkglint/lib/rules.ts | 63 ++++++++++++++++--- tools/pkglint/lib/util.ts | 36 +++++++++++ 6 files changed, 109 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 8bd95b264ef88..a3ebb08bf5a3c 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,8 @@ "@aws-cdk/cloud-assembly-schema/semver", "@aws-cdk/cloud-assembly-schema/semver/**", "@aws-cdk/cloudformation-include/@aws-cdk/yaml-cfn", - "@aws-cdk/cloudformation-include/@aws-cdk/yaml-cfn/**", + "@aws-cdk/cloudformation-include/@aws-cdk/yaml-cfn/yaml", + "@aws-cdk/cloudformation-include/@aws-cdk/yaml-cfn/yaml/**", "@aws-cdk/core/@balena/dockerignore", "@aws-cdk/core/@balena/dockerignore/**", "@aws-cdk/core/fs-extra", @@ -78,7 +79,8 @@ "@aws-cdk/yaml-cfn/yaml", "@aws-cdk/yaml-cfn/yaml/**", "aws-cdk-lib/@aws-cdk/yaml-cfn", - "aws-cdk-lib/@aws-cdk/yaml-cfn/**", + "aws-cdk-lib/@aws-cdk/yaml-cfn/yaml", + "aws-cdk-lib/@aws-cdk/yaml-cfn/yaml/**", "aws-cdk-lib/@balena/dockerignore", "aws-cdk-lib/@balena/dockerignore/**", "aws-cdk-lib/case", @@ -98,7 +100,8 @@ "aws-cdk-lib/yaml", "aws-cdk-lib/yaml/**", "monocdk/@aws-cdk/yaml-cfn", - "monocdk/@aws-cdk/yaml-cfn/**", + "monocdk/@aws-cdk/yaml-cfn/yaml", + "monocdk/@aws-cdk/yaml-cfn/yaml/**", "monocdk/@balena/dockerignore", "monocdk/@balena/dockerignore/**", "monocdk/case", diff --git a/packages/@aws-cdk/cloudformation-include/package.json b/packages/@aws-cdk/cloudformation-include/package.json index 8239394eb9c6e..c2ec62d8d0dc2 100644 --- a/packages/@aws-cdk/cloudformation-include/package.json +++ b/packages/@aws-cdk/cloudformation-include/package.json @@ -371,7 +371,7 @@ "ts-jest": "^26.5.4" }, "bundledDependencies": [ - "@aws-cdk/yaml-cfn", "yaml" + "@aws-cdk/yaml-cfn" ], "keywords": [ "aws", diff --git a/tools/pkglint/bin/pkglint.ts b/tools/pkglint/bin/pkglint.ts index 0b5cd61ef1649..31cf7f5d2c74d 100644 --- a/tools/pkglint/bin/pkglint.ts +++ b/tools/pkglint/bin/pkglint.ts @@ -24,8 +24,16 @@ async function main(): Promise { const pkgs = findPackageJsons(argv.directory as string); - rules.forEach(rule => pkgs.filter(pkg => pkg.shouldApply(rule)).forEach(pkg => rule.prepare(pkg))); - rules.forEach(rule => pkgs.filter(pkg => pkg.shouldApply(rule)).forEach(pkg => rule.validate(pkg))); + for (const rule of rules) { + for (const pkg of pkgs.filter(pkg => pkg.shouldApply(rule))) { + rule.prepare(pkg); + } + } + for (const rule of rules) { + for (const pkg of pkgs.filter(pkg => pkg.shouldApply(rule))) { + await rule.validate(pkg); + } + } if (argv.fix) { pkgs.forEach(pkg => pkg.applyFixes()); diff --git a/tools/pkglint/lib/packagejson.ts b/tools/pkglint/lib/packagejson.ts index a59e8f1c6e307..7a7375fbe6fab 100644 --- a/tools/pkglint/lib/packagejson.ts +++ b/tools/pkglint/lib/packagejson.ts @@ -361,5 +361,5 @@ export abstract class ValidationRule { /** * Will be executed for every package definition once, should mutate the package object */ - public abstract validate(pkg: PackageJson): void; + public abstract validate(pkg: PackageJson): void | Promise; } diff --git a/tools/pkglint/lib/rules.ts b/tools/pkglint/lib/rules.ts index 1dd32c1c96392..b91e7954f352d 100644 --- a/tools/pkglint/lib/rules.ts +++ b/tools/pkglint/lib/rules.ts @@ -1,6 +1,7 @@ import * as fs from 'fs'; import * as path from 'path'; import * as caseUtils from 'case'; +import * as fse from 'fs-extra'; import * as glob from 'glob'; import * as semver from 'semver'; import { LICENSE, NOTICE } from './licensing'; @@ -11,6 +12,7 @@ import { fileShouldBe, fileShouldBeginWith, fileShouldContain, fileShouldNotContain, findInnerPackages, + findPackageDir, monoRepoRoot, } from './util'; @@ -1370,25 +1372,42 @@ export class FastFailingBuildScripts extends ValidationRule { } } +/** + * For every bundled dependency, we need to make sure that package and all of its transitive dependencies are nohoisted + * + * Bundling literally works by including `/node_modules/` into + * the tarball when `npm pack` is run, and if that directory does not exist at + * that exact location (because it has been hoisted) then NPM shrugs its + * shoulders and the dependency will be missing from the distribution. + * + * -- + * + * We also must not forget to nohoist transitive dependencies. Strictly + * speaking, we need to only hoist transitive *runtime* dependencies (`dependencies`, not + * `devDependencies`). + * + * For 3rd party deps, there is no difference and we short-circuit by adding a + * catch-all glob (`/node_modules//**`), but for in-repo bundled + * dependencies, we DO need the `devDependencies` installed as per normal and + * only the transitive runtime dependencies nohoisted (recursively). + */ export class YarnNohoistBundledDependencies extends ValidationRule { public readonly name = 'yarn/nohoist-bundled-dependencies'; - public validate(pkg: PackageJson) { + public async validate(pkg: PackageJson) { const bundled: string[] = pkg.json.bundleDependencies || pkg.json.bundledDependencies || []; - if (bundled.length === 0) { return; } const repoPackageJson = path.resolve(__dirname, '../../../package.json'); + const nohoist = new Set(require(repoPackageJson).workspaces.nohoist); // eslint-disable-line @typescript-eslint/no-require-imports - const nohoist: string[] = require(repoPackageJson).workspaces.nohoist; // eslint-disable-line @typescript-eslint/no-require-imports + const expectedNoHoistEntries = new Array(); - const missing = new Array(); for (const dep of bundled) { - for (const entry of [`${pkg.packageName}/${dep}`, `${pkg.packageName}/${dep}/**`]) { - if (nohoist.indexOf(entry) >= 0) { continue; } - missing.push(entry); - } + await noHoistDependency(pkg.packageName, dep, pkg.packageRoot); } + const missing = expectedNoHoistEntries.filter(entry => !nohoist.has(entry)); + if (missing.length > 0) { pkg.report({ ruleName: this.name, @@ -1400,6 +1419,23 @@ export class YarnNohoistBundledDependencies extends ValidationRule { }, }); } + + async function noHoistDependency(parentPackageHierarchy: string, depName: string, parentPackageDir: string) { + expectedNoHoistEntries.push(`${parentPackageHierarchy}/${depName}`); + + const dependencyDir = await findPackageDir(depName, parentPackageDir); + if (!isMonoRepoPackageDir(dependencyDir)) { + // Not one of ours, so we can just ignore everything underneath as well + expectedNoHoistEntries.push(`${parentPackageHierarchy}/${depName}/**`); + return; + } + + // A monorepo package, recurse into dependencies (but not devDependencies) + const packageJson = await fse.readJson(path.join(dependencyDir, 'package.json')); + for (const dep of Object.keys(packageJson.dependencies ?? {})) { + await noHoistDependency(`${parentPackageHierarchy}/${depName}`, dep, dependencyDir); + } + } } } @@ -1669,3 +1705,14 @@ function cdkMajorVersion() { const releaseJson = require(`${__dirname}/../../../release.json`); return releaseJson.majorVersion as number; } + +/** + * Whether this is a package in the monorepo or not + * + * We're going to be cheeky and not do too much analysis, and say that + * a package that has `/node_modules/` in the directory name is NOT in the + * monorepo, otherwise it is. + */ +function isMonoRepoPackageDir(packageDir: string) { + return path.resolve(packageDir).indexOf(`${path.sep}node_modules${path.sep}`) === -1; +} \ No newline at end of file diff --git a/tools/pkglint/lib/util.ts b/tools/pkglint/lib/util.ts index 10b4415a6c3ca..fe56512113ec2 100644 --- a/tools/pkglint/lib/util.ts +++ b/tools/pkglint/lib/util.ts @@ -190,3 +190,39 @@ export function* findInnerPackages(dir: string): IterableIterator { yield* findInnerPackages(path.join(dir, fname)); } } + +/** + * Find package directory + * + * Do this by walking upwards in the directory tree until we find + * `/node_modules//package.json`. + * + * ------- + * + * Things that we tried but don't work: + * + * 1. require.resolve(`${depName}/package.json`, { paths: [rootDir] }); + * + * Breaks with ES Modules if `package.json` has not been exported, which is + * being enforced starting Node12. + * + * 2. findPackageJsonUpwardFrom(require.resolve(depName, { paths: [rootDir] })) + * + * Breaks if a built-in NodeJS package name conflicts with an NPM package name + * (in Node15 `string_decoder` is introduced...) + */ +export async function findPackageDir(depName: string, rootDir: string) { + let prevDir; + let dir = rootDir; + while (dir !== prevDir) { + const candidateDir = path.join(dir, 'node_modules', depName); + if (await new Promise(ok => fs.exists(path.join(candidateDir, 'package.json'), ok))) { + return new Promise((ok, ko) => fs.realpath(candidateDir, (err, result) => err ? ko(err) : ok(result))); + } + + prevDir = dir; + dir = path.dirname(dir); // dirname('/') -> '/', dirname('c:\\') -> 'c:\\' + } + + throw new Error(`Did not find '${depName}' upwards of '${rootDir}'`); +} \ No newline at end of file From 063c785d857de0e69009921ffb56ea451bbf5c77 Mon Sep 17 00:00:00 2001 From: Rico Huijbers Date: Wed, 24 Mar 2021 15:50:37 +0000 Subject: [PATCH 9/9] CodeBuild also needs yaml-cfn --- package.json | 3 +++ packages/@aws-cdk/aws-codebuild/package.json | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 5c0e08023ff15..c79dbb9cfa2ff 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,9 @@ "nohoist": [ "**/jszip", "**/jszip/**", + "@aws-cdk/aws-codebuild/@aws-cdk/yaml-cfn", + "@aws-cdk/aws-codebuild/@aws-cdk/yaml-cfn/yaml", + "@aws-cdk/aws-codebuild/@aws-cdk/yaml-cfn/yaml/**", "@aws-cdk/aws-codepipeline-actions/case", "@aws-cdk/aws-codepipeline-actions/case/**", "@aws-cdk/aws-cognito/punycode", diff --git a/packages/@aws-cdk/aws-codebuild/package.json b/packages/@aws-cdk/aws-codebuild/package.json index e09f4f68e5264..95dba59271449 100644 --- a/packages/@aws-cdk/aws-codebuild/package.json +++ b/packages/@aws-cdk/aws-codebuild/package.json @@ -103,6 +103,9 @@ "@aws-cdk/yaml-cfn": "0.0.0", "constructs": "^3.2.0" }, + "bundledDependencies": [ + "@aws-cdk/yaml-cfn" + ], "homepage": "https://github.com/aws/aws-cdk", "peerDependencies": { "@aws-cdk/aws-cloudwatch": "0.0.0", @@ -119,7 +122,6 @@ "@aws-cdk/aws-secretsmanager": "0.0.0", "@aws-cdk/core": "0.0.0", "@aws-cdk/region-info": "0.0.0", - "@aws-cdk/yaml-cfn": "0.0.0", "constructs": "^3.2.0" }, "engines": {