@rio-cloud/cdk-v2-constructs 8.8.2 → 9.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/.jsii +3550 -7420
  2. package/lib/contributions/cop-frontend/cloudfront/rio-cloudfront-distribution.js +1 -5
  3. package/lib/contributions/smart-route/gitlab-runner/autoscaling-runner.js +1 -5
  4. package/lib/contributions/smart-route/gitlab-runner/runner-roles.js +1 -5
  5. package/lib/contributions/smart-route/gitlab-runner/spot-role.js +1 -5
  6. package/lib/contributions/team-claid/aws-backup-monitoring/aws-backup-monitoring.js +1 -7
  7. package/lib/contributions/team-claid/aws-glue/csv-table.js +1 -5
  8. package/lib/contributions/team-claid/aws-glue/schema.js +1 -5
  9. package/lib/contributions/team-claid/aws-glue/view-table.js +1 -5
  10. package/lib/contributions/team-claid/datadog-usage-monitoring/datadog-usage-monitoring.js +1 -5
  11. package/lib/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.js +1 -5
  12. package/lib/contributions/team-outbound-order-book/index.d.ts +1 -0
  13. package/lib/contributions/team-outbound-order-book/index.js +18 -0
  14. package/lib/contributions/team-shipper-inbound-blue/index.d.ts +1 -0
  15. package/lib/contributions/team-shipper-inbound-blue/index.js +18 -0
  16. package/lib/contributions/team-shipper-inbound-blue/pipeline/code-build-project.js +1 -5
  17. package/lib/contributions/team-shipper-inbound-blue/pipeline/pipeline-build-stage-actions.js +1 -5
  18. package/lib/contributions/team-transport/datadog/datadog-dashboard-construct.js +41 -0
  19. package/lib/contributions/team-transport/datadog/datadog-dashboard-downloader.js +120 -0
  20. package/lib/contributions/{team-transport-two → team-transport}/datadog/index.js +1 -1
  21. package/lib/contributions/{team-transport-two → team-transport}/datadog-synthetics/datadog-synthetics-test-custom-resource/handler.cjs +109 -106
  22. package/lib/contributions/team-transport/datadog-synthetics/datadog-synthetics-test.js +77 -0
  23. package/lib/contributions/{team-transport-two → team-transport}/datadog-synthetics/index.js +1 -1
  24. package/lib/contributions/team-transport/index.d.ts +3 -0
  25. package/lib/contributions/team-transport/index.js +20 -0
  26. package/lib/contributions/team-transport/pipeline/application-stage.js +16 -0
  27. package/lib/contributions/team-transport/pipeline/build-project.js +39 -0
  28. package/lib/contributions/{team-transport-two → team-transport}/pipeline/buildspecs.d.ts +3 -3
  29. package/lib/contributions/team-transport/pipeline/buildspecs.js +227 -0
  30. package/lib/contributions/team-transport/pipeline/datadog-monitors.js +45 -0
  31. package/lib/contributions/{team-transport-two → team-transport}/pipeline/index.js +1 -1
  32. package/lib/contributions/team-transport/pipeline/monitoring-deploy-step.js +28 -0
  33. package/lib/contributions/{team-transport-two → team-transport}/pipeline/pipeline-stack.d.ts +2 -0
  34. package/lib/contributions/team-transport/pipeline/pipeline-stack.js +430 -0
  35. package/lib/datadogv2/datadog-lambda-instrumentation.d.ts +1 -1
  36. package/lib/datadogv2/datadog-lambda-instrumentation.js +5 -2
  37. package/lib/datadogv2/secret-locator-custom-resource/on-create.cjs +85 -76
  38. package/lib/datadogv2/service-catalog-custom-resource/on-create.cjs +85 -82
  39. package/lib/datadogv2/validate-lambda-environment.d.ts +3 -0
  40. package/lib/datadogv2/validate-lambda-environment.js +33 -0
  41. package/lib/fargate/codedeploy-custom-resources/create-deployment-is-complete.cjs +85 -76
  42. package/lib/fargate/codedeploy-custom-resources/create-deployment-on-create.cjs +85 -76
  43. package/lib/fargate/codedeploy-custom-resources/run-monitoring-test-suite-runner.cjs +90 -81
  44. package/lib/index.d.ts +0 -8
  45. package/lib/index.js +1 -9
  46. package/lib/sbom-catalog/lambda/handler.cjs +88 -84
  47. package/package.json +22 -11
  48. package/version.json +1 -1
  49. package/lib/contributions/team-transport-two/datadog/datadog-dashboard-construct.js +0 -45
  50. package/lib/contributions/team-transport-two/datadog/datadog-dashboard-downloader.js +0 -120
  51. package/lib/contributions/team-transport-two/datadog-synthetics/datadog-synthetics-test.js +0 -81
  52. package/lib/contributions/team-transport-two/pipeline/application-stage.js +0 -16
  53. package/lib/contributions/team-transport-two/pipeline/build-project.js +0 -39
  54. package/lib/contributions/team-transport-two/pipeline/buildspecs.js +0 -205
  55. package/lib/contributions/team-transport-two/pipeline/datadog-monitors.js +0 -45
  56. package/lib/contributions/team-transport-two/pipeline/monitoring-deploy-step.js +0 -28
  57. package/lib/contributions/team-transport-two/pipeline/pipeline-stack.js +0 -432
  58. /package/lib/contributions/{team-transport-two → team-transport}/datadog/datadog-dashboard-construct.d.ts +0 -0
  59. /package/lib/contributions/{team-transport-two → team-transport}/datadog/datadog-dashboard-downloader.d.ts +0 -0
  60. /package/lib/contributions/{team-transport-two → team-transport}/datadog/index.d.ts +0 -0
  61. /package/lib/contributions/{team-transport-two → team-transport}/datadog-synthetics/datadog-synthetics-test.d.ts +0 -0
  62. /package/lib/contributions/{team-transport-two → team-transport}/datadog-synthetics/index.d.ts +0 -0
  63. /package/lib/contributions/{team-transport-two → team-transport}/pipeline/application-stage.d.ts +0 -0
  64. /package/lib/contributions/{team-transport-two → team-transport}/pipeline/build-project.d.ts +0 -0
  65. /package/lib/contributions/{team-transport-two → team-transport}/pipeline/datadog-monitors.d.ts +0 -0
  66. /package/lib/contributions/{team-transport-two → team-transport}/pipeline/index.d.ts +0 -0
  67. /package/lib/contributions/{team-transport-two → team-transport}/pipeline/monitoring-deploy-step.d.ts +0 -0
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatadogSyntheticsTest = void 0;
4
+ const cdk = require("aws-cdk-lib");
5
+ const lambda = require("aws-cdk-lib/aws-lambda");
6
+ const logs = require("aws-cdk-lib/aws-logs");
7
+ const customResources = require("aws-cdk-lib/custom-resources");
8
+ const constructs_1 = require("constructs");
9
+ const path = require("path");
10
+ const path_1 = require("path");
11
+ const constants_1 = require("../../../constants");
12
+ const datadogv2_1 = require("../../../datadogv2");
13
+ const rio_claidometer_1 = require("../../../rio-claidometer");
14
+ const rio_landing_zone_1 = require("../../../rio-landing-zone");
15
+ /**
16
+ * Creates a Datadog Synthetics test via Datadog API through a custom resource.
17
+ *
18
+ * See https://docs.datadoghq.com/api/latest/synthetics/ for more information (especially the typescript examples).
19
+ * Currently, tests of type `api`, `browser` and `mobile` are supported.
20
+ *
21
+ * The resource does the following modification to the passed `testConfig`:
22
+ * - Adds team name and service name to the test name.
23
+ * - Adds the usual tags (account_id, account_name, service, team, team_identifier) to the test tags.
24
+ */
25
+ class DatadogSyntheticsTest extends constructs_1.Construct {
26
+ constructor(scope, id, props) {
27
+ super(scope, id);
28
+ const datadogSecret = datadogv2_1.DatadogSharedSecret.credentialsSecret(this);
29
+ const teamName = rio_landing_zone_1.RioLandingZone.getTeamNameParameter(this).stringValue;
30
+ const teamIdentifier = rio_landing_zone_1.RioLandingZone.getTeamIdentifierParameter(this).stringValue;
31
+ const accountName = rio_landing_zone_1.RioLandingZone.getAccountNameParameter(this).stringValue;
32
+ const datadogHandler = new lambda.Function(this, 'DatadogSyntheticsHandler', {
33
+ runtime: constants_1.DEFAULT_NODE_RUNTIME,
34
+ code: lambda.Code.fromAsset((0, path_1.join)(__dirname, 'datadog-synthetics-test-custom-resource'), {
35
+ exclude: ['*.js', '*.d.ts'],
36
+ }),
37
+ handler: 'handler.handler',
38
+ environment: {
39
+ DATADOG_SECRET_ARN: datadogSecret.secretArn,
40
+ },
41
+ logRetention: logs.RetentionDays.ONE_WEEK,
42
+ });
43
+ datadogSecret.grantRead(datadogHandler);
44
+ const provider = new customResources.Provider(this, 'DatadogSyntheticsProvider', {
45
+ onEventHandler: datadogHandler,
46
+ });
47
+ const enhancedName = `${teamName} ${props.serviceName} ${props.testConfig.name}`;
48
+ const enhancedTags = [
49
+ ...(props.testConfig.tags ?? []),
50
+ `account_id:${cdk.Stack.of(this).account}`,
51
+ `account_name:${accountName}`,
52
+ `service:${props.serviceName}`,
53
+ `team:${teamName}`,
54
+ `team_identifier:${teamIdentifier}`,
55
+ ];
56
+ const enhancedTestConfig = {
57
+ ...props.testConfig,
58
+ name: enhancedName,
59
+ tags: enhancedTags,
60
+ };
61
+ new cdk.CustomResource(this, 'DatadogSyntheticsTestResource', {
62
+ serviceToken: provider.serviceToken,
63
+ properties: {
64
+ TestConfig: JSON.stringify(enhancedTestConfig),
65
+ },
66
+ });
67
+ const [feature, packageName] = __dirname.split(path.sep).reverse();
68
+ new rio_claidometer_1.Claidometer(this, 'Claidometer', {
69
+ product: rio_claidometer_1.ClaidometerProduct.CDK_CONTRIBUTION,
70
+ packageName,
71
+ feature,
72
+ version: '0.0.1',
73
+ });
74
+ }
75
+ }
76
+ exports.DatadogSyntheticsTest = DatadogSyntheticsTest;
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy1zeW50aGV0aWNzLXRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC9kYXRhZG9nLXN5bnRoZXRpY3MvZGF0YWRvZy1zeW50aGV0aWNzLXRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsbUNBQW1DO0FBQ25DLGlEQUFpRDtBQUNqRCw2Q0FBNkM7QUFDN0MsZ0VBQWdFO0FBQ2hFLDJDQUF1QztBQUN2Qyw2QkFBNkI7QUFDN0IsK0JBQTRCO0FBQzVCLGtEQUEwRDtBQUMxRCxrREFBeUQ7QUFDekQsOERBQTJFO0FBQzNFLGdFQUEyRDtBQWlCM0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxxQkFBc0IsU0FBUSxzQkFBUztJQUNsRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlDO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxhQUFhLEdBQUcsK0JBQW1CLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEUsTUFBTSxRQUFRLEdBQUcsaUNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDdkUsTUFBTSxjQUFjLEdBQUcsaUNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDbkYsTUFBTSxXQUFXLEdBQUcsaUNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFFN0UsTUFBTSxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUMzRSxPQUFPLEVBQUUsZ0NBQW9CO1lBQzdCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUseUNBQXlDLENBQUMsRUFBRTtnQkFDdEYsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQzthQUM1QixDQUFDO1lBQ0YsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUU7Z0JBQ1gsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLFNBQVM7YUFDNUM7WUFDRCxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRO1NBQzFDLENBQUMsQ0FBQztRQUNILGFBQWEsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSwyQkFBMkIsRUFBRTtZQUMvRSxjQUFjLEVBQUUsY0FBYztTQUMvQixDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakYsTUFBTSxZQUFZLEdBQUc7WUFDbkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNoQyxjQUFjLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUMxQyxnQkFBZ0IsV0FBVyxFQUFFO1lBQzdCLFdBQVcsS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUM5QixRQUFRLFFBQVEsRUFBRTtZQUNsQixtQkFBbUIsY0FBYyxFQUFFO1NBQ3BDLENBQUM7UUFDRixNQUFNLGtCQUFrQixHQUFtQjtZQUN6QyxHQUFHLEtBQUssQ0FBQyxVQUFVO1lBQ25CLElBQUksRUFBRSxZQUFZO1lBQ2xCLElBQUksRUFBRSxZQUFZO1NBQ25CLENBQUM7UUFFRixJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLCtCQUErQixFQUFFO1lBQzVELFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxVQUFVLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7YUFDL0M7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25FLElBQUksNkJBQVcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ25DLE9BQU8sRUFBRSxvQ0FBa0IsQ0FBQyxnQkFBZ0I7WUFDNUMsV0FBVztZQUNYLE9BQU87WUFDUCxPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF6REQsc0RBeURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBTeW50aGV0aWNzQVBJVGVzdCxcbiAgU3ludGhldGljc0Jyb3dzZXJUZXN0LFxuICBTeW50aGV0aWNzTW9iaWxlVGVzdCxcbn0gZnJvbSAnQGRhdGFkb2cvZGF0YWRvZy1hcGktY2xpZW50L2Rpc3QvcGFja2FnZXMvZGF0YWRvZy1hcGktY2xpZW50LXYxJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCAqIGFzIGN1c3RvbVJlc291cmNlcyBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IERFRkFVTFRfTk9ERV9SVU5USU1FIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IERhdGFkb2dTaGFyZWRTZWNyZXQgfSBmcm9tICcuLi8uLi8uLi9kYXRhZG9ndjInO1xuaW1wb3J0IHsgQ2xhaWRvbWV0ZXIsIENsYWlkb21ldGVyUHJvZHVjdCB9IGZyb20gJy4uLy4uLy4uL3Jpby1jbGFpZG9tZXRlcic7XG5pbXBvcnQgeyBSaW9MYW5kaW5nWm9uZSB9IGZyb20gJy4uLy4uLy4uL3Jpby1sYW5kaW5nLXpvbmUnO1xuXG50eXBlIFN5bnRoZXRpY3NUZXN0ID0gU3ludGhldGljc0FQSVRlc3QgfCBTeW50aGV0aWNzQnJvd3NlclRlc3QgfCBTeW50aGV0aWNzTW9iaWxlVGVzdDtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhZG9nU3ludGhldGljc1Rlc3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VydmljZSB0byB3aGljaCB0aGUgdGVzdCBiZWxvbmdzLlxuICAgKlxuICAgKiBVc2VkIHRvIGVuaGFuY2UgdGhlIHRlc3QgbmFtZSBhbmQgYXBwbHkgdGhlIGBzZXJ2aWNlYCB0YWcuXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogQGpzaWkgaWdub3JlXG4gICAqL1xuICByZWFkb25seSB0ZXN0Q29uZmlnOiBTeW50aGV0aWNzVGVzdDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgRGF0YWRvZyBTeW50aGV0aWNzIHRlc3QgdmlhIERhdGFkb2cgQVBJIHRocm91Z2ggYSBjdXN0b20gcmVzb3VyY2UuXG4gKlxuICogU2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2FwaS9sYXRlc3Qvc3ludGhldGljcy8gZm9yIG1vcmUgaW5mb3JtYXRpb24gKGVzcGVjaWFsbHkgdGhlIHR5cGVzY3JpcHQgZXhhbXBsZXMpLlxuICogQ3VycmVudGx5LCB0ZXN0cyBvZiB0eXBlIGBhcGlgLCBgYnJvd3NlcmAgYW5kIGBtb2JpbGVgIGFyZSBzdXBwb3J0ZWQuXG4gKlxuICogVGhlIHJlc291cmNlIGRvZXMgdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb24gdG8gdGhlIHBhc3NlZCBgdGVzdENvbmZpZ2A6XG4gKiAtIEFkZHMgdGVhbSBuYW1lIGFuZCBzZXJ2aWNlIG5hbWUgdG8gdGhlIHRlc3QgbmFtZS5cbiAqIC0gQWRkcyB0aGUgdXN1YWwgdGFncyAoYWNjb3VudF9pZCwgYWNjb3VudF9uYW1lLCBzZXJ2aWNlLCB0ZWFtLCB0ZWFtX2lkZW50aWZpZXIpIHRvIHRoZSB0ZXN0IHRhZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhZG9nU3ludGhldGljc1Rlc3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ1N5bnRoZXRpY3NUZXN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgZGF0YWRvZ1NlY3JldCA9IERhdGFkb2dTaGFyZWRTZWNyZXQuY3JlZGVudGlhbHNTZWNyZXQodGhpcyk7XG5cbiAgICBjb25zdCB0ZWFtTmFtZSA9IFJpb0xhbmRpbmdab25lLmdldFRlYW1OYW1lUGFyYW1ldGVyKHRoaXMpLnN0cmluZ1ZhbHVlO1xuICAgIGNvbnN0IHRlYW1JZGVudGlmaWVyID0gUmlvTGFuZGluZ1pvbmUuZ2V0VGVhbUlkZW50aWZpZXJQYXJhbWV0ZXIodGhpcykuc3RyaW5nVmFsdWU7XG4gICAgY29uc3QgYWNjb3VudE5hbWUgPSBSaW9MYW5kaW5nWm9uZS5nZXRBY2NvdW50TmFtZVBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZTtcblxuICAgIGNvbnN0IGRhdGFkb2dIYW5kbGVyID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCAnRGF0YWRvZ1N5bnRoZXRpY3NIYW5kbGVyJywge1xuICAgICAgcnVudGltZTogREVGQVVMVF9OT0RFX1JVTlRJTUUsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoam9pbihfX2Rpcm5hbWUsICdkYXRhZG9nLXN5bnRoZXRpY3MtdGVzdC1jdXN0b20tcmVzb3VyY2UnKSwge1xuICAgICAgICBleGNsdWRlOiBbJyouanMnLCAnKi5kLnRzJ10sXG4gICAgICB9KSxcbiAgICAgIGhhbmRsZXI6ICdoYW5kbGVyLmhhbmRsZXInLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgREFUQURPR19TRUNSRVRfQVJOOiBkYXRhZG9nU2VjcmV0LnNlY3JldEFybixcbiAgICAgIH0sXG4gICAgICBsb2dSZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgICB9KTtcbiAgICBkYXRhZG9nU2VjcmV0LmdyYW50UmVhZChkYXRhZG9nSGFuZGxlcik7XG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBjdXN0b21SZXNvdXJjZXMuUHJvdmlkZXIodGhpcywgJ0RhdGFkb2dTeW50aGV0aWNzUHJvdmlkZXInLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcjogZGF0YWRvZ0hhbmRsZXIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBlbmhhbmNlZE5hbWUgPSBgJHt0ZWFtTmFtZX0gJHtwcm9wcy5zZXJ2aWNlTmFtZX0gJHtwcm9wcy50ZXN0Q29uZmlnLm5hbWV9YDtcbiAgICBjb25zdCBlbmhhbmNlZFRhZ3MgPSBbXG4gICAgICAuLi4ocHJvcHMudGVzdENvbmZpZy50YWdzID8/IFtdKSxcbiAgICAgIGBhY2NvdW50X2lkOiR7Y2RrLlN0YWNrLm9mKHRoaXMpLmFjY291bnR9YCxcbiAgICAgIGBhY2NvdW50X25hbWU6JHthY2NvdW50TmFtZX1gLFxuICAgICAgYHNlcnZpY2U6JHtwcm9wcy5zZXJ2aWNlTmFtZX1gLFxuICAgICAgYHRlYW06JHt0ZWFtTmFtZX1gLFxuICAgICAgYHRlYW1faWRlbnRpZmllcjoke3RlYW1JZGVudGlmaWVyfWAsXG4gICAgXTtcbiAgICBjb25zdCBlbmhhbmNlZFRlc3RDb25maWc6IFN5bnRoZXRpY3NUZXN0ID0ge1xuICAgICAgLi4ucHJvcHMudGVzdENvbmZpZyxcbiAgICAgIG5hbWU6IGVuaGFuY2VkTmFtZSxcbiAgICAgIHRhZ3M6IGVuaGFuY2VkVGFncyxcbiAgICB9O1xuXG4gICAgbmV3IGNkay5DdXN0b21SZXNvdXJjZSh0aGlzLCAnRGF0YWRvZ1N5bnRoZXRpY3NUZXN0UmVzb3VyY2UnLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgVGVzdENvbmZpZzogSlNPTi5zdHJpbmdpZnkoZW5oYW5jZWRUZXN0Q29uZmlnKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBbZmVhdHVyZSwgcGFja2FnZU5hbWVdID0gX19kaXJuYW1lLnNwbGl0KHBhdGguc2VwKS5yZXZlcnNlKCk7XG4gICAgbmV3IENsYWlkb21ldGVyKHRoaXMsICdDbGFpZG9tZXRlcicsIHtcbiAgICAgIHByb2R1Y3Q6IENsYWlkb21ldGVyUHJvZHVjdC5DREtfQ09OVFJJQlVUSU9OLFxuICAgICAgcGFja2FnZU5hbWUsXG4gICAgICBmZWF0dXJlLFxuICAgICAgdmVyc2lvbjogJzAuMC4xJyxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -15,4 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./datadog-synthetics-test"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vZGF0YWRvZy1zeW50aGV0aWNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0REFBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RhdGFkb2ctc3ludGhldGljcy10ZXN0JztcbiJdfQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC9kYXRhZG9nLXN5bnRoZXRpY3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDREQUEwQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGF0YWRvZy1zeW50aGV0aWNzLXRlc3QnO1xuIl19
@@ -0,0 +1,3 @@
1
+ export * from './datadog';
2
+ export * from './datadog-synthetics';
3
+ export * from './pipeline';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./datadog"), exports);
18
+ __exportStar(require("./datadog-synthetics"), exports);
19
+ __exportStar(require("./pipeline"), exports);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNENBQTBCO0FBQzFCLHVEQUFxQztBQUNyQyw2Q0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RhdGFkb2cnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhZG9nLXN5bnRoZXRpY3MnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZSc7XG4iXX0=
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Application = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ class Application extends aws_cdk_lib_1.Stage {
6
+ constructor(scope, id, props) {
7
+ super(scope, id, props);
8
+ props.appStackFactory.create(this, {
9
+ serviceName: props.serviceName,
10
+ stackName: props.serviceName,
11
+ version: props.version,
12
+ });
13
+ }
14
+ }
15
+ exports.Application = Application;
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tc3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC9waXBlbGluZS9hcHBsaWNhdGlvbi1zdGFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBZ0Q7QUFVaEQsTUFBYSxXQUFZLFNBQVEsbUJBQUs7SUFDcEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QjtRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDakMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM1QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBVkQsa0NBVUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFnZSwgU3RhZ2VQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSUFwcFN0YWNrRmFjdG9yeSB9IGZyb20gJy4vcGlwZWxpbmUtc3RhY2snO1xuXG5pbnRlcmZhY2UgQXBwbGljYXRpb25Qcm9wcyBleHRlbmRzIFN0YWdlUHJvcHMge1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFwcFN0YWNrRmFjdG9yeTogSUFwcFN0YWNrRmFjdG9yeTtcbn1cblxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uIGV4dGVuZHMgU3RhZ2Uge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXBwbGljYXRpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgcHJvcHMuYXBwU3RhY2tGYWN0b3J5LmNyZWF0ZSh0aGlzLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBzdGFja05hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgdmVyc2lvbjogcHJvcHMudmVyc2lvbixcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RioCodeBuildProject = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const codebuild = require("aws-cdk-lib/aws-codebuild");
6
+ const codepipeline = require("aws-cdk-lib/aws-codepipeline");
7
+ const pipelines = require("aws-cdk-lib/pipelines");
8
+ class RioCodeBuildProject extends pipelines.CodeBuildStep {
9
+ constructor(scope, id, props) {
10
+ super(id, {
11
+ input: props.input,
12
+ partialBuildSpec: props.partialBuildSpec,
13
+ commands: [],
14
+ buildEnvironment: {
15
+ buildImage: props?.buildEnvironment?.buildImage ||
16
+ codebuild.LinuxBuildImage.fromCodeBuildImageId('aws/codebuild/amazonlinux2-x86_64-standard:5.0'),
17
+ computeType: props?.buildEnvironment?.computeType || codebuild.ComputeType.LARGE,
18
+ environmentVariables: {
19
+ AWS_ACCOUNT_ID: { value: aws_cdk_lib_1.Stack.of(scope).account },
20
+ SERVICE_NAME: { value: props.serviceName },
21
+ HOSTED_ZONE: { value: props.hostedZoneName },
22
+ ...props.buildEnvironment?.environmentVariables,
23
+ },
24
+ privileged: props?.buildEnvironment?.privileged,
25
+ certificate: props?.buildEnvironment?.certificate,
26
+ },
27
+ primaryOutputDirectory: props.cdkOutDirectory ?? './',
28
+ env: {
29
+ PIPELINE_EXECUTION_ID: codepipeline.GlobalVariables.executionId,
30
+ ...props.env,
31
+ },
32
+ cache: props.cacheBucket
33
+ ? codebuild.Cache.bucket(props.cacheBucket, { prefix: `codebuild-cache/${props.serviceName}` })
34
+ : undefined,
35
+ });
36
+ }
37
+ }
38
+ exports.RioCodeBuildProject = RioCodeBuildProject;
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtcHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0L3BpcGVsaW5lL2J1aWxkLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQW9DO0FBQ3BDLHVEQUF1RDtBQUN2RCw2REFBNkQ7QUFFN0QsbURBQW1EO0FBY25ELE1BQWEsbUJBQW9CLFNBQVEsU0FBUyxDQUFDLGFBQWE7SUFDOUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN2RSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ1IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2xCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7WUFDeEMsUUFBUSxFQUFFLEVBQUU7WUFDWixnQkFBZ0IsRUFBRTtnQkFDaEIsVUFBVSxFQUNSLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxVQUFVO29CQUNuQyxTQUFTLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUFDLGdEQUFnRCxDQUFDO2dCQUNsRyxXQUFXLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUs7Z0JBQ2hGLG9CQUFvQixFQUFFO29CQUNwQixjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFO29CQUNsRCxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRTtvQkFDMUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUU7b0JBQzVDLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLG9CQUFvQjtpQkFDaEQ7Z0JBQ0QsVUFBVSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxVQUFVO2dCQUMvQyxXQUFXLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFdBQVc7YUFDbEQ7WUFDRCxzQkFBc0IsRUFBRSxLQUFLLENBQUMsZUFBZSxJQUFJLElBQUk7WUFDckQsR0FBRyxFQUFFO2dCQUNILHFCQUFxQixFQUFFLFlBQVksQ0FBQyxlQUFlLENBQUMsV0FBVztnQkFDL0QsR0FBRyxLQUFLLENBQUMsR0FBRzthQUNiO1lBQ0QsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUN0QixDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQy9GLENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBOUJELGtEQThCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY29kZWJ1aWxkIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0ICogYXMgY29kZXBpcGVsaW5lIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUnO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBwaXBlbGluZXMgZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJpb0NvZGVCdWlsZFByb2plY3RQcm9wcyB7XG4gIGlucHV0OiBwaXBlbGluZXMuSUZpbGVTZXRQcm9kdWNlcjtcbiAgY2RrT3V0RGlyZWN0b3J5Pzogc3RyaW5nO1xuICBwYXJ0aWFsQnVpbGRTcGVjOiBjb2RlYnVpbGQuQnVpbGRTcGVjO1xuICBidWlsZEVudmlyb25tZW50PzogY29kZWJ1aWxkLkJ1aWxkRW52aXJvbm1lbnQ7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIGhvc3RlZFpvbmVOYW1lOiBzdHJpbmc7XG4gIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNhY2hlQnVja2V0PzogSUJ1Y2tldDtcbn1cblxuZXhwb3J0IGNsYXNzIFJpb0NvZGVCdWlsZFByb2plY3QgZXh0ZW5kcyBwaXBlbGluZXMuQ29kZUJ1aWxkU3RlcCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSaW9Db2RlQnVpbGRQcm9qZWN0UHJvcHMpIHtcbiAgICBzdXBlcihpZCwge1xuICAgICAgaW5wdXQ6IHByb3BzLmlucHV0LFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogcHJvcHMucGFydGlhbEJ1aWxkU3BlYyxcbiAgICAgIGNvbW1hbmRzOiBbXSxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgYnVpbGRJbWFnZTpcbiAgICAgICAgICBwcm9wcz8uYnVpbGRFbnZpcm9ubWVudD8uYnVpbGRJbWFnZSB8fFxuICAgICAgICAgIGNvZGVidWlsZC5MaW51eEJ1aWxkSW1hZ2UuZnJvbUNvZGVCdWlsZEltYWdlSWQoJ2F3cy9jb2RlYnVpbGQvYW1hem9ubGludXgyLXg4Nl82NC1zdGFuZGFyZDo1LjAnKSxcbiAgICAgICAgY29tcHV0ZVR5cGU6IHByb3BzPy5idWlsZEVudmlyb25tZW50Py5jb21wdXRlVHlwZSB8fCBjb2RlYnVpbGQuQ29tcHV0ZVR5cGUuTEFSR0UsXG4gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgICAgQVdTX0FDQ09VTlRfSUQ6IHsgdmFsdWU6IFN0YWNrLm9mKHNjb3BlKS5hY2NvdW50IH0sXG4gICAgICAgICAgU0VSVklDRV9OQU1FOiB7IHZhbHVlOiBwcm9wcy5zZXJ2aWNlTmFtZSB9LFxuICAgICAgICAgIEhPU1RFRF9aT05FOiB7IHZhbHVlOiBwcm9wcy5ob3N0ZWRab25lTmFtZSB9LFxuICAgICAgICAgIC4uLnByb3BzLmJ1aWxkRW52aXJvbm1lbnQ/LmVudmlyb25tZW50VmFyaWFibGVzLFxuICAgICAgICB9LFxuICAgICAgICBwcml2aWxlZ2VkOiBwcm9wcz8uYnVpbGRFbnZpcm9ubWVudD8ucHJpdmlsZWdlZCxcbiAgICAgICAgY2VydGlmaWNhdGU6IHByb3BzPy5idWlsZEVudmlyb25tZW50Py5jZXJ0aWZpY2F0ZSxcbiAgICAgIH0sXG4gICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBwcm9wcy5jZGtPdXREaXJlY3RvcnkgPz8gJy4vJyxcbiAgICAgIGVudjoge1xuICAgICAgICBQSVBFTElORV9FWEVDVVRJT05fSUQ6IGNvZGVwaXBlbGluZS5HbG9iYWxWYXJpYWJsZXMuZXhlY3V0aW9uSWQsXG4gICAgICAgIC4uLnByb3BzLmVudixcbiAgICAgIH0sXG4gICAgICBjYWNoZTogcHJvcHMuY2FjaGVCdWNrZXRcbiAgICAgICAgPyBjb2RlYnVpbGQuQ2FjaGUuYnVja2V0KHByb3BzLmNhY2hlQnVja2V0LCB7IHByZWZpeDogYGNvZGVidWlsZC1jYWNoZS8ke3Byb3BzLnNlcnZpY2VOYW1lfWAgfSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { BuildSpec } from 'aws-cdk-lib/aws-codebuild';
2
- import { PipelineFeatures } from './pipeline-stack';
3
- export declare const createMainBuildSpec: (features: PipelineFeatures) => BuildSpec;
4
- export declare const createVulnerabilityBuildSpec: (features: PipelineFeatures) => BuildSpec;
2
+ import { CodeBuildOptions, PipelineFeatures } from './pipeline-stack';
3
+ export declare const createMainBuildSpec: (features: PipelineFeatures, options?: CodeBuildOptions) => BuildSpec;
4
+ export declare const createVulnerabilityBuildSpec: (features: PipelineFeatures, options?: CodeBuildOptions) => BuildSpec;
5
5
  export declare const logCommitHash: () => string[];
6
6
  export declare const exportCommitHashAsVersion: () => string[];
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exportCommitHashAsVersion = exports.logCommitHash = exports.createVulnerabilityBuildSpec = exports.createMainBuildSpec = void 0;
4
+ const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
5
+ const DEFAULT_NODE_VERSION = '24';
6
+ const EXACT_VERSION = /^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)$/;
7
+ const createMainBuildSpec = (features, options) => {
8
+ const runtime = getRuntimeOptions(options);
9
+ const env = {};
10
+ const buildCommands = [];
11
+ buildCommands.push(...(0, exports.exportCommitHashAsVersion)());
12
+ env['parameter-store'] = {
13
+ ACCOUNT_NAME: '/config/account/name',
14
+ TEAM_IDENTIFIER: '/config/team/identifier',
15
+ };
16
+ if (features.gradleBuild) {
17
+ buildCommands.push(...gradleBuildCommands(features.kafkaIntegration ?? false));
18
+ env['parameter-store'] = {
19
+ ...(env['parameter-store'] ?? {}),
20
+ SERVICE_KEYSTORE_PASSWORD: '/config/${SERVICE_NAME}/service-keystore-password',
21
+ LICENSE_BUCKET_NAME: '/config/oss-licenses/bucket-name',
22
+ };
23
+ }
24
+ if (features.kafkaIntegration) {
25
+ env['parameter-store'] = {
26
+ ...(env['parameter-store'] ?? {}),
27
+ CREATE_AND_SIGN_CERTIFICATE_SCRIPT_S3_LOCATION: '/config/kafka-integration/create-and-sign-certificate-script-s3-location',
28
+ };
29
+ }
30
+ if (features.npmBuild) {
31
+ env.variables = {
32
+ CI: 'true',
33
+ };
34
+ buildCommands.push(...npmBuildCommands());
35
+ }
36
+ if (features.additionalBuildCommands) {
37
+ buildCommands.push('### ADDITIONAL BUILD COMMANDS ###', ...features.additionalBuildCommands);
38
+ }
39
+ buildCommands.push(...infrastructureBuildCommands());
40
+ return aws_codebuild_1.BuildSpec.fromObject({
41
+ version: '0.2',
42
+ env,
43
+ phases: {
44
+ install: {
45
+ 'runtime-versions': getRuntimes(features, runtime.nodejsVersion),
46
+ ...(runtime.commands.length > 0 ? { commands: runtime.commands } : {}),
47
+ },
48
+ pre_build: {
49
+ commands: (0, exports.logCommitHash)(),
50
+ },
51
+ build: {
52
+ commands: buildCommands,
53
+ },
54
+ post_build: {
55
+ commands: (0, exports.logCommitHash)(),
56
+ },
57
+ },
58
+ reports: createReports(features),
59
+ cache: {
60
+ paths: cachePaths(),
61
+ },
62
+ });
63
+ };
64
+ exports.createMainBuildSpec = createMainBuildSpec;
65
+ const createVulnerabilityBuildSpec = (features, options) => {
66
+ const runtime = getRuntimeOptions(options);
67
+ const env = {};
68
+ const buildCommands = [];
69
+ if (features.gradleBuild) {
70
+ env.variables = {
71
+ LANG: 'C.UTF-8',
72
+ };
73
+ env['parameter-store'] = {
74
+ NIST_DATA_MIRROR_URL: '/config/nist-data-mirror/url',
75
+ };
76
+ env['secrets-manager'] = {
77
+ SONATYPE_OSS_INDEX_USERNAME: 'arn:aws:secretsmanager:eu-west-1:577146897785:secret:/rio/config/sonatype-oss-index/credentials:username',
78
+ SONATYPE_OSS_INDEX_PASSWORD: 'arn:aws:secretsmanager:eu-west-1:577146897785:secret:/rio/config/sonatype-oss-index/credentials:password',
79
+ };
80
+ buildCommands.push(...['### GRADLE VULNERABILITY CHECK ###', './gradlew -Dorg.gradle.jvmargs=-Xmx4g dependencyCheckAnalyze']);
81
+ }
82
+ if (features.npmBuild) {
83
+ buildCommands.push(...[
84
+ '### NPM VULNERABILITY CHECK ###',
85
+ 'npm audit --registry https://registry.npmjs.org --audit-level moderate --omit=dev',
86
+ ]);
87
+ }
88
+ buildCommands.push(...[
89
+ '### INFRASTRUCTURE VULNERABILITY CHECK ###',
90
+ 'cd infrastructure',
91
+ 'npm audit --registry https://registry.npmjs.org --audit-level moderate --omit=dev',
92
+ 'cd ..',
93
+ ]);
94
+ return aws_codebuild_1.BuildSpec.fromObject({
95
+ version: '0.2',
96
+ env,
97
+ phases: {
98
+ install: {
99
+ 'runtime-versions': getRuntimes(features, runtime.nodejsVersion),
100
+ ...(runtime.commands.length > 0 ? { commands: runtime.commands } : {}),
101
+ },
102
+ pre_build: {
103
+ commands: (0, exports.logCommitHash)(),
104
+ },
105
+ build: {
106
+ commands: buildCommands,
107
+ },
108
+ post_build: {
109
+ commands: (0, exports.logCommitHash)(),
110
+ },
111
+ },
112
+ cache: {
113
+ paths: cachePathsVulnerability(),
114
+ },
115
+ });
116
+ };
117
+ exports.createVulnerabilityBuildSpec = createVulnerabilityBuildSpec;
118
+ const getRuntimes = (features, nodejsVersion) => {
119
+ const runtimes = {};
120
+ if (features.gradleBuild) {
121
+ runtimes.java = 'corretto21';
122
+ }
123
+ runtimes.nodejs = nodejsVersion;
124
+ return runtimes;
125
+ };
126
+ const getRuntimeOptions = (options) => {
127
+ const commands = [];
128
+ if (options?.nodejsVersion !== undefined) {
129
+ assertExactVersion('nodejsVersion', options.nodejsVersion);
130
+ commands.push(`test "$(node --version)" = "v${options.nodejsVersion}"`);
131
+ }
132
+ if (options?.npmVersion !== undefined) {
133
+ assertExactVersion('npmVersion', options.npmVersion);
134
+ commands.push(`test "$(npm --version)" = "${options.npmVersion}"`);
135
+ }
136
+ return { nodejsVersion: options?.nodejsVersion ?? DEFAULT_NODE_VERSION, commands };
137
+ };
138
+ const assertExactVersion = (name, version) => {
139
+ if (version.match(EXACT_VERSION)?.[0] !== version) {
140
+ throw new Error(`${name} must be an exact major.minor.patch version`);
141
+ }
142
+ };
143
+ const logCommitHash = () => [
144
+ '(echo "Build triggered by commit " && git log --pretty=format:"%h%x09%an%x09%s" -n 1 ) | tr -d "\\n"',
145
+ ];
146
+ exports.logCommitHash = logCommitHash;
147
+ const exportCommitHashAsVersion = () => ['export GIT_VERSION=$(git rev-parse HEAD)'];
148
+ exports.exportCommitHashAsVersion = exportCommitHashAsVersion;
149
+ const infrastructureBuildCommands = () => [
150
+ '### INFRASTRUCTURE BUILD ###',
151
+ 'cd infrastructure',
152
+ 'npm ci',
153
+ `npx rio-license-checker --type npm-backend --account-name \${ACCOUNT_NAME} --service-name \${SERVICE_NAME} --upload`,
154
+ 'npm run cdk synth 1> /dev/null',
155
+ // In pipeline: Error parsing reference: is not a valid repository/tag: invalid reference format.
156
+ // workaround due to https://github.com/aws/aws-cdk/issues/18044',
157
+ 'find ./ -type f -name "*DeployApplicationStacks*.assets.json" -print0 | xargs --no-run-if-empty -0 sed --in-place \'s|docker load -i asset.|docker load -i ../asset.|g\'',
158
+ 'cd ..',
159
+ ];
160
+ const gradleBuildCommands = (kafkaIntegration) => {
161
+ const commands = [];
162
+ commands.push(...[
163
+ '### GRADLE BUILD ###',
164
+ './gradlew clean build',
165
+ '# license check',
166
+ 'npm ci',
167
+ `npx rio-license-checker --type gradle --account-name \${ACCOUNT_NAME} --service-name \${SERVICE_NAME} --upload`,
168
+ '# self signed certificate',
169
+ 'set -u; keytool -genkey -alias InternalServiceCertificate -keyalg RSA -keystore containerfiles/service-keystore.p12 -validity 3650 -storetype PKCS12 -dname "CN=internal.service.${SERVICE_NAME}.${HOSTED_ZONE}, OU=Logistics, O=Rio, L=Munich, ST=BY, C=DE" -keypass ${SERVICE_KEYSTORE_PASSWORD} -storepass ${SERVICE_KEYSTORE_PASSWORD}',
170
+ ]);
171
+ if (kafkaIntegration) {
172
+ commands.push(...[
173
+ '# kafka certificate',
174
+ 'set -u; aws s3 cp --quiet s3://${CREATE_AND_SIGN_CERTIFICATE_SCRIPT_S3_LOCATION} create-and-sign-certificate',
175
+ 'chmod +x create-and-sign-certificate',
176
+ 'set -u; ./create-and-sign-certificate --keystore-password ${SERVICE_KEYSTORE_PASSWORD} --fqdn ${SERVICE_NAME}.${HOSTED_ZONE}',
177
+ 'cp /cert/certificate.p12 containerfiles/kafka-keystore.p12',
178
+ ]);
179
+ }
180
+ commands.push(...['# docker image build', './gradlew jibBuildTar --quiet']);
181
+ return commands;
182
+ };
183
+ const npmBuildCommands = () => [
184
+ '### NPM BUILD ###',
185
+ 'export VITE_GIT_VERSION=$GIT_VERSION',
186
+ 'export VITE_AWS_ACCOUNT_ID=$AWS_ACCOUNT_ID',
187
+ 'export VITE_AWS_ACCOUNT_NAME=$ACCOUNT_NAME',
188
+ 'export VITE_SERVICE_NAME=$SERVICE_NAME',
189
+ 'export VITE_TEAM_IDENTIFIER=$TEAM_IDENTIFIER',
190
+ 'npm ci',
191
+ 'npm run lint',
192
+ 'npm run test:ci',
193
+ `npx rio-license-checker --type npm-frontend --account-name \${ACCOUNT_NAME} --service-name \${SERVICE_NAME} --upload`,
194
+ 'npm run build',
195
+ ];
196
+ const cachePaths = () => [
197
+ '/cert/**/*',
198
+ '/root/.cache/**/*',
199
+ '/root/.npm/**/*',
200
+ '/root/.gradle/caches/**/*',
201
+ '/root/.gradle/wrapper/**/*',
202
+ '/root/google-cloud-tools-java/jib/**/*',
203
+ 'target/jib-cache/**/*',
204
+ ];
205
+ const cachePathsVulnerability = () => [
206
+ '/root/.cache/**/*',
207
+ '/root/.gradle/caches/**/*',
208
+ '/root/.gradle/wrapper/**/*',
209
+ '/root/.gradle/dependency-check-data/**/*',
210
+ ];
211
+ const createReports = (features) => {
212
+ const reports = {};
213
+ if (features.gradleBuild) {
214
+ reports.GradleBuildTestResults = {
215
+ files: ['**/*'],
216
+ 'base-directory': 'build/test-results',
217
+ };
218
+ }
219
+ if (features.npmBuild) {
220
+ reports.NpmBuildTestResults = {
221
+ files: ['**/*'],
222
+ 'base-directory': 'results',
223
+ };
224
+ }
225
+ return reports;
226
+ };
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRzcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0L3BpcGVsaW5lL2J1aWxkc3BlY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkRBQXNEO0FBR3RELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLE1BQU0sYUFBYSxHQUFHLGtEQUFrRCxDQUFDO0FBRWxFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxRQUEwQixFQUFFLE9BQTBCLEVBQWEsRUFBRTtJQUN2RyxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxNQUFNLEdBQUcsR0FBMkMsRUFBRSxDQUFDO0lBQ3ZELE1BQU0sYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUNuQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBQSxpQ0FBeUIsR0FBRSxDQUFDLENBQUM7SUFFbkQsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUc7UUFDdkIsWUFBWSxFQUFFLHNCQUFzQjtRQUNwQyxlQUFlLEVBQUUseUJBQXlCO0tBQzNDLENBQUM7SUFFRixJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0UsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUc7WUFDdkIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyx5QkFBeUIsRUFBRSxtREFBbUQ7WUFDOUUsbUJBQW1CLEVBQUUsa0NBQWtDO1NBQ3hELENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QixHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRztZ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UUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRztZQUMvQixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDZixnQkFBZ0IsRUFBRSxvQkFBb0I7U0FDdkMsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsbUJBQW1CLEdBQUc7WUFDNUIsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2YsZ0JBQWdCLEVBQUUsU0FBUztTQUM1QixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkU3BlYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgQ29kZUJ1aWxkT3B0aW9ucywgUGlwZWxpbmVGZWF0dXJlcyB9IGZyb20gJy4vcGlwZWxpbmUtc3RhY2snO1xuXG5jb25zdCBERUZBVUxUX05PREVfVkVSU0lPTiA9ICcyNCc7XG5jb25zdCBFWEFDVF9WRVJTSU9OID0gL14oPzowfFsxLTldXFxkKilcXC4oPzowfFsxLTldXFxkKilcXC4oPzowfFsxLTldXFxkKikkLztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1haW5CdWlsZFNwZWMgPSAoZmVhdHVyZXM6IFBpcGVsaW5lRmVhdHVyZXMsIG9wdGlvbnM/OiBDb2RlQnVpbGRPcHRpb25zKTogQnVpbGRTcGVjID0+IHtcbiAgY29uc3QgcnVudGltZSA9IGdldFJ1bnRpbWVPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBlbnY6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge307XG4gIGNvbnN0IGJ1aWxkQ29tbWFuZHM6IHN0cmluZ1tdID0gW107XG4gIGJ1aWxkQ29tbWFuZHMucHVzaCguLi5leHBvcnRDb21taXRIYXNoQXNWZXJzaW9uKCkpO1xuXG4gIGVudlsncGFyYW1ldGVyLXN0b3JlJ10gPSB7XG4gICAgQUNDT1VOVF9OQU1FOiAnL2NvbmZpZy9hY2NvdW50L25hbWUnLFxuICAgIFRFQU1fSURFTlRJRklFUjogJy9jb25maWcvdGVhbS9pZGVudGlmaWVyJyxcbiAgfTtcblxuICBpZiAoZmVhdHVyZXMuZ3JhZGxlQnVpbGQpIHtcbiAgICBidWlsZENvbW1hbmRzLnB1c2goLi4uZ3JhZGxlQnVpbGRDb21tYW5kcyhmZWF0dXJlcy5rYWZrYUludGVncmF0aW9uID8/IGZhbHNlKSk7XG4gICAgZW52WydwYXJhbWV0ZXItc3RvcmUnXSA9IHtcbiAgICAgIC4uLihlbnZbJ3BhcmFtZXRlci1zdG9yZSddID8/IHt9KSxcbiAgICAgIFNFUlZJQ0VfS0VZU1RPUkVfUEFTU1dPUkQ6ICcvY29uZmlnLyR7U0VSVklDRV9OQU1FfS9zZXJ2aWNlLWtleXN0b3JlLXBhc3N3b3JkJyxcbiAgICAgIExJQ0VOU0VfQlVDS0VUX05BTUU6ICcvY29uZmlnL29zcy1saWNlbnNlcy9idWNrZXQtbmFtZScsXG4gICAgfTtcbiAgfVxuICBpZiAoZmVhdHVyZXMua2Fma2FJbnRlZ3JhdGlvbikge1xuICAgIGVudlsncGFyYW1ldGVyLXN0b3JlJ10gPSB7XG4gICAgICAuLi4oZW52WydwYXJhbWV0ZXItc3RvcmUnXSA/PyB7fSksXG4gICAgICBDUkVBVEVfQU5EX1NJR05fQ0VSVElGSUNBVEVfU0NSSVBUX1MzX0xPQ0FUSU9OOlxuICAgICAgICAnL2NvbmZpZy9rYWZrYS1pbnRlZ3JhdGlvbi9jcmVhdGUtYW5kLXNpZ24tY2VydGlmaWNhdGUtc2NyaXB0LXMzLWxvY2F0aW9uJyxcbiAgICB9O1xuICB9XG4gIGlmIChmZWF0dXJlcy5ucG1CdWlsZCkge1xuICAgIGVudi52YXJpYWJsZXMgPSB7XG4gICAgICBDSTogJ3RydWUnLFxuICAgIH07XG4gICAgYnVpbGRDb21tYW5kcy5wdXNoKC4uLm5wbUJ1aWxkQ29tbWFuZHMoKSk7XG4gIH1cbiAgaWYgKGZlYXR1cmVzLmFkZGl0aW9uYWxCdWlsZENvbW1hbmRzKSB7XG4gICAgYnVpbGRDb21tYW5kcy5wdXNoKCcjIyMgQURESVRJT05BTCBCVUlMRCBDT01NQU5EUyAjIyMnLCAuLi5mZWF0dXJlcy5hZGRpdGlvbmFsQnVpbGRDb21tYW5kcyk7XG4gIH1cblxuICBidWlsZENvbW1hbmRzLnB1c2goLi4uaW5mcmFzdHJ1Y3R1cmVCdWlsZENvbW1hbmRzKCkpO1xuXG4gIHJldHVybiBCdWlsZFNwZWMuZnJvbU9iamVjdCh7XG4gICAgdmVyc2lvbjogJzAuMicsXG4gICAgZW52LFxuICAgIHBoYXNlczoge1xuICAgICAgaW5zdGFsbDoge1xuICAgICAgICAncnVudGltZS12ZXJzaW9ucyc6IGdldFJ1bnRpbWVzKGZlYXR1cmVzLCBydW50aW1lLm5vZGVqc1ZlcnNpb24pLFxuICAgICAgICAuLi4ocnVudGltZS5jb21tYW5kcy5sZW5ndGggPiAwID8geyBjb21tYW5kczogcnVudGltZS5jb21tYW5kcyB9IDoge30pLFxuICAgICAgfSxcbiAgICAgIHByZV9idWlsZDoge1xuICAgICAgICBjb21tYW5kczogbG9nQ29tbWl0SGFzaCgpLFxuICAgICAgfSxcbiAgICAgIGJ1aWxkOiB7XG4gICAgICAgIGNvbW1hbmRzOiBidWlsZENvbW1hbmRzLFxuICAgICAgfSxcbiAgICAgIHBvc3RfYnVpbGQ6IHtcbiAgICAgICAgY29tbWFuZHM6IGxvZ0NvbW1pdEhhc2goKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICByZXBvcnRzOiBjcmVhdGVSZXBvcnRzKGZlYXR1cmVzKSxcbiAgICBjYWNoZToge1xuICAgICAgcGF0aHM6IGNhY2hlUGF0aHMoKSxcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVWdWxuZXJhYmlsaXR5QnVpbGRTcGVjID0gKGZlYXR1cmVzOiBQaXBlbGluZUZlYXR1cmVzLCBvcHRpb25zPzogQ29kZUJ1aWxkT3B0aW9ucykgPT4ge1xuICBjb25zdCBydW50aW1lID0gZ2V0UnVudGltZU9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7fTtcbiAgY29uc3QgYnVpbGRDb21tYW5kczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoZmVhdHVyZXMuZ3JhZGxlQnVpbGQpIHtcbiAgICBlbnYudmFyaWFibGVzID0ge1xuICAgICAgTEFORzogJ0MuVVRGLTgnLFxuICAgIH07XG4gICAgZW52WydwYXJhbWV0ZXItc3RvcmUnXSA9IHtcbiAgICAgIE5JU1RfREFUQV9NSVJST1JfVVJMOiAnL2NvbmZpZy9uaXN0LWRhdGEtbWlycm9yL3VybCcsXG4gICAgfTtcbiAgICBlbnZbJ3NlY3JldHMtbWFuYWdlciddID0ge1xuICAgICAgU09OQVRZUEVfT1NTX0lOREVYX1VTRVJOQU1FOlxuICAgICAgICAnYXJuOmF3czpzZWNyZXRzbWFuYWdlcjpldS13ZXN0LTE6NTc3MTQ2ODk3Nzg1OnNlY3JldDovcmlvL2NvbmZpZy9zb25hdHlwZS1vc3MtaW5kZXgvY3JlZGVudGlhbHM6dXNlcm5hbWUnLFxuICAgICAgU09OQVRZUEVfT1NTX0lOREVYX1BBU1NXT1JEOlxuICAgICAgICAnYXJuOmF3czpzZWNyZXRzbWFuYWdlcjpldS13ZXN0LTE6NTc3MTQ2ODk3Nzg1OnNlY3JldDovcmlvL2NvbmZpZy9zb25hdHlwZS1vc3MtaW5kZXgvY3JlZGVudGlhbHM6cGFzc3dvcmQnLFxuICAgIH07XG4gICAgYnVpbGRDb21tYW5kcy5wdXNoKFxuICAgICAgLi4uWycjIyMgR1JBRExFIFZVTE5FUkFCSUxJVFkgQ0hFQ0sgIyMjJywgJy4vZ3JhZGxldyAtRG9yZy5ncmFkbGUuanZtYXJncz0tWG14NGcgZGVwZW5kZW5jeUNoZWNrQW5hbHl6ZSddXG4gICAgKTtcbiAgfVxuICBpZiAoZmVhdHVyZXMubnBtQnVpbGQpIHtcbiAgICBidWlsZENvbW1hbmRzLnB1c2goXG4gICAgICAuLi5bXG4gICAgICAgICcjIyMgTlBNIFZVTE5FUkFCSUxJVFkgQ0hFQ0sgIyMjJyxcbiAgICAgICAgJ25wbSBhdWRpdCAtLXJlZ2lzdHJ5IGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnIC0tYXVkaXQtbGV2ZWwgbW9kZXJhdGUgLS1vbWl0PWRldicsXG4gICAgICBdXG4gICAgKTtcbiAgfVxuICBidWlsZENvbW1hbmRzLnB1c2goXG4gICAgLi4uW1xuICAgICAgJyMjIyBJTkZSQVNUUlVDVFVSRSBWVUxORVJBQklMSVRZIENIRUNLICMjIycsXG4gICAgICAnY2QgaW5mcmFzdHJ1Y3R1cmUnLFxuICAgICAgJ25wbSBhdWRpdCAtLXJlZ2lzdHJ5IGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnIC0tYXVkaXQtbGV2ZWwgbW9kZXJhdGUgLS1vbWl0PWRldicsXG4gICAgICAnY2QgLi4nLFxuICAgIF1cbiAgKTtcblxuICByZXR1cm4gQnVpbGRTcGVjLmZyb21PYmplY3Qoe1xuICAgIHZlcnNpb246ICcwLjInLFxuICAgIGVudixcbiAgICBwaGFzZXM6IHtcbiAgICAgIGluc3RhbGw6IHtcbiAgICAgICAgJ3J1bnRpbWUtdmVyc2lvbnMnOiBnZXRSdW50aW1lcyhmZWF0dXJlcywgcnVudGltZS5ub2RlanNWZXJzaW9uKSxcbiAgICAgICAgLi4uKHJ1bnRpbWUuY29tbWFuZHMubGVuZ3RoID4gMCA/IHsgY29tbWFuZHM6IHJ1bnRpbWUuY29tbWFuZHMgfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgICBwcmVfYnVpbGQ6IHtcbiAgICAgICAgY29tbWFuZHM6IGxvZ0NvbW1pdEhhc2goKSxcbiAgICAgIH0sXG4gICAgICBidWlsZDoge1xuICAgICAgICBjb21tYW5kczogYnVpbGRDb21tYW5kcyxcbiAgICAgIH0sXG4gICAgICBwb3N0X2J1aWxkOiB7XG4gICAgICAgIGNvbW1hbmRzOiBsb2dDb21taXRIYXNoKCksXG4gICAgICB9LFxuICAgIH0sXG4gICAgY2FjaGU6IHtcbiAgICAgIHBhdGhzOiBjYWNoZVBhdGhzVnVsbmVyYWJpbGl0eSgpLFxuICAgIH0sXG4gIH0pO1xufTtcblxuY29uc3QgZ2V0UnVudGltZXMgPSAoZmVhdHVyZXM6IFBpcGVsaW5lRmVhdHVyZXMsIG5vZGVqc1ZlcnNpb246IHN0cmluZykgPT4ge1xuICBjb25zdCBydW50aW1lczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAoZmVhdHVyZXMuZ3JhZGxlQnVpbGQpIHtcbiAgICBydW50aW1lcy5qYXZhID0gJ2NvcnJldHRvMjEnO1xuICB9XG4gIHJ1bnRpbWVzLm5vZGVqcyA9IG5vZGVqc1ZlcnNpb247XG4gIHJldHVybiBydW50aW1lcztcbn07XG5cbmNvbnN0IGdldFJ1bnRpbWVPcHRpb25zID0gKG9wdGlvbnM/OiBDb2RlQnVpbGRPcHRpb25zKSA9PiB7XG4gIGNvbnN0IGNvbW1hbmRzOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAob3B0aW9ucz8ubm9kZWpzVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXNzZXJ0RXhhY3RWZXJzaW9uKCdub2RlanNWZXJzaW9uJywgb3B0aW9ucy5ub2RlanNWZXJzaW9uKTtcbiAgICBjb21tYW5kcy5wdXNoKGB0ZXN0IFwiJChub2RlIC0tdmVyc2lvbilcIiA9IFwidiR7b3B0aW9ucy5ub2RlanNWZXJzaW9ufVwiYCk7XG4gIH1cbiAgaWYgKG9wdGlvbnM/Lm5wbVZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIGFzc2VydEV4YWN0VmVyc2lvbignbnBtVmVyc2lvbicsIG9wdGlvbnMubnBtVmVyc2lvbik7XG4gICAgY29tbWFuZHMucHVzaChgdGVzdCBcIiQobnBtIC0tdmVyc2lvbilcIiA9IFwiJHtvcHRpb25zLm5wbVZlcnNpb259XCJgKTtcbiAgfVxuICByZXR1cm4geyBub2RlanNWZXJzaW9uOiBvcHRpb25zPy5ub2RlanNWZXJzaW9uID8/IERFRkFVTFRfTk9ERV9WRVJTSU9OLCBjb21tYW5kcyB9O1xufTtcblxuY29uc3QgYXNzZXJ0RXhhY3RWZXJzaW9uID0gKG5hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKSA9PiB7XG4gIGlmICh2ZXJzaW9uLm1hdGNoKEVYQUNUX1ZFUlNJT04pPy5bMF0gIT09IHZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZX0gbXVzdCBiZSBhbiBleGFjdCBtYWpvci5taW5vci5wYXRjaCB2ZXJzaW9uYCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsb2dDb21taXRIYXNoID0gKCkgPT4gW1xuICAnKGVjaG8gXCJCdWlsZCB0cmlnZ2VyZWQgYnkgY29tbWl0IFwiICYmIGdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OlwiJWgleDA5JWFuJXgwOSVzXCIgLW4gMSApIHwgdHIgLWQgXCJcXFxcblwiJyxcbl07XG5cbmV4cG9ydCBjb25zdCBleHBvcnRDb21taXRIYXNoQXNWZXJzaW9uID0gKCkgPT4gWydleHBvcnQgR0lUX1ZFUlNJT049JChnaXQgcmV2LXBhcnNlIEhFQUQpJ107XG5cbmNvbnN0IGluZnJhc3RydWN0dXJlQnVpbGRDb21tYW5kcyA9ICgpID0+IFtcbiAgJyMjIyBJTkZSQVNUUlVDVFVSRSBCVUlMRCAjIyMnLFxuICAnY2QgaW5mcmFzdHJ1Y3R1cmUnLFxuICAnbnBtIGNpJyxcbiAgYG5weCByaW8tbGljZW5zZS1jaGVja2VyIC0tdHlwZSBucG0tYmFja2VuZCAtLWFjY291bnQtbmFtZSBcXCR7QUNDT1VOVF9OQU1FfSAtLXNlcnZpY2UtbmFtZSBcXCR7U0VSVklDRV9OQU1FfSAtLXVwbG9hZGAsXG4gICducG0gcnVuIGNkayBzeW50aCAxPiAvZGV2L251bGwnLFxuICAvLyBJbiBwaXBlbGluZTogRXJyb3IgcGFyc2luZyByZWZlcmVuY2U6IGlzIG5vdCBhIHZhbGlkIHJlcG9zaXRvcnkvdGFnOiBpbnZhbGlkIHJlZmVyZW5jZSBmb3JtYXQuXG4gIC8vIHdvcmthcm91bmQgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTgwNDQnLFxuICAnZmluZCAuLyAtdHlwZSBmIC1uYW1lIFwiKkRlcGxveUFwcGxpY2F0aW9uU3RhY2tzKi5hc3NldHMuanNvblwiIC1wcmludDAgfCB4YXJncyAtLW5vLXJ1bi1pZi1lbXB0eSAtMCBzZWQgLS1pbi1wbGFjZSBcXCdzfGRvY2tlciBsb2FkIC1pIGFzc2V0Lnxkb2NrZXIgbG9hZCAtaSAuLi9hc3NldC58Z1xcJycsXG4gICdjZCAuLicsXG5dO1xuXG5jb25zdCBncmFkbGVCdWlsZENvbW1hbmRzID0gKGthZmthSW50ZWdyYXRpb246IGJvb2xlYW4pID0+IHtcbiAgY29uc3QgY29tbWFuZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbW1hbmRzLnB1c2goXG4gICAgLi4uW1xuICAgICAgJyMjIyBHUkFETEUgQlVJTEQgIyMjJyxcbiAgICAgICcuL2dyYWRsZXcgY2xlYW4gYnVpbGQnLFxuICAgICAgJyMgbGljZW5zZSBjaGVjaycsXG4gICAgICAnbnBtIGNpJyxcbiAgICAgIGBucHggcmlvLWxpY2Vuc2UtY2hlY2tlciAtLXR5cGUgZ3JhZGxlIC0tYWNjb3VudC1uYW1lIFxcJHtBQ0NPVU5UX05BTUV9IC0tc2VydmljZS1uYW1lIFxcJHtTRVJWSUNFX05BTUV9IC0tdXBsb2FkYCxcbiAgICAgICcjIHNlbGYgc2lnbmVkIGNlcnRpZmljYXRlJyxcbiAgICAgICdzZXQgLXU7IGtleXRvb2wgLWdlbmtleSAtYWxpYXMgSW50ZXJuYWxTZXJ2aWNlQ2VydGlmaWNhdGUgLWtleWFsZyBSU0EgLWtleXN0b3JlIGNvbnRhaW5lcmZpbGVzL3NlcnZpY2Uta2V5c3RvcmUucDEyIC12YWxpZGl0eSAzNjUwIC1zdG9yZXR5cGUgUEtDUzEyIC1kbmFtZSBcIkNOPWludGVybmFsLnNlcnZpY2UuJHtTRVJWSUNFX05BTUV9LiR7SE9TVEVEX1pPTkV9LCBPVT1Mb2dpc3RpY3MsIE89UmlvLCBMPU11bmljaCwgU1Q9QlksIEM9REVcIiAta2V5cGFzcyAke1NFUlZJQ0VfS0VZU1RPUkVfUEFTU1dPUkR9IC1zdG9yZXBhc3MgJHtTRVJWSUNFX0tFWVNUT1JFX1BBU1NXT1JEfScsXG4gICAgXVxuICApO1xuICBpZiAoa2Fma2FJbnRlZ3JhdGlvbikge1xuICAgIGNvbW1hbmRzLnB1c2goXG4gICAgICAuLi5bXG4gICAgICAgICcjIGthZmthIGNlcnRpZmljYXRlJyxcbiAgICAgICAgJ3NldCAtdTsgYXdzIHMzIGNwIC0tcXVpZXQgczM6Ly8ke0NSRUFURV9BTkRfU0lHTl9DRVJUSUZJQ0FURV9TQ1JJUFRfUzNfTE9DQVRJT059IGNyZWF0ZS1hbmQtc2lnbi1jZXJ0aWZpY2F0ZScsXG4gICAgICAgICdjaG1vZCAreCBjcmVhdGUtYW5kLXNpZ24tY2VydGlmaWNhdGUnLFxuICAgICAgICAnc2V0IC11OyAuL2NyZWF0ZS1hbmQtc2lnbi1jZXJ0aWZpY2F0ZSAtLWtleXN0b3JlLXBhc3N3b3JkICR7U0VSVklDRV9LRVlTVE9SRV9QQVNTV09SRH0gLS1mcWRuICR7U0VSVklDRV9OQU1FfS4ke0hPU1RFRF9aT05FfScsXG4gICAgICAgICdjcCAvY2VydC9jZXJ0aWZpY2F0ZS5wMTIgY29udGFpbmVyZmlsZXMva2Fma2Eta2V5c3RvcmUucDEyJyxcbiAgICAgIF1cbiAgICApO1xuICB9XG4gIGNvbW1hbmRzLnB1c2goLi4uWycjIGRvY2tlciBpbWFnZSBidWlsZCcsICcuL2dyYWRsZXcgamliQnVpbGRUYXIgLS1xdWlldCddKTtcbiAgcmV0dXJuIGNvbW1hbmRzO1xufTtcblxuY29uc3QgbnBtQnVpbGRDb21tYW5kcyA9ICgpID0+IFtcbiAgJyMjIyBOUE0gQlVJTEQgIyMjJyxcbiAgJ2V4cG9ydCBWSVRFX0dJVF9WRVJTSU9OPSRHSVRfVkVSU0lPTicsXG4gICdleHBvcnQgVklURV9BV1NfQUNDT1VOVF9JRD0kQVdTX0FDQ09VTlRfSUQnLFxuICAnZXhwb3J0IFZJVEVfQVdTX0FDQ09VTlRfTkFNRT0kQUNDT1VOVF9OQU1FJyxcbiAgJ2V4cG9ydCBWSVRFX1NFUlZJQ0VfTkFNRT0kU0VSVklDRV9OQU1FJyxcbiAgJ2V4cG9ydCBWSVRFX1RFQU1fSURFTlRJRklFUj0kVEVBTV9JREVOVElGSUVSJyxcbiAgJ25wbSBjaScsXG4gICducG0gcnVuIGxpbnQnLFxuICAnbnBtIHJ1biB0ZXN0OmNpJyxcbiAgYG5weCByaW8tbGljZW5zZS1jaGVja2VyIC0tdHlwZSBucG0tZnJvbnRlbmQgLS1hY2NvdW50LW5hbWUgXFwke0FDQ09VTlRfTkFNRX0gLS1zZXJ2aWNlLW5hbWUgXFwke1NFUlZJQ0VfTkFNRX0gLS11cGxvYWRgLFxuICAnbnBtIHJ1biBidWlsZCcsXG5dO1xuXG5jb25zdCBjYWNoZVBhdGhzID0gKCkgPT4gW1xuICAnL2NlcnQvKiovKicsXG4gICcvcm9vdC8uY2FjaGUvKiovKicsXG4gICcvcm9vdC8ubnBtLyoqLyonLFxuICAnL3Jvb3QvLmdyYWRsZS9jYWNoZXMvKiovKicsXG4gICcvcm9vdC8uZ3JhZGxlL3dyYXBwZXIvKiovKicsXG4gICcvcm9vdC9nb29nbGUtY2xvdWQtdG9vbHMtamF2YS9qaWIvKiovKicsXG4gICd0YXJnZXQvamliLWNhY2hlLyoqLyonLFxuXTtcblxuY29uc3QgY2FjaGVQYXRoc1Z1bG5lcmFiaWxpdHkgPSAoKSA9PiBbXG4gICcvcm9vdC8uY2FjaGUvKiovKicsXG4gICcvcm9vdC8uZ3JhZGxlL2NhY2hlcy8qKi8qJyxcbiAgJy9yb290Ly5ncmFkbGUvd3JhcHBlci8qKi8qJyxcbiAgJy9yb290Ly5ncmFkbGUvZGVwZW5kZW5jeS1jaGVjay1kYXRhLyoqLyonLFxuXTtcblxuY29uc3QgY3JlYXRlUmVwb3J0cyA9IChmZWF0dXJlczogUGlwZWxpbmVGZWF0dXJlcykgPT4ge1xuICBjb25zdCByZXBvcnRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIGlmIChmZWF0dXJlcy5ncmFkbGVCdWlsZCkge1xuICAgIHJlcG9ydHMuR3JhZGxlQnVpbGRUZXN0UmVzdWx0cyA9IHtcbiAgICAgIGZpbGVzOiBbJyoqLyonXSxcbiAgICAgICdiYXNlLWRpcmVjdG9yeSc6ICdidWlsZC90ZXN0LXJlc3VsdHMnLFxuICAgIH07XG4gIH1cbiAgaWYgKGZlYXR1cmVzLm5wbUJ1aWxkKSB7XG4gICAgcmVwb3J0cy5OcG1CdWlsZFRlc3RSZXN1bHRzID0ge1xuICAgICAgZmlsZXM6IFsnKiovKiddLFxuICAgICAgJ2Jhc2UtZGlyZWN0b3J5JzogJ3Jlc3VsdHMnLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlcG9ydHM7XG59O1xuIl19
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataDogPipelineErrorAlertForVulnerabilityChecks = exports.DatadogPipelineErrorAlert = void 0;
4
+ const datadogv2_1 = require("../../../datadogv2");
5
+ class DatadogPipelineErrorAlert extends datadogv2_1.DatadogMonitor {
6
+ constructor(scope, id, props) {
7
+ super(scope, id, {
8
+ serviceName: props.serviceName,
9
+ notification: new datadogv2_1.NoNotification(),
10
+ monitorType: datadogv2_1.DatadogMonitorQueryAlertType.QUERY_ALERT,
11
+ extraTags: ['cicd'],
12
+ query: `min(last_5m):min:deployment.codepipeline.executions{pipeline_name:${props.pipelineName},account_id:${props.accountId}} < 1`,
13
+ lowercaseQuery: true,
14
+ name: 'CI pipeline status',
15
+ message: '{{#is_alert}}\\nThe CI build is broken\\n{{/is_alert}} \\n\\n{{#is_alert_recovery}}\\nThe CI build works again.\\n{{/is_alert_recovery}}',
16
+ priority: 5,
17
+ optionOverrides: {
18
+ requireFullWindow: false,
19
+ evaluationDelay: 0,
20
+ },
21
+ });
22
+ }
23
+ }
24
+ exports.DatadogPipelineErrorAlert = DatadogPipelineErrorAlert;
25
+ class DataDogPipelineErrorAlertForVulnerabilityChecks extends datadogv2_1.DatadogMonitor {
26
+ constructor(scope, id, props) {
27
+ super(scope, id, {
28
+ serviceName: props.serviceName,
29
+ notification: props.notification,
30
+ monitorType: datadogv2_1.DatadogMonitorQueryAlertType.QUERY_ALERT,
31
+ extraTags: ['cicd'],
32
+ query: `min(last_5m):min:deployment.codepipeline.executions{pipeline_name:${props.pipelineName},account_id:${props.accountId}} < 1`,
33
+ lowercaseQuery: true,
34
+ name: 'Vulnerability checks',
35
+ message: 'Vulnerabilities detected',
36
+ priority: 3,
37
+ optionOverrides: {
38
+ requireFullWindow: false,
39
+ evaluationDelay: 0,
40
+ },
41
+ });
42
+ }
43
+ }
44
+ exports.DataDogPipelineErrorAlertForVulnerabilityChecks = DataDogPipelineErrorAlertForVulnerabilityChecks;
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy1tb25pdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0L3BpcGVsaW5lL2RhdGFkb2ctbW9uaXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsa0RBQWlIO0FBU2pILE1BQWEseUJBQTBCLFNBQVEsMEJBQWM7SUFDM0QsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3RDtRQUNoRyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixZQUFZLEVBQUUsSUFBSSwwQkFBYyxFQUFFO1lBQ2xDLFdBQVcsRUFBRSx3Q0FBNEIsQ0FBQyxXQUFXO1lBQ3JELFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNuQixLQUFLLEVBQUUscUVBQXFFLEtBQUssQ0FBQyxZQUFZLGVBQWUsS0FBSyxDQUFDLFNBQVMsT0FBTztZQUNuSSxjQUFjLEVBQUUsSUFBSTtZQUNwQixJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLE9BQU8sRUFDTCwwSUFBMEk7WUFDNUksUUFBUSxFQUFFLENBQUM7WUFDWCxlQUFlLEVBQUU7Z0JBQ2YsaUJBQWlCLEVBQUUsS0FBSztnQkFDeEIsZUFBZSxFQUFFLENBQUM7YUFDbkI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFuQkQsOERBbUJDO0FBRUQsTUFBYSwrQ0FBZ0QsU0FBUSwwQkFBYztJQUNqRixZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWtDO1FBQzFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxXQUFXLEVBQUUsd0NBQTRCLENBQUMsV0FBVztZQUNyRCxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDbkIsS0FBSyxFQUFFLHFFQUFxRSxLQUFLLENBQUMsWUFBWSxlQUFlLEtBQUssQ0FBQyxTQUFTLE9BQU87WUFDbkksY0FBYyxFQUFFLElBQUk7WUFDcEIsSUFBSSxFQUFFLHNCQUFzQjtZQUM1QixPQUFPLEVBQUUsMEJBQTBCO1lBQ25DLFFBQVEsRUFBRSxDQUFDO1lBQ1gsZUFBZSxFQUFFO2dCQUNmLGlCQUFpQixFQUFFLEtBQUs7Z0JBQ3hCLGVBQWUsRUFBRSxDQUFDO2FBQ25CO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbEJELDBHQWtCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlZmVyZW5jZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRGF0YWRvZ01vbml0b3IsIERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUsIElOb3RpZmljYXRpb24sIE5vTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vZGF0YWRvZ3YyJztcblxuaW50ZXJmYWNlIERhdGFkb2dQaXBlbGluZU1vbml0b3JQcm9wcyB7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgUmVmZXJlbmNlO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICBhY2NvdW50SWQ6IHN0cmluZztcbiAgbm90aWZpY2F0aW9uPzogSU5vdGlmaWNhdGlvbjtcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFkb2dQaXBlbGluZUVycm9yQWxlcnQgZXh0ZW5kcyBEYXRhZG9nTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBPbWl0PERhdGFkb2dQaXBlbGluZU1vbml0b3JQcm9wcywgJ25vdGlmaWNhdGlvbic+KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBub3RpZmljYXRpb246IG5ldyBOb05vdGlmaWNhdGlvbigpLFxuICAgICAgbW9uaXRvclR5cGU6IERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUuUVVFUllfQUxFUlQsXG4gICAgICBleHRyYVRhZ3M6IFsnY2ljZCddLFxuICAgICAgcXVlcnk6IGBtaW4obGFzdF81bSk6bWluOmRlcGxveW1lbnQuY29kZXBpcGVsaW5lLmV4ZWN1dGlvbnN7cGlwZWxpbmVfbmFtZToke3Byb3BzLnBpcGVsaW5lTmFtZX0sYWNjb3VudF9pZDoke3Byb3BzLmFjY291bnRJZH19IDwgMWAsXG4gICAgICBsb3dlcmNhc2VRdWVyeTogdHJ1ZSxcbiAgICAgIG5hbWU6ICdDSSBwaXBlbGluZSBzdGF0dXMnLFxuICAgICAgbWVzc2FnZTpcbiAgICAgICAgJ3t7I2lzX2FsZXJ0fX1cXFxcblRoZSBDSSBidWlsZCBpcyBicm9rZW5cXFxcbnt7L2lzX2FsZXJ0fX0gXFxcXG5cXFxcbnt7I2lzX2FsZXJ0X3JlY292ZXJ5fX1cXFxcblRoZSBDSSBidWlsZCB3b3JrcyBhZ2Fpbi5cXFxcbnt7L2lzX2FsZXJ0X3JlY292ZXJ5fX0nLFxuICAgICAgcHJpb3JpdHk6IDUsXG4gICAgICBvcHRpb25PdmVycmlkZXM6IHtcbiAgICAgICAgcmVxdWlyZUZ1bGxXaW5kb3c6IGZhbHNlLFxuICAgICAgICBldmFsdWF0aW9uRGVsYXk6IDAsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRG9nUGlwZWxpbmVFcnJvckFsZXJ0Rm9yVnVsbmVyYWJpbGl0eUNoZWNrcyBleHRlbmRzIERhdGFkb2dNb25pdG9yIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFkb2dQaXBlbGluZU1vbml0b3JQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgbm90aWZpY2F0aW9uOiBwcm9wcy5ub3RpZmljYXRpb24sXG4gICAgICBtb25pdG9yVHlwZTogRGF0YWRvZ01vbml0b3JRdWVyeUFsZXJ0VHlwZS5RVUVSWV9BTEVSVCxcbiAgICAgIGV4dHJhVGFnczogWydjaWNkJ10sXG4gICAgICBxdWVyeTogYG1pbihsYXN0XzVtKTptaW46ZGVwbG95bWVudC5jb2RlcGlwZWxpbmUuZXhlY3V0aW9uc3twaXBlbGluZV9uYW1lOiR7cHJvcHMucGlwZWxpbmVOYW1lfSxhY2NvdW50X2lkOiR7cHJvcHMuYWNjb3VudElkfX0gPCAxYCxcbiAgICAgIGxvd2VyY2FzZVF1ZXJ5OiB0cnVlLFxuICAgICAgbmFtZTogJ1Z1bG5lcmFiaWxpdHkgY2hlY2tzJyxcbiAgICAgIG1lc3NhZ2U6ICdWdWxuZXJhYmlsaXRpZXMgZGV0ZWN0ZWQnLFxuICAgICAgcHJpb3JpdHk6IDMsXG4gICAgICBvcHRpb25PdmVycmlkZXM6IHtcbiAgICAgICAgcmVxdWlyZUZ1bGxXaW5kb3c6IGZhbHNlLFxuICAgICAgICBldmFsdWF0aW9uRGVsYXk6IDAsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -15,4 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./pipeline-stack"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUtc3RhY2snO1xuIl19
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC9waXBlbGluZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS1zdGFjayc7XG4iXX0=
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RioCapabilityMonitoringDeployStep = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
6
+ const pipelines = require("aws-cdk-lib/pipelines");
7
+ class RioCapabilityMonitoringDeployStep extends pipelines.CodeBuildStep {
8
+ constructor(scope, id, props) {
9
+ super(id, {
10
+ additionalInputs: props.monitoringArtifacts.reduce((result, item) => ({
11
+ ...result,
12
+ [`${Object.keys(result).length}`]: item.input,
13
+ }), {}),
14
+ commands: props.monitoringArtifacts
15
+ .map((item, index) => item.files.map((file) => [
16
+ `echo "Uploading ${index}/${file}" to S3`,
17
+ `aws s3 cp "${index}/${file}" s3://monitoring-testsuite-runner-${aws_cdk_lib_1.Stack.of(scope).account}`,
18
+ ]))
19
+ .flat(2),
20
+ buildEnvironment: {
21
+ buildImage: aws_codebuild_1.LinuxLambdaBuildImage.AMAZON_LINUX_2023_NODE_20,
22
+ computeType: aws_codebuild_1.ComputeType.LAMBDA_1GB,
23
+ },
24
+ });
25
+ }
26
+ }
27
+ exports.RioCapabilityMonitoringDeployStep = RioCapabilityMonitoringDeployStep;
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvcmluZy1kZXBsb3ktc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0L3BpcGVsaW5lL21vbml0b3JpbmctZGVwbG95LXN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQW9DO0FBQ3BDLDZEQUErRTtBQUMvRSxtREFBbUQ7QUFZbkQsTUFBYSxpQ0FBa0MsU0FBUSxTQUFTLENBQUMsYUFBYTtJQUM1RSxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZDO1FBQ3JGLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDUixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUNoRCxDQUFDLE1BQVcsRUFBRSxJQUFzQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RCxHQUFHLE1BQU07Z0JBQ1QsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSzthQUM5QyxDQUFDLEVBQ0YsRUFBRSxDQUNIO1lBQ0QsUUFBUSxFQUFFLEtBQUssQ0FBQyxtQkFBbUI7aUJBQ2hDLEdBQUcsQ0FBQyxDQUFDLElBQXNDLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FDN0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDO2dCQUMvQixtQkFBbUIsS0FBSyxJQUFJLElBQUksU0FBUztnQkFDekMsY0FBYyxLQUFLLElBQUksSUFBSSxzQ0FBc0MsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFO2FBQzNGLENBQUMsQ0FDSDtpQkFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1YsZ0JBQWdCLEVBQUU7Z0JBQ2hCLFVBQVUsRUFBRSxxQ0FBcUIsQ0FBQyx5QkFBeUI7Z0JBQzNELFdBQVcsRUFBRSwyQkFBVyxDQUFDLFVBQVU7YUFDcEM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF4QkQsOEVBd0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb21wdXRlVHlwZSwgTGludXhMYW1iZGFCdWlsZEltYWdlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZCc7XG5pbXBvcnQgKiBhcyBwaXBlbGluZXMgZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJpb0NhcGFiaWxpdHlNb25pdG9yaW5nQXJ0aWZhY3RzIHtcbiAgaW5wdXQ6IHBpcGVsaW5lcy5JRmlsZVNldFByb2R1Y2VyO1xuICBmaWxlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmlvQ2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwUHJvcHMge1xuICBtb25pdG9yaW5nQXJ0aWZhY3RzOiBSaW9DYXBhYmlsaXR5TW9uaXRvcmluZ0FydGlmYWN0c1tdO1xufVxuXG5leHBvcnQgY2xhc3MgUmlvQ2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwIGV4dGVuZHMgcGlwZWxpbmVzLkNvZGVCdWlsZFN0ZXAge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmlvQ2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwUHJvcHMpIHtcbiAgICBzdXBlcihpZCwge1xuICAgICAgYWRkaXRpb25hbElucHV0czogcHJvcHMubW9uaXRvcmluZ0FydGlmYWN0cy5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQ6IGFueSwgaXRlbTogUmlvQ2FwYWJpbGl0eU1vbml0b3JpbmdBcnRpZmFjdHMpID0+ICh7XG4gICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgIFtgJHtPYmplY3Qua2V5cyhyZXN1bHQpLmxlbmd0aH1gXTogaXRlbS5pbnB1dCxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgICApLFxuICAgICAgY29tbWFuZHM6IHByb3BzLm1vbml0b3JpbmdBcnRpZmFjdHNcbiAgICAgICAgLm1hcCgoaXRlbTogUmlvQ2FwYWJpbGl0eU1vbml0b3JpbmdBcnRpZmFjdHMsIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgICAgaXRlbS5maWxlcy5tYXAoKGZpbGU6IHN0cmluZykgPT4gW1xuICAgICAgICAgICAgYGVjaG8gXCJVcGxvYWRpbmcgJHtpbmRleH0vJHtmaWxlfVwiIHRvIFMzYCxcbiAgICAgICAgICAgIGBhd3MgczMgY3AgXCIke2luZGV4fS8ke2ZpbGV9XCIgczM6Ly9tb25pdG9yaW5nLXRlc3RzdWl0ZS1ydW5uZXItJHtTdGFjay5vZihzY29wZSkuYWNjb3VudH1gLFxuICAgICAgICAgIF0pXG4gICAgICAgIClcbiAgICAgICAgLmZsYXQoMiksXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4TGFtYmRhQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMjAyM19OT0RFXzIwLFxuICAgICAgICBjb21wdXRlVHlwZTogQ29tcHV0ZVR5cGUuTEFNQkRBXzFHQixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -231,6 +231,8 @@ export interface CodeBuildOptions {
231
231
  readonly partialBuildSpecPath?: string;
232
232
  readonly vulnerabilityPartialBuildSpecPath?: string;
233
233
  readonly buildEnvironment?: BuildEnvironment;
234
+ readonly nodejsVersion?: string;
235
+ readonly npmVersion?: string;
234
236
  }
235
237
  export declare class PipelineStack extends Stack {
236
238
  private readonly _features;