Split CDK app between `smithy-rs` and `aws-sdk-rust` (#3514)

## Motivation and Context
A prerequisite for running canary in smithy-rs CI

## Description
This PR is essentially refactoring so that `canary-stack.ts` library can
be used by both `smithy-rs` and `aws-sdk-rust`. CDK apps are then split
into `bin/smithy-rs` and `bin/aws-sdk-rust`; the former is used by our
local development and the latter is used by our internal release
pipeline.

Merging this PR to the main branch will not affect anything. However, we
will need to update our internal release pipeline to use
`bin/aws-sdk-rust/*` instead when we release new SDKs:
- `npm run build` -> `npx tsc && npx cdk --app "node
build/bin/aws-sdk-rust/canary.js" synth`
- `npx cdk bootstrap` -> `npx cdk bootstrap --app "ts-node
--prefer-ts-exts bin/aws-sdk-rust/canary.ts"`
- `npx cdk --app "node build/bin/canary-only.js" synth` -> `npx cdk
--app "node build/bin/aws-sdk-rust/canary-only.js" synth`
- `npx cdk --app "node build/bin/canary-only.js" deploy --outputs-file
cdk-outputs.json` -> `npx cdk --app "node
build/bin/aws-sdk-rust/canary-only.js" deploy --outputs-file
cdk-outputs.json`

Also, when this PR is merged, we're ready to deploy a new canary stack
`smithy-rs-canary-stack` used by smithy-rs CI.

## Testing
> we will need to update our internal release pipeline to use
`bin/aws-sdk-rust/*` instead

Verified internally that it passed the release pipeline.

----

_By submitting this pull request, I confirm that you can use, modify,
copy, and redistribute this contribution, under the terms of your
choice._
This commit is contained in:
ysaito1001 2024-03-26 18:33:14 -05:00 committed by GitHub
parent 4fa38c404b
commit f5f94a21e6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 235 additions and 210 deletions

View File

@ -13,8 +13,8 @@ on the `canary-runner` and `canary-lambda`. To do this, run the following:
```bash
npm install
npm run build
npx cdk --app "node build/bin/canary-only.js" synth
npx cdk --app "node build/bin/canary-only.js" deploy --outputs-file cdk-outputs.json
npx cdk --app "node build/bin/smithy-rs/canary-only.js" synth
npx cdk --app "node build/bin/smithy-rs/canary-only.js" deploy --outputs-file cdk-outputs.json
```
From there, you can just point the `canary-runner` to the `cdk-outputs.json` to run it:

View File

@ -0,0 +1,21 @@
#!/usr/bin/env node
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
// This CDK app sets up the absolute minimum set of resources to successfully
// execute the canary with. However, this one is used by our internal CI only.
// Use canary-only.ts in the sibling smithy-rs directory instead.
import "source-map-support/register";
import { App } from "aws-cdk-lib";
import { CanaryStack } from "../../lib/canary-stack";
const app = new App();
const env = { region: "us-west-2" };
new CanaryStack(app, "aws-sdk-rust-canary-stack", {
lambdaExecutionRole: "aws-sdk-rust-canary-lambda-exec-role",
env,
});

View File

@ -0,0 +1,34 @@
#!/usr/bin/env node
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
// This CDK app, in addition to provisioning necessary resources for the canary,
// deploys a GihHub OIDC role to execute it from a CI in the `aws-sdk-rust` repository.
import "source-map-support/register";
import { App } from "aws-cdk-lib";
import { CanaryStack, OidcProps } from "../../lib/canary-stack";
import { OidcProviderStack } from "../../lib/oidc-provider-stack";
const app = new App();
const env = { region: "us-west-2" };
const oidcProviderStack = new OidcProviderStack(app, "oidc-provider-stack", {
env,
});
const oidcProps: OidcProps = {
roleId: "aws-sdk-rust",
roleName: "aws-sdk-rust-canary",
roleGithubOrg: "awslabs",
roleGithubRepo: "aws-sdk-rust",
provider: oidcProviderStack.githubActionsOidcProvider,
};
new CanaryStack(app, "aws-sdk-rust-canary-stack", {
lambdaExecutionRole: "aws-sdk-rust-canary-lambda-exec-role",
oidcProps,
env,
});

View File

@ -1,28 +0,0 @@
#!/usr/bin/env node
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
import "source-map-support/register";
import { App } from "aws-cdk-lib";
import { PullRequestCdnStack } from "../lib/smithy-rs/pull-request-cdn-stack";
import { CanaryStack } from "../lib/aws-sdk-rust/canary-stack";
import { OidcProviderStack } from "../lib/oidc-provider-stack";
const app = new App({});
const env = { region: "us-west-2" };
const oidcProviderStack = new OidcProviderStack(app, "oidc-provider-stack", {
env,
});
new PullRequestCdnStack(app, "smithy-rs-pull-request-cdn-stack", {
githubActionsOidcProvider: oidcProviderStack.githubActionsOidcProvider,
env,
});
new CanaryStack(app, "aws-sdk-rust-canary-stack", {
githubActionsOidcProvider: oidcProviderStack.githubActionsOidcProvider,
env,
});

View File

@ -4,14 +4,17 @@
* SPDX-License-Identifier: Apache-2.0
*/
// This CDK app sets up the absolute minimum set of resources to succesfully
// This CDK app sets up the absolute minimum set of resources to successfully
// execute the canary with.
import "source-map-support/register";
import { App } from "aws-cdk-lib";
import { CanaryStack } from "../lib/aws-sdk-rust/canary-stack";
import { CanaryStack } from "../../lib/canary-stack";
const app = new App();
const env = { region: "us-west-2" };
new CanaryStack(app, "aws-sdk-rust-canary-stack", { env });
new CanaryStack(app, "smithy-rs-canary-stack", {
lambdaExecutionRole: "smithy-rs-canary-lambda-exec-role",
env,
});

View File

@ -0,0 +1,43 @@
#!/usr/bin/env node
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
// This CDK app, in addition to provisioning necessary resources for CI checks
// and the canary, deploys a GihHub OIDC role to execute the canary from a CI
// in the `smithy-rs` repository.
import "source-map-support/register";
import { App } from "aws-cdk-lib";
import { PullRequestCdnStack } from "../../lib/smithy-rs/pull-request-cdn-stack";
import { CanaryStack, OidcProps } from "../../lib/canary-stack";
import { OidcProviderStack } from "../../lib/oidc-provider-stack";
const app = new App({});
const env = { region: "us-west-2" };
const oidcProviderStack = new OidcProviderStack(app, "oidc-provider-stack", {
env,
});
const githubActionsOidcProvider = oidcProviderStack.githubActionsOidcProvider;
const oidcProps: OidcProps = {
roleId: "smithy-rs",
roleName: "smithy-rs-canary",
roleGithubOrg: "smithy-lang",
roleGithubRepo: "smithy-rs",
provider: githubActionsOidcProvider,
};
new PullRequestCdnStack(app, "smithy-rs-pull-request-cdn-stack", {
githubActionsOidcProvider: githubActionsOidcProvider,
env,
});
new CanaryStack(app, "smithy-rs-canary-stack", {
lambdaExecutionRole: "smithy-rs-canary-lambda-exec-role",
oidcProps,
env,
});

View File

@ -1,5 +1,5 @@
{
"app": "npx ts-node --prefer-ts-exts bin/ci-cdk.ts",
"app": "npx ts-node --prefer-ts-exts bin/smithy-rs/ci-cdk.ts",
"watch": {
"include": [
"**"

View File

@ -16,25 +16,32 @@ import {
BucketEncryption,
CfnMultiRegionAccessPoint,
} from "aws-cdk-lib/aws-s3";
import { aws_s3express as s3express } from 'aws-cdk-lib';
import {
CfnDirectoryBucket
} from "aws-cdk-lib/aws-s3express";
import { CfnDirectoryBucket } from "aws-cdk-lib/aws-s3express";
import { StackProps, Stack, Tags, RemovalPolicy, Duration, CfnOutput } from "aws-cdk-lib";
import { Construct } from "constructs";
import { GitHubOidcRole } from "../constructs/github-oidc-role";
import { GitHubOidcRole } from "./constructs/github-oidc-role";
export interface OidcProps {
roleId: string;
roleName: string;
roleGithubOrg: string;
roleGithubRepo: string;
provider: OpenIdConnectProvider;
}
export interface Properties extends StackProps {
githubActionsOidcProvider?: OpenIdConnectProvider;
lambdaExecutionRole: string;
oidcProps?: OidcProps;
}
export class CanaryStack extends Stack {
public readonly awsSdkRustOidcRole?: GitHubOidcRole;
public readonly githubOidcRole?: GitHubOidcRole;
public readonly lambdaExecutionRole: Role;
public readonly canaryCodeBucket: Bucket;
public readonly canaryTestBucket: Bucket;
public readonly canaryTestMrap: CfnMultiRegionAccessPoint;
public readonly canaryTestExpressBucket: CfnDirectoryBucket;
public readonly canaryCdkOutputsBucket: Bucket;
public readonly lambdaExecutionRoleArn: CfnOutput;
public readonly canaryCodeBucketName: CfnOutput;
@ -48,16 +55,16 @@ export class CanaryStack extends Stack {
// Tag the resources created by this stack to make identifying resources easier
Tags.of(this).add("stack", id);
if (props.githubActionsOidcProvider) {
this.awsSdkRustOidcRole = new GitHubOidcRole(this, "aws-sdk-rust", {
name: "aws-sdk-rust-canary",
githubOrg: "awslabs",
githubRepo: "aws-sdk-rust",
oidcProvider: props.githubActionsOidcProvider,
if (props.oidcProps) {
this.githubOidcRole = new GitHubOidcRole(this, props.oidcProps.roleId, {
name: props.oidcProps.roleName,
githubOrg: props.oidcProps.roleGithubOrg,
githubRepo: props.oidcProps.roleGithubRepo,
oidcProvider: props.oidcProps.provider,
});
// Grant permission to create/invoke/delete a canary Lambda
this.awsSdkRustOidcRole.oidcRole.addToPolicy(
this.githubOidcRole.oidcRole.addToPolicy(
new PolicyStatement({
actions: [
"lambda:CreateFunction",
@ -72,7 +79,7 @@ export class CanaryStack extends Stack {
);
// Grant permission to put metric data to CloudWatch
this.awsSdkRustOidcRole.oidcRole.addToPolicy(
this.githubOidcRole.oidcRole.addToPolicy(
new PolicyStatement({
actions: ["cloudwatch:PutMetricData"],
effect: Effect.ALLOW,
@ -104,9 +111,21 @@ export class CanaryStack extends Stack {
});
// Allow the OIDC role to GetObject and PutObject to the code bucket
if (this.awsSdkRustOidcRole) {
this.canaryCodeBucket.grantRead(this.awsSdkRustOidcRole.oidcRole);
this.canaryCodeBucket.grantWrite(this.awsSdkRustOidcRole.oidcRole);
if (this.githubOidcRole) {
this.canaryCodeBucket.grantRead(this.githubOidcRole.oidcRole);
this.canaryCodeBucket.grantWrite(this.githubOidcRole.oidcRole);
}
this.canaryCdkOutputsBucket = new Bucket(this, "canary-cdk-outputs-bucket", {
blockPublicAccess: BlockPublicAccess.BLOCK_ALL,
encryption: BucketEncryption.S3_MANAGED,
versioned: false,
removalPolicy: RemovalPolicy.DESTROY,
});
// Allow the OIDC role to GetObject from the cdk outputs bucket
if (this.githubOidcRole) {
this.canaryCdkOutputsBucket.grantRead(this.githubOidcRole.oidcRole);
}
// Create S3 bucket for the canaries to talk to
@ -149,8 +168,8 @@ export class CanaryStack extends Stack {
});
}
this.canaryTestExpressBucket = new CfnDirectoryBucket(this, 'canary-test-express-bucket', {
dataRedundancy: 'SingleAvailabilityZone',
this.canaryTestExpressBucket = new CfnDirectoryBucket(this, "canary-test-express-bucket", {
dataRedundancy: "SingleAvailabilityZone",
locationName: "usw2-az1",
});
@ -163,7 +182,7 @@ export class CanaryStack extends Stack {
// Create a role for the canary Lambdas to assume
this.lambdaExecutionRole = new Role(this, "lambda-execution-role", {
roleName: "aws-sdk-rust-canary-lambda-exec-role",
roleName: props.lambdaExecutionRole,
assumedBy: new ServicePrincipal("lambda.amazonaws.com"),
});
@ -186,11 +205,13 @@ export class CanaryStack extends Stack {
// Allow canaries to talk to their test bucket
this.canaryTestBucket.grantReadWrite(this.lambdaExecutionRole);
this.lambdaExecutionRole.addToPolicy(new PolicyStatement({
actions: ['s3:GetObject', 's3:PutObject', 's3:DeleteObject'],
this.lambdaExecutionRole.addToPolicy(
new PolicyStatement({
actions: ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
effect: Effect.ALLOW,
resources: [`${canaryTestMrapBucketArn}`, `${canaryTestMrapBucketArn}/object/*`],
}));
}),
);
// Allow canaries to perform operations on test express bucket
// Unlike S3, no need to grant separate permissions for GetObject, PutObject, and so on because
@ -198,19 +219,19 @@ export class CanaryStack extends Stack {
// https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html#s3-express-security-iam-actions
this.lambdaExecutionRole.addToPolicy(
new PolicyStatement({
actions: ['s3express:CreateSession'],
actions: ["s3express:CreateSession"],
effect: Effect.ALLOW,
resources: [`${this.canaryTestExpressBucket.attrArn}`],
})
}),
);
// Allow canaries to list directory buckets
this.lambdaExecutionRole.addToPolicy(
new PolicyStatement({
actions: ['s3express:ListAllMyDirectoryBuckets'],
actions: ["s3express:ListAllMyDirectoryBuckets"],
effect: Effect.ALLOW,
resources: ["*"],
})
}),
);
// Allow canaries to call Transcribe's StartStreamTranscription
@ -232,8 +253,8 @@ export class CanaryStack extends Stack {
);
// Allow the OIDC role to pass the Lambda execution role to Lambda
if (this.awsSdkRustOidcRole) {
this.awsSdkRustOidcRole.oidcRole.addToPolicy(
if (this.githubOidcRole) {
this.githubOidcRole.oidcRole.addToPolicy(
new PolicyStatement({
actions: ["iam:PassRole"],
effect: Effect.ALLOW,

View File

@ -69,113 +69,42 @@
"dev": true
},
"node_modules/@babel/code-frame": {
"version": "7.23.5",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
"integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"version": "7.24.2",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
"dev": true,
"dependencies": {
"@babel/highlight": "^7.23.4",
"chalk": "^2.4.2"
"@babel/highlight": "^7.24.2",
"picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/code-frame/node_modules/ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"dependencies": {
"color-convert": "^1.9.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/@babel/code-frame/node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/@babel/code-frame/node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/@babel/code-frame/node_modules/color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"dev": true
},
"node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true,
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/@babel/code-frame/node_modules/has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/@babel/code-frame/node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"dependencies": {
"has-flag": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/@babel/compat-data": {
"version": "7.23.5",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
"integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
"version": "7.24.1",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz",
"integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
"version": "7.24.0",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz",
"integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==",
"version": "7.24.3",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz",
"integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.23.5",
"@babel/generator": "^7.23.6",
"@babel/code-frame": "^7.24.2",
"@babel/generator": "^7.24.1",
"@babel/helper-compilation-targets": "^7.23.6",
"@babel/helper-module-transforms": "^7.23.3",
"@babel/helpers": "^7.24.0",
"@babel/parser": "^7.24.0",
"@babel/helpers": "^7.24.1",
"@babel/parser": "^7.24.1",
"@babel/template": "^7.24.0",
"@babel/traverse": "^7.24.0",
"@babel/traverse": "^7.24.1",
"@babel/types": "^7.24.0",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
@ -207,14 +136,14 @@
}
},
"node_modules/@babel/generator": {
"version": "7.23.6",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
"integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"version": "7.24.1",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz",
"integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==",
"dev": true,
"dependencies": {
"@babel/types": "^7.23.6",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"@babel/types": "^7.24.0",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
},
"engines": {
@ -281,12 +210,12 @@
}
},
"node_modules/@babel/helper-module-imports": {
"version": "7.22.15",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
"integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"version": "7.24.3",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz",
"integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==",
"dev": true,
"dependencies": {
"@babel/types": "^7.22.15"
"@babel/types": "^7.24.0"
},
"engines": {
"node": ">=6.9.0"
@ -345,9 +274,9 @@
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
"integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
"version": "7.24.1",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz",
"integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@ -372,13 +301,13 @@
}
},
"node_modules/@babel/helpers": {
"version": "7.24.0",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz",
"integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==",
"version": "7.24.1",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz",
"integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==",
"dev": true,
"dependencies": {
"@babel/template": "^7.24.0",
"@babel/traverse": "^7.24.0",
"@babel/traverse": "^7.24.1",
"@babel/types": "^7.24.0"
},
"engines": {
@ -386,14 +315,15 @@
}
},
"node_modules/@babel/highlight": {
"version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
"integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"version": "7.24.2",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
"integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0"
"js-tokens": "^4.0.0",
"picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
@ -471,9 +401,9 @@
}
},
"node_modules/@babel/parser": {
"version": "7.24.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz",
"integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==",
"version": "7.24.1",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz",
"integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@ -630,12 +560,12 @@
}
},
"node_modules/@babel/plugin-syntax-typescript": {
"version": "7.23.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz",
"integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==",
"version": "7.24.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz",
"integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
"@babel/helper-plugin-utils": "^7.24.0"
},
"engines": {
"node": ">=6.9.0"
@ -659,18 +589,18 @@
}
},
"node_modules/@babel/traverse": {
"version": "7.24.0",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz",
"integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==",
"version": "7.24.1",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz",
"integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.23.5",
"@babel/generator": "^7.23.6",
"@babel/code-frame": "^7.24.1",
"@babel/generator": "^7.24.1",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
"@babel/parser": "^7.24.0",
"@babel/parser": "^7.24.1",
"@babel/types": "^7.24.0",
"debug": "^4.3.1",
"globals": "^11.1.0"
@ -1278,9 +1208,9 @@
}
},
"node_modules/@tsconfig/node10": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
"integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.10.tgz",
"integrity": "sha512-PiaIWIoPvO6qm6t114ropMCagj6YAF24j9OkCA2mJDXFnlionEwhsBCJ8yek4aib575BI3OkART/90WsgHgLWw==",
"dev": true
},
"node_modules/@tsconfig/node12": {
@ -1803,9 +1733,9 @@
"dev": true
},
"node_modules/aws-cdk": {
"version": "2.131.0",
"resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.131.0.tgz",
"integrity": "sha512-ji+MwGFGC88HE/EqV6/VARBp5mu3nXIDa/GYwtGycJqu6WqXhNZXWeDH0JsWaY6+BSUdpY6pr6KWpV+MDyVkDg==",
"version": "2.133.0",
"resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.133.0.tgz",
"integrity": "sha512-EwH8VgQQ8ODeMwjE3p+WhbcbWNkCbvuJJl+Py9IB5znGf7GwLcEmOu4YWBsBGPVu41SXbSAf36twMBrJytCFZA==",
"dev": true,
"bin": {
"cdk": "bin/cdk"
@ -1818,9 +1748,9 @@
}
},
"node_modules/aws-cdk-lib": {
"version": "2.131.0",
"resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.131.0.tgz",
"integrity": "sha512-9XLgiTgY+q0S3K93VPeJO0chIN8BZwZ3aSrILvF868Dz+0NTNrD2m5M0xGK5Rw0uoJS+N+DvGaz/2hLAiVqcBw==",
"version": "2.133.0",
"resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.133.0.tgz",
"integrity": "sha512-5/ezv8Ir2xyz3myeXQcODwrjVRN/cDD2OpBwU/ySFBe+uNac25OoHfTXwUPwE7oLj9qetSt6/i1QvY2iIs6yiQ==",
"bundleDependencies": [
"@balena/dockerignore",
"case",
@ -2419,9 +2349,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001593",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001593.tgz",
"integrity": "sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ==",
"version": "1.0.30001600",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz",
"integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==",
"dev": true,
"funding": [
{
@ -2747,9 +2677,9 @@
}
},
"node_modules/electron-to-chromium": {
"version": "1.4.690",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.690.tgz",
"integrity": "sha512-+2OAGjUx68xElQhydpcbqH50hE8Vs2K6TkAeLhICYfndb67CVH0UsZaijmRUE3rHlIxU1u0jxwhgVe6fK3YANA==",
"version": "1.4.716",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.716.tgz",
"integrity": "sha512-t/MXMzFKQC3UfMDpw7V5wdB/UAB8dWx4hEsy+fpPYJWW3gqh3u5T1uXp6vR+H6dGCPBxkRo+YBcapBLvbGQHRw==",
"dev": true
},
"node_modules/emittery": {
@ -3379,9 +3309,9 @@
}
},
"node_modules/hasown": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
"integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.2"

View File

@ -3,12 +3,13 @@
"version": "0.1.0",
"private": true,
"bin": {
"rust-sdk-ci-cdk": "bin/ci-cdk.js"
"smithy-rs-ci-cdk": "bin/smithy-rs/ci-cdk.js",
"aws-rust-sdk-canary": "bin/aws-sdk-rust/canary.js"
},
"scripts": {
"build": "tsc && cdk --app \"node build/bin/ci-cdk.js\" synth",
"build": "tsc && cdk --app \"node build/bin/smithy-rs/ci-cdk.js\" synth",
"cdk": "cdk",
"deploy": "cdk --app \"node build/bin/ci-cdk.js\" deploy --outputs-file cdk-outputs.json --all",
"deploy": "cdk --app \"node build/bin/smithy-rs/ci-cdk.js\" deploy --outputs-file cdk-outputs.json --all",
"format": "prettier --write '**/*.ts'",
"lint": "eslint --ext .ts lib",
"test": "jest",