@rio-cloud/cdk-v2-constructs 6.14.0 → 6.15.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.
- package/.jsii +214 -47
- package/docs/API.md +159 -13
- package/docs/changelog.md +28 -0
- package/lib/contributions/team-transport-two/pipeline/buildspecs.d.ts +5 -0
- package/lib/contributions/team-transport-two/pipeline/buildspecs.js +191 -0
- package/lib/contributions/team-transport-two/pipeline/pipeline-stack.d.ts +49 -2
- package/lib/contributions/team-transport-two/pipeline/pipeline-stack.js +103 -22
- package/package.json +5 -4
- package/version.json +1 -1
- package/lib/contributions/team-transport-two/pipeline/buildspecs/buildspec-vulnerability-checks.yaml +0 -23
- package/lib/contributions/team-transport-two/pipeline/buildspecs/buildspec.yaml +0 -61
- package/lib/contributions/team-transport-two/pipeline/buildspecs/buildspec_infrastructure.yaml +0 -14
- package/lib/contributions/team-transport-two/pipeline/buildspecs/buildspec_kafka.yaml +0 -64
package/docs/API.md
CHANGED
|
@@ -14271,6 +14271,136 @@ The threshold that needs to be set.
|
|
|
14271
14271
|
|
|
14272
14272
|
---
|
|
14273
14273
|
|
|
14274
|
+
### PipelineFeatures <a name="PipelineFeatures" id="@rio-cloud/cdk-v2-constructs.PipelineFeatures"></a>
|
|
14275
|
+
|
|
14276
|
+
#### Initializer <a name="Initializer" id="@rio-cloud/cdk-v2-constructs.PipelineFeatures.Initializer"></a>
|
|
14277
|
+
|
|
14278
|
+
```typescript
|
|
14279
|
+
import { PipelineFeatures } from '@rio-cloud/cdk-v2-constructs'
|
|
14280
|
+
|
|
14281
|
+
const pipelineFeatures: PipelineFeatures = { ... }
|
|
14282
|
+
```
|
|
14283
|
+
|
|
14284
|
+
#### Properties <a name="Properties" id="Properties"></a>
|
|
14285
|
+
|
|
14286
|
+
| **Name** | **Type** | **Description** |
|
|
14287
|
+
| --- | --- | --- |
|
|
14288
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineFeatures.property.additionalBuildCommands">additionalBuildCommands</a></code> | <code>string[]</code> | Additional build commands for main and branch pipeline. |
|
|
14289
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineFeatures.property.branchPipeline">branchPipeline</a></code> | <code>boolean</code> | Create a branch pipeline used by renovate. |
|
|
14290
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineFeatures.property.frontendBucketName">frontendBucketName</a></code> | <code>string</code> | S3 Bucket to deploy frontend to. |
|
|
14291
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineFeatures.property.gradleBuild">gradleBuild</a></code> | <code>boolean</code> | Run a standard gradle build in the repository root. |
|
|
14292
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineFeatures.property.kafkaIntegration">kafkaIntegration</a></code> | <code>boolean</code> | Add required steps and permissions to support Kafka. |
|
|
14293
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineFeatures.property.npmBuild">npmBuild</a></code> | <code>boolean</code> | Run a standard npm build in the repository root. |
|
|
14294
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineFeatures.property.vulnerabilityPipeline">vulnerabilityPipeline</a></code> | <code>boolean</code> | Create a vulnerability pipeline to scan dependencies for vulnerabilities. |
|
|
14295
|
+
|
|
14296
|
+
---
|
|
14297
|
+
|
|
14298
|
+
##### `additionalBuildCommands`<sup>Optional</sup> <a name="additionalBuildCommands" id="@rio-cloud/cdk-v2-constructs.PipelineFeatures.property.additionalBuildCommands"></a>
|
|
14299
|
+
|
|
14300
|
+
```typescript
|
|
14301
|
+
public readonly additionalBuildCommands: string[];
|
|
14302
|
+
```
|
|
14303
|
+
|
|
14304
|
+
- *Type:* string[]
|
|
14305
|
+
|
|
14306
|
+
Additional build commands for main and branch pipeline.
|
|
14307
|
+
|
|
14308
|
+
Will be added after all build & test commands, before the infrastructure build.
|
|
14309
|
+
|
|
14310
|
+
---
|
|
14311
|
+
|
|
14312
|
+
##### `branchPipeline`<sup>Optional</sup> <a name="branchPipeline" id="@rio-cloud/cdk-v2-constructs.PipelineFeatures.property.branchPipeline"></a>
|
|
14313
|
+
|
|
14314
|
+
```typescript
|
|
14315
|
+
public readonly branchPipeline: boolean;
|
|
14316
|
+
```
|
|
14317
|
+
|
|
14318
|
+
- *Type:* boolean
|
|
14319
|
+
|
|
14320
|
+
Create a branch pipeline used by renovate.
|
|
14321
|
+
|
|
14322
|
+
Defaults to `true`.
|
|
14323
|
+
|
|
14324
|
+
---
|
|
14325
|
+
|
|
14326
|
+
##### `frontendBucketName`<sup>Optional</sup> <a name="frontendBucketName" id="@rio-cloud/cdk-v2-constructs.PipelineFeatures.property.frontendBucketName"></a>
|
|
14327
|
+
|
|
14328
|
+
```typescript
|
|
14329
|
+
public readonly frontendBucketName: string;
|
|
14330
|
+
```
|
|
14331
|
+
|
|
14332
|
+
- *Type:* string
|
|
14333
|
+
|
|
14334
|
+
S3 Bucket to deploy frontend to.
|
|
14335
|
+
|
|
14336
|
+
Requires `npmBuild` to be set to `true`. If set, the output of the npm build is deployed to the provided bucket.
|
|
14337
|
+
|
|
14338
|
+
---
|
|
14339
|
+
|
|
14340
|
+
##### `gradleBuild`<sup>Optional</sup> <a name="gradleBuild" id="@rio-cloud/cdk-v2-constructs.PipelineFeatures.property.gradleBuild"></a>
|
|
14341
|
+
|
|
14342
|
+
```typescript
|
|
14343
|
+
public readonly gradleBuild: boolean;
|
|
14344
|
+
```
|
|
14345
|
+
|
|
14346
|
+
- *Type:* boolean
|
|
14347
|
+
|
|
14348
|
+
Run a standard gradle build in the repository root.
|
|
14349
|
+
|
|
14350
|
+
Defaults to `false`:
|
|
14351
|
+
- build and test of the artifact via command "./gradlew clean build"
|
|
14352
|
+
- license-check and upload of license-check-file via command "./gradlew checkLicenses"
|
|
14353
|
+
- create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer
|
|
14354
|
+
- build the container image via command "./gradlew jibBuildTar"
|
|
14355
|
+
|
|
14356
|
+
---
|
|
14357
|
+
|
|
14358
|
+
##### `kafkaIntegration`<sup>Optional</sup> <a name="kafkaIntegration" id="@rio-cloud/cdk-v2-constructs.PipelineFeatures.property.kafkaIntegration"></a>
|
|
14359
|
+
|
|
14360
|
+
```typescript
|
|
14361
|
+
public readonly kafkaIntegration: boolean;
|
|
14362
|
+
```
|
|
14363
|
+
|
|
14364
|
+
- *Type:* boolean
|
|
14365
|
+
|
|
14366
|
+
Add required steps and permissions to support Kafka.
|
|
14367
|
+
|
|
14368
|
+
Currently, this requires `gradleBuild` to be set to `true`. Defaults to `false`.
|
|
14369
|
+
|
|
14370
|
+
---
|
|
14371
|
+
|
|
14372
|
+
##### `npmBuild`<sup>Optional</sup> <a name="npmBuild" id="@rio-cloud/cdk-v2-constructs.PipelineFeatures.property.npmBuild"></a>
|
|
14373
|
+
|
|
14374
|
+
```typescript
|
|
14375
|
+
public readonly npmBuild: boolean;
|
|
14376
|
+
```
|
|
14377
|
+
|
|
14378
|
+
- *Type:* boolean
|
|
14379
|
+
|
|
14380
|
+
Run a standard npm build in the repository root.
|
|
14381
|
+
|
|
14382
|
+
Defaults to `false`:
|
|
14383
|
+
- run linter via command "npm run lint"
|
|
14384
|
+
- run tests via command "npm run test:ci"
|
|
14385
|
+
- run a license check by calling the script "check-oss-licenses.sh" (from the RIO frontend template)
|
|
14386
|
+
- build the artifact via command "npm run build"
|
|
14387
|
+
|
|
14388
|
+
---
|
|
14389
|
+
|
|
14390
|
+
##### `vulnerabilityPipeline`<sup>Optional</sup> <a name="vulnerabilityPipeline" id="@rio-cloud/cdk-v2-constructs.PipelineFeatures.property.vulnerabilityPipeline"></a>
|
|
14391
|
+
|
|
14392
|
+
```typescript
|
|
14393
|
+
public readonly vulnerabilityPipeline: boolean;
|
|
14394
|
+
```
|
|
14395
|
+
|
|
14396
|
+
- *Type:* boolean
|
|
14397
|
+
|
|
14398
|
+
Create a vulnerability pipeline to scan dependencies for vulnerabilities.
|
|
14399
|
+
|
|
14400
|
+
Defaults to `true`.
|
|
14401
|
+
|
|
14402
|
+
---
|
|
14403
|
+
|
|
14274
14404
|
### PipelineSchedulesProps <a name="PipelineSchedulesProps" id="@rio-cloud/cdk-v2-constructs.PipelineSchedulesProps"></a>
|
|
14275
14405
|
|
|
14276
14406
|
#### Initializer <a name="Initializer" id="@rio-cloud/cdk-v2-constructs.PipelineSchedulesProps.Initializer"></a>
|
|
@@ -14336,13 +14466,14 @@ const pipelineStackProps: PipelineStackProps = { ... }
|
|
|
14336
14466
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.tags">tags</a></code> | <code>{[ key: string ]: string}</code> | Stack tags that will be applied to all the taggable resources and the stack itself. |
|
|
14337
14467
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.terminationProtection">terminationProtection</a></code> | <code>boolean</code> | Whether to enable termination protection for this stack. |
|
|
14338
14468
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.appStackFactory">appStackFactory</a></code> | <code><a href="#@rio-cloud/cdk-v2-constructs.IAppStackFactory">IAppStackFactory</a></code> | Provider for appStack to be deployed. |
|
|
14339
|
-
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.pipelineType">pipelineType</a></code> | <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineType">PipelineType</a></code> | Defines which kind of pipeline is deployed. |
|
|
14340
14469
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.serviceName">serviceName</a></code> | <code>string</code> | The name of the service - This has to be the same name as the repository as the s3 trigger file created by the bitbucket-integration uses this as a prefix - The serviceName is available as an environment variable SERVICE_NAME in the CodeBuildStep - The serviceName is available in the AppStackProps in the appStackFactory - The serviceName is available as stackName property in the AppStackProps in the appStackFactory. |
|
|
14341
14470
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.codeBuildOptions">codeBuildOptions</a></code> | <code><a href="#@rio-cloud/cdk-v2-constructs.CodeBuildOptions">CodeBuildOptions</a></code> | CodeBuild options overriding the rio-specific defaults. |
|
|
14342
14471
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.codePipelineType">codePipelineType</a></code> | <code>aws-cdk-lib.aws_codepipeline.PipelineType</code> | CodePipeline PipelineType (V1 or V2). |
|
|
14343
14472
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.datadogAlertType">datadogAlertType</a></code> | <code>string</code> | *No description.* |
|
|
14473
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.features">features</a></code> | <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineFeatures">PipelineFeatures</a></code> | Defines which kind of pipeline is deployed. |
|
|
14344
14474
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.monitoringDeployStepProps">monitoringDeployStepProps</a></code> | <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackRioMonitoringDeployStepProps">PipelineStackRioMonitoringDeployStepProps</a></code> | If present, the capability monitoring deploy step is added to the pipeline. |
|
|
14345
14475
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.pipelineSchedules">pipelineSchedules</a></code> | <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineSchedulesProps">PipelineSchedulesProps</a></code> | Defines how often the pipeline is triggered automatically. Is defined via a cron expression. |
|
|
14476
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.pipelineType">pipelineType</a></code> | <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineType">PipelineType</a></code> | *No description.* |
|
|
14346
14477
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.secretsDeployStepProps">secretsDeployStepProps</a></code> | <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackRioSecretsDeployStepProps">PipelineStackRioSecretsDeployStepProps</a></code> | Path to secrets file containing encrypted secrets. |
|
|
14347
14478
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.vulnerabilityNotification">vulnerabilityNotification</a></code> | <code>@rio-cloud/cdk-v2-constructs.datadogv2.INotification</code> | Notification type for the auto-generated vulnerability pipeline monitor. |
|
|
14348
14479
|
|
|
@@ -14585,18 +14716,6 @@ This acts as a wrapper for all resources you want to deploy via the pipeline.
|
|
|
14585
14716
|
|
|
14586
14717
|
---
|
|
14587
14718
|
|
|
14588
|
-
##### `pipelineType`<sup>Required</sup> <a name="pipelineType" id="@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.pipelineType"></a>
|
|
14589
|
-
|
|
14590
|
-
```typescript
|
|
14591
|
-
public readonly pipelineType: PipelineType;
|
|
14592
|
-
```
|
|
14593
|
-
|
|
14594
|
-
- *Type:* <a href="#@rio-cloud/cdk-v2-constructs.PipelineType">PipelineType</a>
|
|
14595
|
-
|
|
14596
|
-
Defines which kind of pipeline is deployed.
|
|
14597
|
-
|
|
14598
|
-
---
|
|
14599
|
-
|
|
14600
14719
|
##### `serviceName`<sup>Required</sup> <a name="serviceName" id="@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.serviceName"></a>
|
|
14601
14720
|
|
|
14602
14721
|
```typescript
|
|
@@ -14652,6 +14771,20 @@ public readonly datadogAlertType: string;
|
|
|
14652
14771
|
|
|
14653
14772
|
---
|
|
14654
14773
|
|
|
14774
|
+
##### `features`<sup>Optional</sup> <a name="features" id="@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.features"></a>
|
|
14775
|
+
|
|
14776
|
+
```typescript
|
|
14777
|
+
public readonly features: PipelineFeatures;
|
|
14778
|
+
```
|
|
14779
|
+
|
|
14780
|
+
- *Type:* <a href="#@rio-cloud/cdk-v2-constructs.PipelineFeatures">PipelineFeatures</a>
|
|
14781
|
+
|
|
14782
|
+
Defines which kind of pipeline is deployed.
|
|
14783
|
+
|
|
14784
|
+
Use the features to combine different opinionated, RIO-specific pipeline features such as adding a branch pipeline or supporting Kafka.
|
|
14785
|
+
|
|
14786
|
+
---
|
|
14787
|
+
|
|
14655
14788
|
##### `monitoringDeployStepProps`<sup>Optional</sup> <a name="monitoringDeployStepProps" id="@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.monitoringDeployStepProps"></a>
|
|
14656
14789
|
|
|
14657
14790
|
```typescript
|
|
@@ -14682,6 +14815,19 @@ Default values:
|
|
|
14682
14815
|
|
|
14683
14816
|
---
|
|
14684
14817
|
|
|
14818
|
+
##### ~~`pipelineType`~~<sup>Optional</sup> <a name="pipelineType" id="@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.pipelineType"></a>
|
|
14819
|
+
|
|
14820
|
+
- *Deprecated:* Use the `features` property instead. For now, the pipeline types are mapped to the features.
|
|
14821
|
+
Defines which kind of pipeline is deployed.
|
|
14822
|
+
|
|
14823
|
+
```typescript
|
|
14824
|
+
public readonly pipelineType: PipelineType;
|
|
14825
|
+
```
|
|
14826
|
+
|
|
14827
|
+
- *Type:* <a href="#@rio-cloud/cdk-v2-constructs.PipelineType">PipelineType</a>
|
|
14828
|
+
|
|
14829
|
+
---
|
|
14830
|
+
|
|
14685
14831
|
##### `secretsDeployStepProps`<sup>Optional</sup> <a name="secretsDeployStepProps" id="@rio-cloud/cdk-v2-constructs.PipelineStackProps.property.secretsDeployStepProps"></a>
|
|
14686
14832
|
|
|
14687
14833
|
```typescript
|
package/docs/changelog.md
CHANGED
|
@@ -2,6 +2,34 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [6.15.0-alpha.1](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.15.0-alpha.0&sourceBranch=refs%2Ftags%2Fv6.15.0-alpha.1) (2024-11-21)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **pipeline:** Switch to Lambda Compute for SelfMutate CodeBuild step ([d2964d9](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/d2964d9f19941c3e4680935bbaff93163de47b5c))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **pipeline:** Add missing setting to ensure pipeline is restarted after update ([380d5e0](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/380d5e04cecc1db7b353275c24de5d98a52ad90e))
|
|
16
|
+
* **pipeline:** Fix typo in SSM parameter for kafka certificate script ([d63aebe](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/d63aebe7eb205b5c191d31e561554ddb82ab8c7b))
|
|
17
|
+
* **pipeline:** Make workaround for tarball assets robust against missing input files ([35cea59](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/35cea59b1e84901186cf993f50ae947aa29f0d50))
|
|
18
|
+
|
|
19
|
+
## [6.15.0-alpha.0](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.14.0&sourceBranch=refs%2Ftags%2Fv6.15.0-alpha.0) (2024-11-19)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
* **pipeline:** Add frontend deploy step ([56b7f05](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/56b7f05752f6d59d243220fa95c3759706221a94))
|
|
25
|
+
* **pipeline:** Allow to configure pipeline features in a modular way ([f773cc6](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/f773cc6e8a5c21039572ca4fd63134f07f4f865d))
|
|
26
|
+
* **pipeline:** Remove now unused buildspecs ([a6e4bdc](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/a6e4bdc65a1bc35102aaae96a58b422bf78b282f))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
### Bug Fixes
|
|
30
|
+
|
|
31
|
+
* **pipeline:** Fix typo in test ([65f1f5d](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/65f1f5d10f7f174317173454402b1e98f732b2c2))
|
|
32
|
+
|
|
5
33
|
## [6.14.0](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.13.4&sourceBranch=refs%2Ftags%2Fv6.14.0) (2024-11-18)
|
|
6
34
|
|
|
7
35
|
|
|
@@ -0,0 +1,5 @@
|
|
|
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;
|
|
5
|
+
export declare const logCommitHash: () => string[];
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logCommitHash = exports.createVulnerabilityBuildSpec = exports.createMainBuildSpec = void 0;
|
|
4
|
+
const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
|
|
5
|
+
const createMainBuildSpec = (features) => {
|
|
6
|
+
const env = {};
|
|
7
|
+
const buildCommands = [];
|
|
8
|
+
if (features.gradleBuild) {
|
|
9
|
+
buildCommands.push(...gradleBuildCommands(features.kafkaIntegration ?? false));
|
|
10
|
+
env['parameter-store'] = {
|
|
11
|
+
SERVICE_KEYSTORE_PASSWORD: '/config/${SERVICE_NAME}/service-keystore-password',
|
|
12
|
+
LICENSE_BUCKET_NAME: '/config/oss-licenses/bucket-name',
|
|
13
|
+
ACCOUNT_NAME: '/config/account/name',
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
if (features.kafkaIntegration) {
|
|
17
|
+
env['parameter-store'] = {
|
|
18
|
+
...env['parameter-store'] ?? {},
|
|
19
|
+
CREATE_AND_SIGN_CERTIFICATE_SCRIPT_S3_LOCATION: '/config/kafka-integration/create-and-sign-certificate-script-s3-location',
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
if (features.npmBuild) {
|
|
23
|
+
env.variables = {
|
|
24
|
+
CI: 'true',
|
|
25
|
+
};
|
|
26
|
+
buildCommands.push(...npmBuildCommands());
|
|
27
|
+
}
|
|
28
|
+
if (features.additionalBuildCommands) {
|
|
29
|
+
buildCommands.push('### ADDITIONAL BUILD COMMANDS ###', ...features.additionalBuildCommands);
|
|
30
|
+
}
|
|
31
|
+
buildCommands.push(...infrastructureBuildCommands());
|
|
32
|
+
return aws_codebuild_1.BuildSpec.fromObject({
|
|
33
|
+
version: '0.2',
|
|
34
|
+
env,
|
|
35
|
+
phases: {
|
|
36
|
+
install: {
|
|
37
|
+
'runtime-versions': getRuntimes(features),
|
|
38
|
+
},
|
|
39
|
+
pre_build: {
|
|
40
|
+
commands: (0, exports.logCommitHash)(),
|
|
41
|
+
},
|
|
42
|
+
build: {
|
|
43
|
+
commands: buildCommands,
|
|
44
|
+
},
|
|
45
|
+
post_build: {
|
|
46
|
+
commands: (0, exports.logCommitHash)(),
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
reports: createReports(features),
|
|
50
|
+
cache: {
|
|
51
|
+
paths: cachePaths(),
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
exports.createMainBuildSpec = createMainBuildSpec;
|
|
56
|
+
const createVulnerabilityBuildSpec = (features) => {
|
|
57
|
+
const env = {};
|
|
58
|
+
const buildCommands = [];
|
|
59
|
+
if (features.gradleBuild) {
|
|
60
|
+
env['parameter-store'] = {
|
|
61
|
+
NIST_DATA_MIRROR_URL: '/config/nist-data-mirror/url',
|
|
62
|
+
};
|
|
63
|
+
buildCommands.push(...[
|
|
64
|
+
'### GRADLE VULNERABILITY CHECK ###',
|
|
65
|
+
'./gradlew -Dorg.gradle.jvmargs=-Xmx4g dependencyCheckAnalyze',
|
|
66
|
+
]);
|
|
67
|
+
}
|
|
68
|
+
if (features.npmBuild) {
|
|
69
|
+
buildCommands.push(...[
|
|
70
|
+
'### NPM VULNERABILITY CHECK ###',
|
|
71
|
+
'npm audit --registry https://registry.npmjs.org --audit-level moderate --parseable --omit=dev',
|
|
72
|
+
]);
|
|
73
|
+
}
|
|
74
|
+
buildCommands.push(...[
|
|
75
|
+
'### INFRASTRUCTURE VULNERABILITY CHECK ###',
|
|
76
|
+
'cd infrastructure',
|
|
77
|
+
'npm audit --registry https://registry.npmjs.org --audit-level moderate --parseable --omit=dev',
|
|
78
|
+
'cd ..',
|
|
79
|
+
]);
|
|
80
|
+
return aws_codebuild_1.BuildSpec.fromObject({
|
|
81
|
+
version: '0.2',
|
|
82
|
+
env,
|
|
83
|
+
phases: {
|
|
84
|
+
install: {
|
|
85
|
+
'runtime-versions': getRuntimes(features),
|
|
86
|
+
},
|
|
87
|
+
pre_build: {
|
|
88
|
+
commands: (0, exports.logCommitHash)(),
|
|
89
|
+
},
|
|
90
|
+
build: {
|
|
91
|
+
commands: buildCommands,
|
|
92
|
+
},
|
|
93
|
+
post_build: {
|
|
94
|
+
commands: (0, exports.logCommitHash)(),
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
cache: {
|
|
98
|
+
paths: cachePathsVulnerability(),
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
exports.createVulnerabilityBuildSpec = createVulnerabilityBuildSpec;
|
|
103
|
+
const getRuntimes = (features) => {
|
|
104
|
+
const runtimes = {};
|
|
105
|
+
if (features.gradleBuild) {
|
|
106
|
+
runtimes.java = 'corretto17';
|
|
107
|
+
}
|
|
108
|
+
runtimes.nodejs = '20';
|
|
109
|
+
return runtimes;
|
|
110
|
+
};
|
|
111
|
+
const logCommitHash = () => [
|
|
112
|
+
'(echo "Build triggered by commit " && git log --pretty=format:"%h%x09%an%x09%s" -n 1 ) | tr -d "\\n"',
|
|
113
|
+
];
|
|
114
|
+
exports.logCommitHash = logCommitHash;
|
|
115
|
+
const infrastructureBuildCommands = () => [
|
|
116
|
+
'### INFRASTRUCTURE BUILD ###',
|
|
117
|
+
'cd infrastructure',
|
|
118
|
+
'npm ci',
|
|
119
|
+
'npm run cdk synth 1> /dev/null',
|
|
120
|
+
// In pipeline: Error parsing reference: is not a valid repository/tag: invalid reference format.
|
|
121
|
+
// workaround due to https://github.com/aws/aws-cdk/issues/18044',
|
|
122
|
+
'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\'',
|
|
123
|
+
'cd ..',
|
|
124
|
+
];
|
|
125
|
+
const gradleBuildCommands = (kafkaIntegration) => {
|
|
126
|
+
const commands = [];
|
|
127
|
+
commands.push(...[
|
|
128
|
+
'### GRADLE BUILD ###',
|
|
129
|
+
'./gradlew clean build',
|
|
130
|
+
'# license check',
|
|
131
|
+
'set -u; aws s3 cp s3://${LICENSE_BUCKET_NAME}/whitelist-gradle.txt licenses/approved_licenses.txt',
|
|
132
|
+
'./gradlew checkLicenses',
|
|
133
|
+
'set -u; aws s3 cp licenses/licenses.txt s3://${LICENSE_BUCKET_NAME}/reports/${ACCOUNT_NAME}/${SERVICE_NAME}.txt',
|
|
134
|
+
'# self signed certificate',
|
|
135
|
+
'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}',
|
|
136
|
+
]);
|
|
137
|
+
if (kafkaIntegration) {
|
|
138
|
+
commands.push(...[
|
|
139
|
+
'# kafka certificate',
|
|
140
|
+
'set -u; aws s3 cp --quiet s3://${CREATE_AND_SIGN_CERTIFICATE_SCRIPT_S3_LOCATION} create-and-sign-certificate',
|
|
141
|
+
'chmod +x create-and-sign-certificate',
|
|
142
|
+
'set -u; ./create-and-sign-certificate --keystore-password ${SERVICE_KEYSTORE_PASSWORD} --fqdn ${SERVICE_NAME}.${HOSTED_ZONE}',
|
|
143
|
+
'cp /cert/certificate.p12 containerfiles/kafka-keystore.p12',
|
|
144
|
+
]);
|
|
145
|
+
}
|
|
146
|
+
commands.push(...[
|
|
147
|
+
'# docker image build',
|
|
148
|
+
'./gradlew jibBuildTar --quiet',
|
|
149
|
+
]);
|
|
150
|
+
return commands;
|
|
151
|
+
};
|
|
152
|
+
const npmBuildCommands = () => [
|
|
153
|
+
'### NPM BUILD ###',
|
|
154
|
+
'npm ci',
|
|
155
|
+
'npm run lint',
|
|
156
|
+
'npm run test:ci',
|
|
157
|
+
'./check-oss-licenses.sh',
|
|
158
|
+
'npm run build',
|
|
159
|
+
];
|
|
160
|
+
const cachePaths = () => [
|
|
161
|
+
'/cert/**/*',
|
|
162
|
+
'/root/.cache/**/*',
|
|
163
|
+
'/root/.npm/**/*',
|
|
164
|
+
'/root/.gradle/caches/**/*',
|
|
165
|
+
'/root/.gradle/wrapper/**/*',
|
|
166
|
+
'/root/google-cloud-tools-java/jib/**/*',
|
|
167
|
+
'target/jib-cache/**/*',
|
|
168
|
+
];
|
|
169
|
+
const cachePathsVulnerability = () => [
|
|
170
|
+
'/root/.cache/**/*',
|
|
171
|
+
'/root/.gradle/caches/**/*',
|
|
172
|
+
'/root/.gradle/wrapper/**/*',
|
|
173
|
+
'/root/.gradle/dependency-check-data/**/*',
|
|
174
|
+
];
|
|
175
|
+
const createReports = (features) => {
|
|
176
|
+
const reports = {};
|
|
177
|
+
if (features.gradleBuild) {
|
|
178
|
+
reports.GradleBuildTestResults = {
|
|
179
|
+
'files': ['**/*'],
|
|
180
|
+
'base-directory': 'build/test-results',
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
if (features.npmBuild) {
|
|
184
|
+
reports.NpmBuildTestResults = {
|
|
185
|
+
'files': ['**/*'],
|
|
186
|
+
'base-directory': 'results',
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
return reports;
|
|
190
|
+
};
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRzcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZS9idWlsZHNwZWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZEQUFzRDtBQUkvQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsUUFBMEIsRUFBYSxFQUFFO0lBQzNFLE1BQU0sR0FBRyxHQUEyQyxFQUFFLENBQUM7SUFDdkQsTUFBTSxhQUFhLEdBQWEsRUFBRSxDQUFDO0lBRW5DLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvRSxHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRztZQUN2Qix5QkFBeUIsRUFBRSxtREFBbUQ7WUFDOUUsbUJBQW1CLEVBQUUsa0NBQWtDO1lBQ3ZELFlBQVksRUFBRSxzQkFBc0I7U0FDckMsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlCLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO1lBQ3ZCLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRTtZQUMvQiw4Q0FBOEMsRUFBRSwwRUFBMEU7U0FDM0gsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0QixHQUFHLENBQUMsU0FBUyxHQUFHO1lBQ2QsRUFBRSxFQUFFLE1BQU07U0FDWCxDQUFDO1FBQ0YsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNyQyxhQUFhLENBQUMsSUFB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QTRCO0lBQzVCLDBDQUEwQztDQUMzQyxDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUEwQixFQUFFLEVBQUU7SUFDbkQsTUFBTSxPQUFPLEdBQXdCLEVBQUUsQ0FBQztJQUN4QyxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixPQUFPLENBQUMsc0JBQXNCLEdBQUc7WUFDL0IsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLGdCQUFnQixFQUFFLG9CQUFvQjtTQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRztZQUM1QixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsZ0JBQWdCLEVBQUUsU0FBUztTQUM1QixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkU3BlYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgUGlwZWxpbmVGZWF0dXJlcyB9IGZyb20gJy4vcGlwZWxpbmUtc3RhY2snO1xuXG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNYWluQnVpbGRTcGVjID0gKGZlYXR1cmVzOiBQaXBlbGluZUZlYXR1cmVzKTogQnVpbGRTcGVjID0+IHtcbiAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHt9O1xuICBjb25zdCBidWlsZENvbW1hbmRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChmZWF0dXJlcy5ncmFkbGVCdWlsZCkge1xuICAgIGJ1aWxkQ29tbWFuZHMucHVzaCguLi5ncmFkbGVCdWlsZENvbW1hbmRzKGZlYXR1cmVzLmthZmthSW50ZWdyYXRpb24gPz8gZmFsc2UpKTtcbiAgICBlbnZbJ3BhcmFtZXRlci1zdG9yZSddID0ge1xuICAgICAgU0VSVklDRV9LRVlTVE9SRV9QQVNTV09SRDogJy9jb25maWcvJHtTRVJWSUNFX05BTUV9L3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmQnLFxuICAgICAgTElDRU5TRV9CVUNLRVRfTkFNRTogJy9jb25maWcvb3NzLWxpY2Vuc2VzL2J1Y2tldC1uYW1lJyxcbiAgICAgIEFDQ09VTlRfTkFNRTogJy9jb25maWcvYWNjb3VudC9uYW1lJyxcbiAgICB9O1xuICB9XG4gIGlmIChmZWF0dXJlcy5rYWZrYUludGVncmF0aW9uKSB7XG4gICAgZW52WydwYXJhbWV0ZXItc3RvcmUnXSA9IHtcbiAgICAgIC4uLmVudlsncGFyYW1ldGVyLXN0b3JlJ10gPz8ge30sXG4gICAgICBDUkVBVEVfQU5EX1NJR05fQ0VSVElGSUNBVEVfU0NSSVBUX1MzX0xPQ0FUSU9OOiAnL2NvbmZpZy9rYWZrYS1pbnRlZ3JhdGlvbi9jcmVhdGUtYW5kLXNpZ24tY2VydGlmaWNhdGUtc2NyaXB0LXMzLWxvY2F0aW9uJyxcbiAgICB9O1xuICB9XG4gIGlmIChmZWF0dXJlcy5ucG1CdWlsZCkge1xuICAgIGVudi52YXJpYWJsZXMgPSB7XG4gICAgICBDSTogJ3RydWUnLFxuICAgIH07XG4gICAgYnVpbGRDb21tYW5kcy5wdXNoKC4uLm5wbUJ1aWxkQ29tbWFuZHMoKSk7XG4gIH1cbiAgaWYgKGZlYXR1cmVzLmFkZGl0aW9uYWxCdWlsZENvbW1hbmRzKSB7XG4gICAgYnVpbGRDb21tYW5kcy5wdXNoKCcjIyMgQURESVRJT05BTCBCVUlMRCBDT01NQU5EUyAjIyMnLCAuLi5mZWF0dXJlcy5hZGRpdGlvbmFsQnVpbGRDb21tYW5kcyk7XG4gIH1cblxuICBidWlsZENvbW1hbmRzLnB1c2goLi4uaW5mcmFzdHJ1Y3R1cmVCdWlsZENvbW1hbmRzKCkpO1xuXG4gIHJldHVybiBCdWlsZFNwZWMuZnJvbU9iamVjdCh7XG4gICAgdmVyc2lvbjogJzAuMicsXG4gICAgZW52LFxuICAgIHBoYXNlczoge1xuICAgICAgaW5zdGFsbDoge1xuICAgICAgICAncnVudGltZS12ZXJzaW9ucyc6IGdldFJ1bnRpbWVzKGZlYXR1cmVzKSxcbiAgICAgIH0sXG4gICAgICBwcmVfYnVpbGQ6IHtcbiAgICAgICAgY29tbWFuZHM6IGxvZ0NvbW1pdEhhc2goKSxcbiAgICAgIH0sXG4gICAgICBidWlsZDoge1xuICAgICAgICBjb21tYW5kczogYnVpbGRDb21tYW5kcyxcbiAgICAgIH0sXG4gICAgICBwb3N0X2J1aWxkOiB7XG4gICAgICAgIGNvbW1hbmRzOiBsb2dDb21taXRIYXNoKCksXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVwb3J0czogY3JlYXRlUmVwb3J0cyhmZWF0dXJlcyksXG4gICAgY2FjaGU6IHtcbiAgICAgIHBhdGhzOiBjYWNoZVBhdGhzKCksXG4gICAgfSxcbiAgfSk7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBjcmVhdGVWdWxuZXJhYmlsaXR5QnVpbGRTcGVjID0gKGZlYXR1cmVzOiBQaXBlbGluZUZlYXR1cmVzKSA9PiB7XG4gIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7fTtcbiAgY29uc3QgYnVpbGRDb21tYW5kczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoZmVhdHVyZXMuZ3JhZGxlQnVpbGQpIHtcbiAgICBlbnZbJ3BhcmFtZXRlci1zdG9yZSddID0ge1xuICAgICAgTklTVF9EQVRBX01JUlJPUl9VUkw6ICcvY29uZmlnL25pc3QtZGF0YS1taXJyb3IvdXJsJyxcbiAgICB9O1xuICAgIGJ1aWxkQ29tbWFuZHMucHVzaCguLi5bXG4gICAgICAnIyMjIEdSQURMRSBWVUxORVJBQklMSVRZIENIRUNLICMjIycsXG4gICAgICAnLi9ncmFkbGV3IC1Eb3JnLmdyYWRsZS5qdm1hcmdzPS1YbXg0ZyBkZXBlbmRlbmN5Q2hlY2tBbmFseXplJyxcbiAgICBdKTtcbiAgfVxuICBpZiAoZmVhdHVyZXMubnBtQnVpbGQpIHtcbiAgICBidWlsZENvbW1hbmRzLnB1c2goLi4uW1xuICAgICAgJyMjIyBOUE0gVlVMTkVSQUJJTElUWSBDSEVDSyAjIyMnLFxuICAgICAgJ25wbSBhdWRpdCAtLXJlZ2lzdHJ5IGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnIC0tYXVkaXQtbGV2ZWwgbW9kZXJhdGUgLS1wYXJzZWFibGUgLS1vbWl0PWRldicsXG4gICAgXSk7XG4gIH1cbiAgYnVpbGRDb21tYW5kcy5wdXNoKC4uLltcbiAgICAnIyMjIElORlJBU1RSVUNUVVJFIFZVTE5FUkFCSUxJVFkgQ0hFQ0sgIyMjJyxcbiAgICAnY2QgaW5mcmFzdHJ1Y3R1cmUnLFxuICAgICducG0gYXVkaXQgLS1yZWdpc3RyeSBodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZyAtLWF1ZGl0LWxldmVsIG1vZGVyYXRlIC0tcGFyc2VhYmxlIC0tb21pdD1kZXYnLFxuICAgICdjZCAuLicsXG4gIF0pO1xuXG4gIHJldHVybiBCdWlsZFNwZWMuZnJvbU9iamVjdCh7XG4gICAgdmVyc2lvbjogJzAuMicsXG4gICAgZW52LFxuICAgIHBoYXNlczoge1xuICAgICAgaW5zdGFsbDoge1xuICAgICAgICAncnVudGltZS12ZXJzaW9ucyc6IGdldFJ1bnRpbWVzKGZlYXR1cmVzKSxcbiAgICAgIH0sXG4gICAgICBwcmVfYnVpbGQ6IHtcbiAgICAgICAgY29tbWFuZHM6IGxvZ0NvbW1pdEhhc2goKSxcbiAgICAgIH0sXG4gICAgICBidWlsZDoge1xuICAgICAgICBjb21tYW5kczogYnVpbGRDb21tYW5kcyxcbiAgICAgIH0sXG4gICAgICBwb3N0X2J1aWxkOiB7XG4gICAgICAgIGNvbW1hbmRzOiBsb2dDb21taXRIYXNoKCksXG4gICAgICB9LFxuICAgIH0sXG4gICAgY2FjaGU6IHtcbiAgICAgIHBhdGhzOiBjYWNoZVBhdGhzVnVsbmVyYWJpbGl0eSgpLFxuICAgIH0sXG4gIH0pO1xufTtcblxuY29uc3QgZ2V0UnVudGltZXMgPSAoZmVhdHVyZXM6IFBpcGVsaW5lRmVhdHVyZXMpID0+IHtcbiAgY29uc3QgcnVudGltZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgaWYgKGZlYXR1cmVzLmdyYWRsZUJ1aWxkKSB7XG4gICAgcnVudGltZXMuamF2YSA9ICdjb3JyZXR0bzE3JztcbiAgfVxuICBydW50aW1lcy5ub2RlanMgPSAnMjAnO1xuICByZXR1cm4gcnVudGltZXM7XG59O1xuXG5leHBvcnQgY29uc3QgbG9nQ29tbWl0SGFzaCA9ICgpID0+IFtcbiAgJyhlY2hvIFwiQnVpbGQgdHJpZ2dlcmVkIGJ5IGNvbW1pdCBcIiAmJiBnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDpcIiVoJXgwOSVhbiV4MDklc1wiIC1uIDEgKSB8IHRyIC1kIFwiXFxcXG5cIicsXG5dO1xuXG5jb25zdCBpbmZyYXN0cnVjdHVyZUJ1aWxkQ29tbWFuZHMgPSAoKSA9PiBbXG4gICcjIyMgSU5GUkFTVFJVQ1RVUkUgQlVJTEQgIyMjJyxcbiAgJ2NkIGluZnJhc3RydWN0dXJlJyxcbiAgJ25wbSBjaScsXG4gICducG0gcnVuIGNkayBzeW50aCAxPiAvZGV2L251bGwnLFxuICAvLyBJbiBwaXBlbGluZTogRXJyb3IgcGFyc2luZyByZWZlcmVuY2U6IGlzIG5vdCBhIHZhbGlkIHJlcG9zaXRvcnkvdGFnOiBpbnZhbGlkIHJlZmVyZW5jZSBmb3JtYXQuXG4gIC8vIHdvcmthcm91bmQgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTgwNDQnLFxuICAnZmluZCAuLyAtdHlwZSBmIC1uYW1lIFwiKkRlcGxveUFwcGxpY2F0aW9uU3RhY2tzKi5hc3NldHMuanNvblwiIC1wcmludDAgfCB4YXJncyAtLW5vLXJ1bi1pZi1lbXB0eSAtMCBzZWQgLS1pbi1wbGFjZSBcXCdzfGRvY2tlciBsb2FkIC1pIGFzc2V0Lnxkb2NrZXIgbG9hZCAtaSAuLi9hc3NldC58Z1xcJycsXG4gICdjZCAuLicsXG5dO1xuXG5jb25zdCBncmFkbGVCdWlsZENvbW1hbmRzID0gKGthZmthSW50ZWdyYXRpb246IGJvb2xlYW4pID0+IHtcbiAgY29uc3QgY29tbWFuZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbW1hbmRzLnB1c2goLi4uW1xuICAgICcjIyMgR1JBRExFIEJVSUxEICMjIycsXG4gICAgJy4vZ3JhZGxldyBjbGVhbiBidWlsZCcsXG4gICAgJyMgbGljZW5zZSBjaGVjaycsXG4gICAgJ3NldCAtdTsgYXdzIHMzIGNwIHMzOi8vJHtMSUNFTlNFX0JVQ0tFVF9OQU1FfS93aGl0ZWxpc3QtZ3JhZGxlLnR4dCBsaWNlbnNlcy9hcHByb3ZlZF9saWNlbnNlcy50eHQnLFxuICAgICcuL2dyYWRsZXcgY2hlY2tMaWNlbnNlcycsXG4gICAgJ3NldCAtdTsgYXdzIHMzIGNwIGxpY2Vuc2VzL2xpY2Vuc2VzLnR4dCBzMzovLyR7TElDRU5TRV9CVUNLRVRfTkFNRX0vcmVwb3J0cy8ke0FDQ09VTlRfTkFNRX0vJHtTRVJWSUNFX05BTUV9LnR4dCcsXG4gICAgJyMgc2VsZiBzaWduZWQgY2VydGlmaWNhdGUnLFxuICAgICdzZXQgLXU7IGtleXRvb2wgLWdlbmtleSAtYWxpYXMgSW50ZXJuYWxTZXJ2aWNlQ2VydGlmaWNhdGUgLWtleWFsZyBSU0EgLWtleXN0b3JlIGNvbnRhaW5lcmZpbGVzL3NlcnZpY2Uta2V5c3RvcmUucDEyIC12YWxpZGl0eSAzNjUwIC1zdG9yZXR5cGUgUEtDUzEyIC1kbmFtZSBcIkNOPWludGVybmFsLnNlcnZpY2UuJHtTRVJWSUNFX05BTUV9LiR7SE9TVEVEX1pPTkV9LCBPVT1Mb2dpc3RpY3MsIE89UmlvLCBMPU11bmljaCwgU1Q9QlksIEM9REVcIiAta2V5cGFzcyAke1NFUlZJQ0VfS0VZU1RPUkVfUEFTU1dPUkR9IC1zdG9yZXBhc3MgJHtTRVJWSUNFX0tFWVNUT1JFX1BBU1NXT1JEfScsXG4gIF0pO1xuICBpZiAoa2Fma2FJbnRlZ3JhdGlvbikge1xuICAgIGNvbW1hbmRzLnB1c2goLi4uW1xuICAgICAgJyMga2Fma2EgY2VydGlmaWNhdGUnLFxuICAgICAgJ3NldCAtdTsgYXdzIHMzIGNwIC0tcXVpZXQgczM6Ly8ke0NSRUFURV9BTkRfU0lHTl9DRVJUSUZJQ0FURV9TQ1JJUFRfUzNfTE9DQVRJT059IGNyZWF0ZS1hbmQtc2lnbi1jZXJ0aWZpY2F0ZScsXG4gICAgICAnY2htb2QgK3ggY3JlYXRlLWFuZC1zaWduLWNlcnRpZmljYXRlJyxcbiAgICAgICdzZXQgLXU7IC4vY3JlYXRlLWFuZC1zaWduLWNlcnRpZmljYXRlIC0ta2V5c3RvcmUtcGFzc3dvcmQgJHtTRVJWSUNFX0tFWVNUT1JFX1BBU1NXT1JEfSAtLWZxZG4gJHtTRVJWSUNFX05BTUV9LiR7SE9TVEVEX1pPTkV9JyxcbiAgICAgICdjcCAvY2VydC9jZXJ0aWZpY2F0ZS5wMTIgY29udGFpbmVyZmlsZXMva2Fma2Eta2V5c3RvcmUucDEyJyxcbiAgICBdKTtcbiAgfVxuICBjb21tYW5kcy5wdXNoKC4uLltcbiAgICAnIyBkb2NrZXIgaW1hZ2UgYnVpbGQnLFxuICAgICcuL2dyYWRsZXcgamliQnVpbGRUYXIgLS1xdWlldCcsXG4gIF0pO1xuICByZXR1cm4gY29tbWFuZHM7XG59O1xuXG5jb25zdCBucG1CdWlsZENvbW1hbmRzID0gKCkgPT4gW1xuICAnIyMjIE5QTSBCVUlMRCAjIyMnLFxuICAnbnBtIGNpJyxcbiAgJ25wbSBydW4gbGludCcsXG4gICducG0gcnVuIHRlc3Q6Y2knLFxuICAnLi9jaGVjay1vc3MtbGljZW5zZXMuc2gnLFxuICAnbnBtIHJ1biBidWlsZCcsXG5dO1xuXG5jb25zdCBjYWNoZVBhdGhzID0gKCkgPT4gW1xuICAnL2NlcnQvKiovKicsXG4gICcvcm9vdC8uY2FjaGUvKiovKicsXG4gICcvcm9vdC8ubnBtLyoqLyonLFxuICAnL3Jvb3QvLmdyYWRsZS9jYWNoZXMvKiovKicsXG4gICcvcm9vdC8uZ3JhZGxlL3dyYXBwZXIvKiovKicsXG4gICcvcm9vdC9nb29nbGUtY2xvdWQtdG9vbHMtamF2YS9qaWIvKiovKicsXG4gICd0YXJnZXQvamliLWNhY2hlLyoqLyonLFxuXTtcblxuY29uc3QgY2FjaGVQYXRoc1Z1bG5lcmFiaWxpdHkgPSAoKSA9PiBbXG4gICcvcm9vdC8uY2FjaGUvKiovKicsXG4gICcvcm9vdC8uZ3JhZGxlL2NhY2hlcy8qKi8qJyxcbiAgJy9yb290Ly5ncmFkbGUvd3JhcHBlci8qKi8qJyxcbiAgJy9yb290Ly5ncmFkbGUvZGVwZW5kZW5jeS1jaGVjay1kYXRhLyoqLyonLFxuXTtcblxuY29uc3QgY3JlYXRlUmVwb3J0cyA9IChmZWF0dXJlczogUGlwZWxpbmVGZWF0dXJlcykgPT4ge1xuICBjb25zdCByZXBvcnRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIGlmIChmZWF0dXJlcy5ncmFkbGVCdWlsZCkge1xuICAgIHJlcG9ydHMuR3JhZGxlQnVpbGRUZXN0UmVzdWx0cyA9IHtcbiAgICAgICdmaWxlcyc6IFsnKiovKiddLFxuICAgICAgJ2Jhc2UtZGlyZWN0b3J5JzogJ2J1aWxkL3Rlc3QtcmVzdWx0cycsXG4gICAgfTtcbiAgfVxuICBpZiAoZmVhdHVyZXMubnBtQnVpbGQpIHtcbiAgICByZXBvcnRzLk5wbUJ1aWxkVGVzdFJlc3VsdHMgPSB7XG4gICAgICAnZmlsZXMnOiBbJyoqLyonXSxcbiAgICAgICdiYXNlLWRpcmVjdG9yeSc6ICdyZXN1bHRzJyxcbiAgICB9O1xuICB9XG4gIHJldHVybiByZXBvcnRzO1xufTtcbiJdfQ==
|
|
@@ -32,8 +32,15 @@ export interface PipelineStackProps extends StackProps {
|
|
|
32
32
|
readonly appStackFactory: IAppStackFactory;
|
|
33
33
|
/**
|
|
34
34
|
* Defines which kind of pipeline is deployed.
|
|
35
|
+
*
|
|
36
|
+
* Use the features to combine different opinionated, RIO-specific pipeline features such as adding a branch pipeline or supporting Kafka.
|
|
35
37
|
*/
|
|
36
|
-
readonly
|
|
38
|
+
readonly features?: PipelineFeatures;
|
|
39
|
+
/**
|
|
40
|
+
* @deprecated Use the `features` property instead. For now, the pipeline types are mapped to the features.
|
|
41
|
+
* Defines which kind of pipeline is deployed.
|
|
42
|
+
*/
|
|
43
|
+
readonly pipelineType?: PipelineType;
|
|
37
44
|
/**
|
|
38
45
|
* Defines how often the pipeline is triggered automatically. Is defined via a cron expression.
|
|
39
46
|
*
|
|
@@ -131,6 +138,44 @@ export interface PipelineStackRioMonitoringDeployStepProps {
|
|
|
131
138
|
[directory: string]: string[];
|
|
132
139
|
};
|
|
133
140
|
}
|
|
141
|
+
export interface PipelineFeatures {
|
|
142
|
+
/**
|
|
143
|
+
* Create a branch pipeline used by renovate. Defaults to `true`.
|
|
144
|
+
*/
|
|
145
|
+
readonly branchPipeline?: boolean;
|
|
146
|
+
/**
|
|
147
|
+
* Create a vulnerability pipeline to scan dependencies for vulnerabilities. Defaults to `true`.
|
|
148
|
+
*/
|
|
149
|
+
readonly vulnerabilityPipeline?: boolean;
|
|
150
|
+
/**
|
|
151
|
+
* Run a standard gradle build in the repository root. Defaults to `false`:
|
|
152
|
+
* - build and test of the artifact via command "./gradlew clean build"
|
|
153
|
+
* - license-check and upload of license-check-file via command "./gradlew checkLicenses"
|
|
154
|
+
* - create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer
|
|
155
|
+
* - build the container image via command "./gradlew jibBuildTar"
|
|
156
|
+
*/
|
|
157
|
+
readonly gradleBuild?: boolean;
|
|
158
|
+
/**
|
|
159
|
+
* Run a standard npm build in the repository root. Defaults to `false`:
|
|
160
|
+
* - run linter via command "npm run lint"
|
|
161
|
+
* - run tests via command "npm run test:ci"
|
|
162
|
+
* - run a license check by calling the script "check-oss-licenses.sh" (from the RIO frontend template)
|
|
163
|
+
* - build the artifact via command "npm run build"
|
|
164
|
+
*/
|
|
165
|
+
readonly npmBuild?: boolean;
|
|
166
|
+
/**
|
|
167
|
+
* Add required steps and permissions to support Kafka. Currently, this requires `gradleBuild` to be set to `true`. Defaults to `false`.
|
|
168
|
+
*/
|
|
169
|
+
readonly kafkaIntegration?: boolean;
|
|
170
|
+
/**
|
|
171
|
+
* S3 Bucket to deploy frontend to. Requires `npmBuild` to be set to `true`. If set, the output of the npm build is deployed to the provided bucket.
|
|
172
|
+
*/
|
|
173
|
+
readonly frontendBucketName?: string;
|
|
174
|
+
/**
|
|
175
|
+
* Additional build commands for main and branch pipeline. Will be added after all build & test commands, before the infrastructure build.
|
|
176
|
+
*/
|
|
177
|
+
readonly additionalBuildCommands?: string[];
|
|
178
|
+
}
|
|
134
179
|
export declare enum PipelineType {
|
|
135
180
|
/**
|
|
136
181
|
* Self-mutating codepipeline deploying the provided AppStack. Be aware: The provided service won't have access to Kafka.
|
|
@@ -181,6 +226,7 @@ export interface CodeBuildOptions {
|
|
|
181
226
|
readonly buildEnvironment?: BuildEnvironment;
|
|
182
227
|
}
|
|
183
228
|
export declare class PipelineStack extends Stack {
|
|
229
|
+
private readonly _features;
|
|
184
230
|
private readonly _mainCodeBuildProject;
|
|
185
231
|
private readonly _branchCodeBuildProject;
|
|
186
232
|
private readonly _bucket;
|
|
@@ -197,6 +243,7 @@ export declare class PipelineStack extends Stack {
|
|
|
197
243
|
constructor(scope: Construct, id: string, props: PipelineStackProps);
|
|
198
244
|
get mainCodebuildProject(): cdk.pipelines.CodeBuildStep;
|
|
199
245
|
get branchCodeBuildProject(): CodeBuildStep;
|
|
246
|
+
private parseFeatures;
|
|
200
247
|
private createRioCodeBuildProject;
|
|
201
248
|
private addMainPipeline;
|
|
202
249
|
private addBranchPipeline;
|
|
@@ -204,7 +251,7 @@ export declare class PipelineStack extends Stack {
|
|
|
204
251
|
private createStripAssetsStep;
|
|
205
252
|
private createCapabilityMonitoringDeployStep;
|
|
206
253
|
private createSecretsDeployStep;
|
|
207
|
-
private
|
|
254
|
+
private createDeployFrontendDeployStep;
|
|
208
255
|
private grantPermissionsForKafkaIntegration;
|
|
209
256
|
private loadBuildSpecFromFile;
|
|
210
257
|
private renamePipelineToLowerCase;
|