projen-modules 3.1.0 → 3.2.0
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 +72 -18
- package/API.md +42 -0
- package/README.md +5 -0
- package/lib/components/github/codeql.d.ts +25 -0
- package/lib/components/github/codeql.js +64 -0
- package/lib/components/github/mergify.js +22 -5
- package/lib/components/readme/elements/section.js +1 -1
- package/lib/components/readme/index.js +1 -1
- package/lib/projects/cdk-ts/cdk-typescript-app-options.d.ts +5 -0
- package/lib/projects/cdk-ts/cdk-typescript-app-options.js +1 -1
- package/lib/projects/cdk-ts/index.js +9 -2
- package/lib/projects/jsii/index.js +9 -2
- package/lib/projects/jsii/jsii-project-options.d.ts +5 -0
- package/lib/projects/jsii/jsii-project-options.js +1 -1
- package/lib/projects/npm/index.js +1 -1
- package/lib/projects/python/index.js +8 -2
- package/lib/projects/python/python-package-options.d.ts +5 -0
- package/lib/projects/python/python-package-options.js +1 -1
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
},
|
|
100
100
|
"name": "projen-modules",
|
|
101
101
|
"readme": {
|
|
102
|
-
"markdown": "# projen-modules\n\nA collection of custom projen modules, that can be used to bootstrap and maintain consistent project configuration, tooling, dependencies, and builds.\n\n## Getting Started\n\n```sh\nyarn install\nnpx projen build\n```\n\nThis will:\n* Install the dependencies\n* Apply any projen changes\n* Run tests\n* Package project locally\n\nAny files changed by projen should be committed to git.\n\nRunning the tests like this will update any snapshot files, this should be reviewed and committed to git.\n\n## Testing\n\nTypes of testing:\n* Snapshot - projen project outputs are stored as a snapshot in the corresponding `__snapshots__` directory. When the project changes then it is expected that these snapshots change too and should be reviewed committed alongside the project.\n* Unit tests - these assert on specific functionality of the project and should be written for any new functionality added.\n\n\n## GitHub Configuration\n\nAll pull requests are merged by the [Mergify](https://mergify.com) merge queue, configured in `.mergify.yml`. Once a pull request's checks pass, Mergify queues it, brings it up to date with the default branch, waits for the checks again and squash merges it. Draft pull requests and those labelled `do-not-merge` are not merged.\n\nThe repository must be configured as below so that nothing can be merged without going through the queue.\n\n### Mergify\n\nInstall the [Mergify GitHub App](https://github.com/apps/mergify) and give it access to this repository.\n\n### Pull request settings\n\nIn **Settings → General → Pull Requests**:\n* Allow squash merging only (untick merge commits and rebase merging), matching the queue's merge method.\n* Untick **Allow auto-merge**, because GitHub's own auto-merge merges outside the queue.\n* Tick **Automatically delete head branches**.\n\n### Branch ruleset\n\nIn **Settings → Rules → Rulesets**, create a branch ruleset with enforcement **Active** that targets the default branch, and set:\n* **Bypass list**: the **Mergify** app only, in **Exempt** mode. Do not add admins or other roles, as anyone on this list can merge without the queue.\n* **Restrict updates**: only bypass actors can update the branch, so pull requests cannot be merged from the GitHub UI or CLI and commits cannot be pushed directly.\n* **Restrict deletions** and **Block force pushes**.\n* **Require a pull request before merging**, with 0 required approvals.\n* **Require status checks to pass**, listing the checks that `.mergify.yml` waits for: `build`, `package-js`, `package-python`. Leave **Require branches to be up to date before merging** unticked, as the queue already updates and retests each pull request.\n\nDo not enable GitHub's own **Require merge queue** rule, as it competes with Mergify.\n\nIf the queue is unavailable and a change has to be merged, add yourself to the bypass list temporarily and remove yourself afterwards.\n\n## Creating a New Project\n\n\n```\nnpx projen new {project} --from projen-modules\n```\n\nSome projects may have required fields that need to be specified as part of this command, review any errors for details what needs to be specified.\n\n### Project Types\n\n| Project type | Description |\n| ---------------------------------------------- | -------------------------- |\n| [cdk-typescript-app](API.md#cdktypescriptapp-) | A typescript CDK app |\n| [npm-package](API.md#npmpackage-) | A typescript npm package |\n| [python-package](API.md#pythonpackage-) | A python package |\n| [jsii-package](API.md#jsiiproject-) | A typescript JSII package |\n\n## Project Structure\n\nAll source is located in `src` and is grouped by:\n* `components` - these are common building blocks that can be used by projects to implement specific project functionality.\n* `projects` - these are projects that can be built from this project (see #something)\n* `utils` - these are helper functions that are often reused\n\n`test` contains tests, and mirrors the `src` directory structure. Within here there are `__snapshots__` which contain snapshots of project tests (see #section)."
|
|
102
|
+
"markdown": "# projen-modules\n\nA collection of custom projen modules, that can be used to bootstrap and maintain consistent project configuration, tooling, dependencies, and builds.\n\n## Getting Started\n\n```sh\nyarn install\nnpx projen build\n```\n\nThis will:\n* Install the dependencies\n* Apply any projen changes\n* Run tests\n* Package project locally\n\nAny files changed by projen should be committed to git.\n\nRunning the tests like this will update any snapshot files, this should be reviewed and committed to git.\n\n## Testing\n\nTypes of testing:\n* Snapshot - projen project outputs are stored as a snapshot in the corresponding `__snapshots__` directory. When the project changes then it is expected that these snapshots change too and should be reviewed committed alongside the project.\n* Unit tests - these assert on specific functionality of the project and should be written for any new functionality added.\n\n\n## GitHub Configuration\n\nAll pull requests are merged by the [Mergify](https://mergify.com) merge queue, configured in `.mergify.yml`. Once a pull request's checks pass, Mergify queues it, brings it up to date with the default branch, waits for the checks again and squash merges it. Draft pull requests and those labelled `do-not-merge` are not merged.\n\nThe repository must be configured as below so that nothing can be merged without going through the queue.\n\n### Mergify\n\nInstall the [Mergify GitHub App](https://github.com/apps/mergify) and give it access to this repository.\n\n### Pull request settings\n\nIn **Settings → General → Pull Requests**:\n* Allow squash merging only (untick merge commits and rebase merging), matching the queue's merge method.\n* Untick **Allow auto-merge**, because GitHub's own auto-merge merges outside the queue.\n* Tick **Automatically delete head branches**.\n\n### Code scanning\n\nCodeQL runs from `.github/workflows/codeql.yml`, which is managed by projen. In **Settings → Advanced Security**, leave CodeQL **Default setup** off, because it cannot run alongside this workflow. Under **Protection rules**, keep the **Check run failure threshold** at **High or higher** for security alerts and **Errors** for other alerts, as this decides whether the `CodeQL` check fails. Private repositories also need GitHub Code Security enabled there for code scanning results to be uploaded.\n\n### Branch ruleset\n\nIn **Settings → Rules → Rulesets**, create a branch ruleset with enforcement **Active** that targets the default branch, and set:\n* **Bypass list**: the **Mergify** app only, in **Exempt** mode. Do not add admins or other roles, as anyone on this list can merge without the queue.\n* **Restrict updates**: only bypass actors can update the branch, so pull requests cannot be merged from the GitHub UI or CLI and commits cannot be pushed directly.\n* **Restrict deletions** and **Block force pushes**.\n* **Require a pull request before merging**, with 0 required approvals.\n* **Require status checks to pass**, listing the checks that `.mergify.yml` waits for: `build`, `package-js`, `package-python`. Leave **Require branches to be up to date before merging** unticked, as the queue already updates and retests each pull request.\n* **Require code scanning results**, with the tool **CodeQL**, security alerts set to **High or higher** and alerts set to **Errors**. Mergify is exempt from this rule, so `.mergify.yml` also waits for the `CodeQL` check instead.\n\nDo not enable GitHub's own **Require merge queue** rule, as it competes with Mergify.\n\nIf the queue is unavailable and a change has to be merged, add yourself to the bypass list temporarily and remove yourself afterwards.\n\n## Creating a New Project\n\n\n```\nnpx projen new {project} --from projen-modules\n```\n\nSome projects may have required fields that need to be specified as part of this command, review any errors for details what needs to be specified.\n\n### Project Types\n\n| Project type | Description |\n| ---------------------------------------------- | -------------------------- |\n| [cdk-typescript-app](API.md#cdktypescriptapp-) | A typescript CDK app |\n| [npm-package](API.md#npmpackage-) | A typescript npm package |\n| [python-package](API.md#pythonpackage-) | A python package |\n| [jsii-package](API.md#jsiiproject-) | A typescript JSII package |\n\n## Project Structure\n\nAll source is located in `src` and is grouped by:\n* `components` - these are common building blocks that can be used by projects to implement specific project functionality.\n* `projects` - these are projects that can be built from this project (see #something)\n* `utils` - these are helper functions that are often reused\n\n`test` contains tests, and mirrors the `src` directory structure. Within here there are `__snapshots__` which contain snapshots of project tests (see #section)."
|
|
103
103
|
},
|
|
104
104
|
"repository": {
|
|
105
105
|
"type": "git",
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
},
|
|
134
134
|
"locationInModule": {
|
|
135
135
|
"filename": "src/projects/cdk-ts/index.ts",
|
|
136
|
-
"line":
|
|
136
|
+
"line": 36
|
|
137
137
|
},
|
|
138
138
|
"parameters": [
|
|
139
139
|
{
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
"kind": "class",
|
|
148
148
|
"locationInModule": {
|
|
149
149
|
"filename": "src/projects/cdk-ts/index.ts",
|
|
150
|
-
"line":
|
|
150
|
+
"line": 33
|
|
151
151
|
},
|
|
152
152
|
"name": "CdkTypeScriptApp",
|
|
153
153
|
"properties": [
|
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
},
|
|
158
158
|
"locationInModule": {
|
|
159
159
|
"filename": "src/projects/cdk-ts/index.ts",
|
|
160
|
-
"line":
|
|
160
|
+
"line": 34
|
|
161
161
|
},
|
|
162
162
|
"name": "readme",
|
|
163
163
|
"type": {
|
|
@@ -208,7 +208,7 @@
|
|
|
208
208
|
"immutable": true,
|
|
209
209
|
"locationInModule": {
|
|
210
210
|
"filename": "src/projects/cdk-ts/cdk-typescript-app-options.ts",
|
|
211
|
-
"line":
|
|
211
|
+
"line": 1275
|
|
212
212
|
},
|
|
213
213
|
"name": "codeOwners",
|
|
214
214
|
"type": {
|
|
@@ -923,6 +923,24 @@
|
|
|
923
923
|
"primitive": "string"
|
|
924
924
|
}
|
|
925
925
|
},
|
|
926
|
+
{
|
|
927
|
+
"abstract": true,
|
|
928
|
+
"docs": {
|
|
929
|
+
"default": "true",
|
|
930
|
+
"stability": "stable",
|
|
931
|
+
"summary": "Scan the code with CodeQL on pull requests, pushes to the default branch and weekly."
|
|
932
|
+
},
|
|
933
|
+
"immutable": true,
|
|
934
|
+
"locationInModule": {
|
|
935
|
+
"filename": "src/projects/cdk-ts/cdk-typescript-app-options.ts",
|
|
936
|
+
"line": 1271
|
|
937
|
+
},
|
|
938
|
+
"name": "codeql",
|
|
939
|
+
"optional": true,
|
|
940
|
+
"type": {
|
|
941
|
+
"primitive": "boolean"
|
|
942
|
+
}
|
|
943
|
+
},
|
|
926
944
|
{
|
|
927
945
|
"abstract": true,
|
|
928
946
|
"docs": {
|
|
@@ -3560,7 +3578,7 @@
|
|
|
3560
3578
|
},
|
|
3561
3579
|
"locationInModule": {
|
|
3562
3580
|
"filename": "src/projects/jsii/index.ts",
|
|
3563
|
-
"line":
|
|
3581
|
+
"line": 34
|
|
3564
3582
|
},
|
|
3565
3583
|
"parameters": [
|
|
3566
3584
|
{
|
|
@@ -3574,7 +3592,7 @@
|
|
|
3574
3592
|
"kind": "class",
|
|
3575
3593
|
"locationInModule": {
|
|
3576
3594
|
"filename": "src/projects/jsii/index.ts",
|
|
3577
|
-
"line":
|
|
3595
|
+
"line": 31
|
|
3578
3596
|
},
|
|
3579
3597
|
"name": "JsiiProject",
|
|
3580
3598
|
"properties": [
|
|
@@ -3584,7 +3602,7 @@
|
|
|
3584
3602
|
},
|
|
3585
3603
|
"locationInModule": {
|
|
3586
3604
|
"filename": "src/projects/jsii/index.ts",
|
|
3587
|
-
"line":
|
|
3605
|
+
"line": 32
|
|
3588
3606
|
},
|
|
3589
3607
|
"name": "readme",
|
|
3590
3608
|
"type": {
|
|
@@ -3652,7 +3670,7 @@
|
|
|
3652
3670
|
"immutable": true,
|
|
3653
3671
|
"locationInModule": {
|
|
3654
3672
|
"filename": "src/projects/jsii/jsii-project-options.ts",
|
|
3655
|
-
"line":
|
|
3673
|
+
"line": 1244
|
|
3656
3674
|
},
|
|
3657
3675
|
"name": "codeOwners",
|
|
3658
3676
|
"type": {
|
|
@@ -4275,6 +4293,24 @@
|
|
|
4275
4293
|
"primitive": "string"
|
|
4276
4294
|
}
|
|
4277
4295
|
},
|
|
4296
|
+
{
|
|
4297
|
+
"abstract": true,
|
|
4298
|
+
"docs": {
|
|
4299
|
+
"default": "true",
|
|
4300
|
+
"stability": "stable",
|
|
4301
|
+
"summary": "Scan the code with CodeQL on pull requests, pushes to the default branch and weekly."
|
|
4302
|
+
},
|
|
4303
|
+
"immutable": true,
|
|
4304
|
+
"locationInModule": {
|
|
4305
|
+
"filename": "src/projects/jsii/jsii-project-options.ts",
|
|
4306
|
+
"line": 1240
|
|
4307
|
+
},
|
|
4308
|
+
"name": "codeql",
|
|
4309
|
+
"optional": true,
|
|
4310
|
+
"type": {
|
|
4311
|
+
"primitive": "boolean"
|
|
4312
|
+
}
|
|
4313
|
+
},
|
|
4278
4314
|
{
|
|
4279
4315
|
"abstract": true,
|
|
4280
4316
|
"docs": {
|
|
@@ -9853,7 +9889,7 @@
|
|
|
9853
9889
|
},
|
|
9854
9890
|
"locationInModule": {
|
|
9855
9891
|
"filename": "src/projects/python/index.ts",
|
|
9856
|
-
"line":
|
|
9892
|
+
"line": 33
|
|
9857
9893
|
},
|
|
9858
9894
|
"parameters": [
|
|
9859
9895
|
{
|
|
@@ -9867,7 +9903,7 @@
|
|
|
9867
9903
|
"kind": "class",
|
|
9868
9904
|
"locationInModule": {
|
|
9869
9905
|
"filename": "src/projects/python/index.ts",
|
|
9870
|
-
"line":
|
|
9906
|
+
"line": 29
|
|
9871
9907
|
},
|
|
9872
9908
|
"name": "PythonPackage",
|
|
9873
9909
|
"properties": [
|
|
@@ -9878,7 +9914,7 @@
|
|
|
9878
9914
|
"immutable": true,
|
|
9879
9915
|
"locationInModule": {
|
|
9880
9916
|
"filename": "src/projects/python/index.ts",
|
|
9881
|
-
"line":
|
|
9917
|
+
"line": 30
|
|
9882
9918
|
},
|
|
9883
9919
|
"name": "autoMerge",
|
|
9884
9920
|
"optional": true,
|
|
@@ -9892,7 +9928,7 @@
|
|
|
9892
9928
|
},
|
|
9893
9929
|
"locationInModule": {
|
|
9894
9930
|
"filename": "src/projects/python/index.ts",
|
|
9895
|
-
"line":
|
|
9931
|
+
"line": 31
|
|
9896
9932
|
},
|
|
9897
9933
|
"name": "readme",
|
|
9898
9934
|
"type": {
|
|
@@ -9960,7 +9996,7 @@
|
|
|
9960
9996
|
"immutable": true,
|
|
9961
9997
|
"locationInModule": {
|
|
9962
9998
|
"filename": "src/projects/python/python-package-options.ts",
|
|
9963
|
-
"line":
|
|
9999
|
+
"line": 391
|
|
9964
10000
|
},
|
|
9965
10001
|
"name": "codeOwners",
|
|
9966
10002
|
"type": {
|
|
@@ -10126,6 +10162,24 @@
|
|
|
10126
10162
|
"primitive": "boolean"
|
|
10127
10163
|
}
|
|
10128
10164
|
},
|
|
10165
|
+
{
|
|
10166
|
+
"abstract": true,
|
|
10167
|
+
"docs": {
|
|
10168
|
+
"default": "true",
|
|
10169
|
+
"stability": "stable",
|
|
10170
|
+
"summary": "Scan the code with CodeQL on pull requests, pushes to the default branch and weekly."
|
|
10171
|
+
},
|
|
10172
|
+
"immutable": true,
|
|
10173
|
+
"locationInModule": {
|
|
10174
|
+
"filename": "src/projects/python/python-package-options.ts",
|
|
10175
|
+
"line": 387
|
|
10176
|
+
},
|
|
10177
|
+
"name": "codeql",
|
|
10178
|
+
"optional": true,
|
|
10179
|
+
"type": {
|
|
10180
|
+
"primitive": "boolean"
|
|
10181
|
+
}
|
|
10182
|
+
},
|
|
10129
10183
|
{
|
|
10130
10184
|
"abstract": true,
|
|
10131
10185
|
"docs": {
|
|
@@ -10702,7 +10756,7 @@
|
|
|
10702
10756
|
"immutable": true,
|
|
10703
10757
|
"locationInModule": {
|
|
10704
10758
|
"filename": "src/projects/python/python-package-options.ts",
|
|
10705
|
-
"line":
|
|
10759
|
+
"line": 396
|
|
10706
10760
|
},
|
|
10707
10761
|
"name": "pullRequestTemplate",
|
|
10708
10762
|
"optional": true,
|
|
@@ -10720,7 +10774,7 @@
|
|
|
10720
10774
|
"immutable": true,
|
|
10721
10775
|
"locationInModule": {
|
|
10722
10776
|
"filename": "src/projects/python/python-package-options.ts",
|
|
10723
|
-
"line":
|
|
10777
|
+
"line": 401
|
|
10724
10778
|
},
|
|
10725
10779
|
"name": "pullRequestTemplateContents",
|
|
10726
10780
|
"optional": true,
|
|
@@ -11285,6 +11339,6 @@
|
|
|
11285
11339
|
"symbolId": "src/components/readme/elements/section:Section"
|
|
11286
11340
|
}
|
|
11287
11341
|
},
|
|
11288
|
-
"version": "3.
|
|
11289
|
-
"fingerprint": "
|
|
11342
|
+
"version": "3.2.0",
|
|
11343
|
+
"fingerprint": "SqSTEbuSGXMK69aCHL2ZKsfp/IqCWwE3Sv+ocdd9j74="
|
|
11290
11344
|
}
|
package/API.md
CHANGED
|
@@ -5684,6 +5684,7 @@ const cdkTypeScriptAppOptions: CdkTypeScriptAppOptions = { ... }
|
|
|
5684
5684
|
| <code><a href="#projen-modules.CdkTypeScriptAppOptions.property.codeArtifactOptions">codeArtifactOptions</a></code> | <code>projen.javascript.CodeArtifactOptions</code> | Options for npm packages using AWS CodeArtifact. |
|
|
5685
5685
|
| <code><a href="#projen-modules.CdkTypeScriptAppOptions.property.codeCov">codeCov</a></code> | <code>boolean</code> | Define a GitHub workflow step for sending code coverage metrics to https://codecov.io/. Uses codecov/codecov-action. By default, OIDC auth is used. Alternatively a token can be provided via `codeCovTokenSecret`. |
|
|
5686
5686
|
| <code><a href="#projen-modules.CdkTypeScriptAppOptions.property.codeCovTokenSecret">codeCovTokenSecret</a></code> | <code>string</code> | Define the secret name for a specified https://codecov.io/ token. |
|
|
5687
|
+
| <code><a href="#projen-modules.CdkTypeScriptAppOptions.property.codeql">codeql</a></code> | <code>boolean</code> | Scan the code with CodeQL on pull requests, pushes to the default branch and weekly. |
|
|
5687
5688
|
| <code><a href="#projen-modules.CdkTypeScriptAppOptions.property.commitGenerated">commitGenerated</a></code> | <code>boolean</code> | Whether to commit the managed files by default. |
|
|
5688
5689
|
| <code><a href="#projen-modules.CdkTypeScriptAppOptions.property.config">config</a></code> | <code>{[ key: string ]: any}</code> | Configuration values available to package scripts at runtime. |
|
|
5689
5690
|
| <code><a href="#projen-modules.CdkTypeScriptAppOptions.property.constructsVersion">constructsVersion</a></code> | <code>string</code> | Minimum version of the `constructs` library to depend on. |
|
|
@@ -6406,6 +6407,19 @@ Define the secret name for a specified https://codecov.io/ token.
|
|
|
6406
6407
|
|
|
6407
6408
|
---
|
|
6408
6409
|
|
|
6410
|
+
##### `codeql`<sup>Optional</sup> <a name="codeql" id="projen-modules.CdkTypeScriptAppOptions.property.codeql"></a>
|
|
6411
|
+
|
|
6412
|
+
```typescript
|
|
6413
|
+
public readonly codeql: boolean;
|
|
6414
|
+
```
|
|
6415
|
+
|
|
6416
|
+
- *Type:* boolean
|
|
6417
|
+
- *Default:* true
|
|
6418
|
+
|
|
6419
|
+
Scan the code with CodeQL on pull requests, pushes to the default branch and weekly.
|
|
6420
|
+
|
|
6421
|
+
---
|
|
6422
|
+
|
|
6409
6423
|
##### `commitGenerated`<sup>Optional</sup> <a name="commitGenerated" id="projen-modules.CdkTypeScriptAppOptions.property.commitGenerated"></a>
|
|
6410
6424
|
|
|
6411
6425
|
```typescript
|
|
@@ -8396,6 +8410,7 @@ const jsiiProjectOptions: JsiiProjectOptions = { ... }
|
|
|
8396
8410
|
| <code><a href="#projen-modules.JsiiProjectOptions.property.codeArtifactOptions">codeArtifactOptions</a></code> | <code>projen.javascript.CodeArtifactOptions</code> | Options for npm packages using AWS CodeArtifact. |
|
|
8397
8411
|
| <code><a href="#projen-modules.JsiiProjectOptions.property.codeCov">codeCov</a></code> | <code>boolean</code> | Define a GitHub workflow step for sending code coverage metrics to https://codecov.io/. Uses codecov/codecov-action. By default, OIDC auth is used. Alternatively a token can be provided via `codeCovTokenSecret`. |
|
|
8398
8412
|
| <code><a href="#projen-modules.JsiiProjectOptions.property.codeCovTokenSecret">codeCovTokenSecret</a></code> | <code>string</code> | Define the secret name for a specified https://codecov.io/ token. |
|
|
8413
|
+
| <code><a href="#projen-modules.JsiiProjectOptions.property.codeql">codeql</a></code> | <code>boolean</code> | Scan the code with CodeQL on pull requests, pushes to the default branch and weekly. |
|
|
8399
8414
|
| <code><a href="#projen-modules.JsiiProjectOptions.property.commitGenerated">commitGenerated</a></code> | <code>boolean</code> | Whether to commit the managed files by default. |
|
|
8400
8415
|
| <code><a href="#projen-modules.JsiiProjectOptions.property.compat">compat</a></code> | <code>boolean</code> | Automatically run API compatibility test against the latest version published to npm after compilation. |
|
|
8401
8416
|
| <code><a href="#projen-modules.JsiiProjectOptions.property.compatIgnore">compatIgnore</a></code> | <code>string</code> | Name of the ignore file for API compatibility tests. |
|
|
@@ -9051,6 +9066,19 @@ Define the secret name for a specified https://codecov.io/ token.
|
|
|
9051
9066
|
|
|
9052
9067
|
---
|
|
9053
9068
|
|
|
9069
|
+
##### `codeql`<sup>Optional</sup> <a name="codeql" id="projen-modules.JsiiProjectOptions.property.codeql"></a>
|
|
9070
|
+
|
|
9071
|
+
```typescript
|
|
9072
|
+
public readonly codeql: boolean;
|
|
9073
|
+
```
|
|
9074
|
+
|
|
9075
|
+
- *Type:* boolean
|
|
9076
|
+
- *Default:* true
|
|
9077
|
+
|
|
9078
|
+
Scan the code with CodeQL on pull requests, pushes to the default branch and weekly.
|
|
9079
|
+
|
|
9080
|
+
---
|
|
9081
|
+
|
|
9054
9082
|
##### `commitGenerated`<sup>Optional</sup> <a name="commitGenerated" id="projen-modules.JsiiProjectOptions.property.commitGenerated"></a>
|
|
9055
9083
|
|
|
9056
9084
|
```typescript
|
|
@@ -13439,6 +13467,7 @@ const pythonPackageOptions: PythonPackageOptions = { ... }
|
|
|
13439
13467
|
| <code><a href="#projen-modules.PythonPackageOptions.property.autoMergeOptions">autoMergeOptions</a></code> | <code>projen.github.AutoMergeOptions</code> | Configure options for automatic merging on GitHub. |
|
|
13440
13468
|
| <code><a href="#projen-modules.PythonPackageOptions.property.classifiers">classifiers</a></code> | <code>string[]</code> | A list of PyPI trove classifiers that describe the project. |
|
|
13441
13469
|
| <code><a href="#projen-modules.PythonPackageOptions.property.clobber">clobber</a></code> | <code>boolean</code> | Add a `clobber` task which resets the repo to origin. |
|
|
13470
|
+
| <code><a href="#projen-modules.PythonPackageOptions.property.codeql">codeql</a></code> | <code>boolean</code> | Scan the code with CodeQL on pull requests, pushes to the default branch and weekly. |
|
|
13442
13471
|
| <code><a href="#projen-modules.PythonPackageOptions.property.commitGenerated">commitGenerated</a></code> | <code>boolean</code> | Whether to commit the managed files by default. |
|
|
13443
13472
|
| <code><a href="#projen-modules.PythonPackageOptions.property.deps">deps</a></code> | <code>string[]</code> | List of runtime dependencies for this project. Dependencies use the format: `<module>@<semver>`. |
|
|
13444
13473
|
| <code><a href="#projen-modules.PythonPackageOptions.property.description">description</a></code> | <code>string</code> | A short description of the package. |
|
|
@@ -13640,6 +13669,19 @@ Add a `clobber` task which resets the repo to origin.
|
|
|
13640
13669
|
|
|
13641
13670
|
---
|
|
13642
13671
|
|
|
13672
|
+
##### `codeql`<sup>Optional</sup> <a name="codeql" id="projen-modules.PythonPackageOptions.property.codeql"></a>
|
|
13673
|
+
|
|
13674
|
+
```typescript
|
|
13675
|
+
public readonly codeql: boolean;
|
|
13676
|
+
```
|
|
13677
|
+
|
|
13678
|
+
- *Type:* boolean
|
|
13679
|
+
- *Default:* true
|
|
13680
|
+
|
|
13681
|
+
Scan the code with CodeQL on pull requests, pushes to the default branch and weekly.
|
|
13682
|
+
|
|
13683
|
+
---
|
|
13684
|
+
|
|
13643
13685
|
##### `commitGenerated`<sup>Optional</sup> <a name="commitGenerated" id="projen-modules.PythonPackageOptions.property.commitGenerated"></a>
|
|
13644
13686
|
|
|
13645
13687
|
```typescript
|
package/README.md
CHANGED
|
@@ -43,6 +43,10 @@ In **Settings → General → Pull Requests**:
|
|
|
43
43
|
* Untick **Allow auto-merge**, because GitHub's own auto-merge merges outside the queue.
|
|
44
44
|
* Tick **Automatically delete head branches**.
|
|
45
45
|
|
|
46
|
+
### Code scanning
|
|
47
|
+
|
|
48
|
+
CodeQL runs from `.github/workflows/codeql.yml`, which is managed by projen. In **Settings → Advanced Security**, leave CodeQL **Default setup** off, because it cannot run alongside this workflow. Under **Protection rules**, keep the **Check run failure threshold** at **High or higher** for security alerts and **Errors** for other alerts, as this decides whether the `CodeQL` check fails. Private repositories also need GitHub Code Security enabled there for code scanning results to be uploaded.
|
|
49
|
+
|
|
46
50
|
### Branch ruleset
|
|
47
51
|
|
|
48
52
|
In **Settings → Rules → Rulesets**, create a branch ruleset with enforcement **Active** that targets the default branch, and set:
|
|
@@ -51,6 +55,7 @@ In **Settings → Rules → Rulesets**, create a branch ruleset with enforcement
|
|
|
51
55
|
* **Restrict deletions** and **Block force pushes**.
|
|
52
56
|
* **Require a pull request before merging**, with 0 required approvals.
|
|
53
57
|
* **Require status checks to pass**, listing the checks that `.mergify.yml` waits for: `build`, `package-js`, `package-python`. Leave **Require branches to be up to date before merging** unticked, as the queue already updates and retests each pull request.
|
|
58
|
+
* **Require code scanning results**, with the tool **CodeQL**, security alerts set to **High or higher** and alerts set to **Errors**. Mergify is exempt from this rule, so `.mergify.yml` also waits for the `CodeQL` check instead.
|
|
54
59
|
|
|
55
60
|
Do not enable GitHub's own **Require merge queue** rule, as it competes with Mergify.
|
|
56
61
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Component, github } from 'projen';
|
|
2
|
+
export interface CodeQlOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Branches whose pushes, and the pull requests targeting them, are scanned
|
|
5
|
+
*
|
|
6
|
+
* @default ['main']
|
|
7
|
+
*/
|
|
8
|
+
readonly branches?: Array<string>;
|
|
9
|
+
/**
|
|
10
|
+
* CodeQL languages to analyse, all of which must not need a build
|
|
11
|
+
*
|
|
12
|
+
* @see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#changing-the-languages-that-are-analyzed
|
|
13
|
+
*/
|
|
14
|
+
readonly languages: Array<string>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* CodeQL code scanning, as a GitHub advanced setup workflow
|
|
18
|
+
*/
|
|
19
|
+
export declare class CodeQl extends Component {
|
|
20
|
+
/**
|
|
21
|
+
* Name of the check run that reports the code scanning results on pull requests
|
|
22
|
+
*/
|
|
23
|
+
static readonly CHECK_NAME = "CodeQL";
|
|
24
|
+
constructor(gitHub: github.GitHub, options: CodeQlOptions);
|
|
25
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodeQl = void 0;
|
|
4
|
+
const projen_1 = require("projen");
|
|
5
|
+
const workflows_model_1 = require("projen/lib/github/workflows-model");
|
|
6
|
+
/**
|
|
7
|
+
* CodeQL code scanning, as a GitHub advanced setup workflow
|
|
8
|
+
*/
|
|
9
|
+
class CodeQl extends projen_1.Component {
|
|
10
|
+
/**
|
|
11
|
+
* Name of the check run that reports the code scanning results on pull requests
|
|
12
|
+
*/
|
|
13
|
+
static CHECK_NAME = 'CodeQL';
|
|
14
|
+
constructor(gitHub, options) {
|
|
15
|
+
super(gitHub.project);
|
|
16
|
+
const branches = options.branches ?? ['main'];
|
|
17
|
+
const workflow = gitHub.addWorkflow('codeql');
|
|
18
|
+
workflow.on({
|
|
19
|
+
push: { branches },
|
|
20
|
+
pullRequest: { branches },
|
|
21
|
+
schedule: [{ cron: '44 12 * * 1' }],
|
|
22
|
+
});
|
|
23
|
+
workflow.addJobs({
|
|
24
|
+
analyze: {
|
|
25
|
+
name: 'Analyze (${{ matrix.language }})',
|
|
26
|
+
runsOn: ['ubuntu-latest'],
|
|
27
|
+
permissions: {
|
|
28
|
+
actions: workflows_model_1.JobPermission.READ,
|
|
29
|
+
contents: workflows_model_1.JobPermission.READ,
|
|
30
|
+
packages: workflows_model_1.JobPermission.READ,
|
|
31
|
+
securityEvents: workflows_model_1.JobPermission.WRITE,
|
|
32
|
+
},
|
|
33
|
+
strategy: {
|
|
34
|
+
failFast: false,
|
|
35
|
+
matrix: {
|
|
36
|
+
domain: {
|
|
37
|
+
language: options.languages,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
steps: [
|
|
42
|
+
projen_1.github.WorkflowSteps.checkout(),
|
|
43
|
+
{
|
|
44
|
+
name: 'Initialize CodeQL',
|
|
45
|
+
uses: 'github/codeql-action/init@v4',
|
|
46
|
+
with: {
|
|
47
|
+
'languages': '${{ matrix.language }}',
|
|
48
|
+
'build-mode': 'none',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'Perform CodeQL Analysis',
|
|
53
|
+
uses: 'github/codeql-action/analyze@v4',
|
|
54
|
+
with: {
|
|
55
|
+
category: '/language:${{ matrix.language }}',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.CodeQl = CodeQl;
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZ2l0aHViL2NvZGVxbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBMkM7QUFDM0MsdUVBQWtFO0FBaUJsRTs7R0FFRztBQUNILE1BQWEsTUFBTyxTQUFRLGtCQUFTO0lBQ25DOztPQUVHO0lBQ0gsTUFBTSxDQUFVLFVBQVUsR0FBRyxRQUFRLENBQUM7SUFFdEMsWUFBWSxNQUFxQixFQUFFLE9BQXNCO1FBQ3ZELEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNWLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRTtZQUNsQixXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUU7WUFDekIsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUM7U0FDcEMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNmLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsa0NBQWtDO2dCQUN4QyxNQUFNLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBQ3pCLFdBQVcsRUFBRTtvQkFDWCxPQUFPLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO29CQUMzQixRQUFRLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO29CQUM1QixRQUFRLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO29CQUM1QixjQUFjLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO2lCQUNwQztnQkFDRCxRQUFRLEVBQUU7b0JBQ1IsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRTs0QkFDTixRQUFRLEVBQUUsT0FBTyxDQUFDLFNBQVM7eUJBQzVCO3FCQUNGO2lCQUNGO2dCQUNELEtBQUssRUFBRTtvQkFDTCxlQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRTtvQkFDL0I7d0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjt3QkFDekIsSUFBSSxFQUFFLDhCQUE4Qjt3QkFDcEMsSUFBSSxFQUFFOzRCQUNKLFdBQVcsRUFBRSx3QkFBd0I7NEJBQ3JDLFlBQVksRUFBRSxNQUFNO3lCQUNyQjtxQkFDRjtvQkFDRDt3QkFDRSxJQUFJLEVBQUUseUJBQXlCO3dCQUMvQixJQUFJLEVBQUUsaUNBQWlDO3dCQUN2QyxJQUFJLEVBQUU7NEJBQ0osUUFBUSxFQUFFLGtDQUFrQzt5QkFDN0M7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBdERILHdCQXVEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZ2l0aHViIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24gfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVRbE9wdGlvbnMge1xuICAvKipcbiAgICogQnJhbmNoZXMgd2hvc2UgcHVzaGVzLCBhbmQgdGhlIHB1bGwgcmVxdWVzdHMgdGFyZ2V0aW5nIHRoZW0sIGFyZSBzY2FubmVkXG4gICAqXG4gICAqIEBkZWZhdWx0IFsnbWFpbiddXG4gICAqL1xuICByZWFkb25seSBicmFuY2hlcz86IEFycmF5PHN0cmluZz47XG4gIC8qKlxuICAgKiBDb2RlUUwgbGFuZ3VhZ2VzIHRvIGFuYWx5c2UsIGFsbCBvZiB3aGljaCBtdXN0IG5vdCBuZWVkIGEgYnVpbGRcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9jb2RlLXNlY3VyaXR5L2NvZGUtc2Nhbm5pbmcvY3JlYXRpbmctYW4tYWR2YW5jZWQtc2V0dXAtZm9yLWNvZGUtc2Nhbm5pbmcvY3VzdG9taXppbmcteW91ci1hZHZhbmNlZC1zZXR1cC1mb3ItY29kZS1zY2FubmluZyNjaGFuZ2luZy10aGUtbGFuZ3VhZ2VzLXRoYXQtYXJlLWFuYWx5emVkXG4gICAqL1xuICByZWFkb25seSBsYW5ndWFnZXM6IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQ29kZVFMIGNvZGUgc2Nhbm5pbmcsIGFzIGEgR2l0SHViIGFkdmFuY2VkIHNldHVwIHdvcmtmbG93XG4gKi9cbmV4cG9ydCBjbGFzcyBDb2RlUWwgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgY2hlY2sgcnVuIHRoYXQgcmVwb3J0cyB0aGUgY29kZSBzY2FubmluZyByZXN1bHRzIG9uIHB1bGwgcmVxdWVzdHNcbiAgICovXG4gIHN0YXRpYyByZWFkb25seSBDSEVDS19OQU1FID0gJ0NvZGVRTCc7XG5cbiAgY29uc3RydWN0b3IoZ2l0SHViOiBnaXRodWIuR2l0SHViLCBvcHRpb25zOiBDb2RlUWxPcHRpb25zKSB7XG4gICAgc3VwZXIoZ2l0SHViLnByb2plY3QpO1xuXG4gICAgY29uc3QgYnJhbmNoZXMgPSBvcHRpb25zLmJyYW5jaGVzID8/IFsnbWFpbiddO1xuICAgIGNvbnN0IHdvcmtmbG93ID0gZ2l0SHViLmFkZFdvcmtmbG93KCdjb2RlcWwnKTtcbiAgICB3b3JrZmxvdy5vbih7XG4gICAgICBwdXNoOiB7IGJyYW5jaGVzIH0sXG4gICAgICBwdWxsUmVxdWVzdDogeyBicmFuY2hlcyB9LFxuICAgICAgc2NoZWR1bGU6IFt7IGNyb246ICc0NCAxMiAqICogMScgfV0sXG4gICAgfSk7XG4gICAgd29ya2Zsb3cuYWRkSm9icyh7XG4gICAgICBhbmFseXplOiB7XG4gICAgICAgIG5hbWU6ICdBbmFseXplICgke3sgbWF0cml4Lmxhbmd1YWdlIH19KScsXG4gICAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgICAgYWN0aW9uczogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgICAgcGFja2FnZXM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgICBzZWN1cml0eUV2ZW50czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RyYXRlZ3k6IHtcbiAgICAgICAgICBmYWlsRmFzdDogZmFsc2UsXG4gICAgICAgICAgbWF0cml4OiB7XG4gICAgICAgICAgICBkb21haW46IHtcbiAgICAgICAgICAgICAgbGFuZ3VhZ2U6IG9wdGlvbnMubGFuZ3VhZ2VzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzdGVwczogW1xuICAgICAgICAgIGdpdGh1Yi5Xb3JrZmxvd1N0ZXBzLmNoZWNrb3V0KCksXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ0luaXRpYWxpemUgQ29kZVFMJyxcbiAgICAgICAgICAgIHVzZXM6ICdnaXRodWIvY29kZXFsLWFjdGlvbi9pbml0QHY0JyxcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgJ2xhbmd1YWdlcyc6ICcke3sgbWF0cml4Lmxhbmd1YWdlIH19JyxcbiAgICAgICAgICAgICAgJ2J1aWxkLW1vZGUnOiAnbm9uZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ1BlcmZvcm0gQ29kZVFMIEFuYWx5c2lzJyxcbiAgICAgICAgICAgIHVzZXM6ICdnaXRodWIvY29kZXFsLWFjdGlvbi9hbmFseXplQHY0JyxcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6ICcvbGFuZ3VhZ2U6JHt7IG1hdHJpeC5sYW5ndWFnZSB9fScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.configureMergify = configureMergify;
|
|
4
|
-
|
|
4
|
+
const codeql_1 = require("./codeql");
|
|
5
|
+
function githubConfigurationSection(requiredChecks, approvedReviews, codeScanning) {
|
|
5
6
|
const statusChecks = requiredChecks.length
|
|
6
7
|
? 'the checks that `.mergify.yml` waits for: `' +
|
|
7
8
|
requiredChecks.join('`, `') +
|
|
@@ -16,6 +17,17 @@ function githubConfigurationSection(requiredChecks, approvedReviews) {
|
|
|
16
17
|
|
|
17
18
|
A repository with a single maintainer, who cannot approve their own pull requests, should set \`autoMergeOptions: { approvedReviews: 0 }\` in \`.projenrc.ts\` and set the ruleset's required approvals to 0. Pull requests are then merged as soon as their checks pass.`
|
|
18
19
|
: '';
|
|
20
|
+
const codeScanningSettings = codeScanning
|
|
21
|
+
? `
|
|
22
|
+
|
|
23
|
+
### Code scanning
|
|
24
|
+
|
|
25
|
+
CodeQL runs from \`.github/workflows/codeql.yml\`, which is managed by projen. In **Settings → Advanced Security**, leave CodeQL **Default setup** off, because it cannot run alongside this workflow. Under **Protection rules**, keep the **Check run failure threshold** at **High or higher** for security alerts and **Errors** for other alerts, as this decides whether the \`${codeql_1.CodeQl.CHECK_NAME}\` check fails. Private repositories also need GitHub Code Security enabled there for code scanning results to be uploaded.`
|
|
26
|
+
: '';
|
|
27
|
+
const codeScanningRule = codeScanning
|
|
28
|
+
? `
|
|
29
|
+
* **Require code scanning results**, with the tool **CodeQL**, security alerts set to **High or higher** and alerts set to **Errors**. Mergify is exempt from this rule, so \`.mergify.yml\` also waits for the \`${codeql_1.CodeQl.CHECK_NAME}\` check instead.`
|
|
30
|
+
: '';
|
|
19
31
|
return `All pull requests are merged by the [Mergify](https://mergify.com) merge queue, configured in \`.mergify.yml\`. ${queued}, Mergify queues it, brings it up to date with the default branch, waits for the checks again and squash merges it. Draft pull requests and those labelled \`do-not-merge\` are not merged.
|
|
20
32
|
|
|
21
33
|
The repository must be configured as below so that nothing can be merged without going through the queue.
|
|
@@ -29,7 +41,7 @@ Install the [Mergify GitHub App](https://github.com/apps/mergify) and give it ac
|
|
|
29
41
|
In **Settings → General → Pull Requests**:
|
|
30
42
|
* Allow squash merging only (untick merge commits and rebase merging), matching the queue's merge method.
|
|
31
43
|
* Untick **Allow auto-merge**, because GitHub's own auto-merge merges outside the queue.
|
|
32
|
-
* Tick **Automatically delete head branches
|
|
44
|
+
* Tick **Automatically delete head branches**.${codeScanningSettings}
|
|
33
45
|
|
|
34
46
|
### Branch ruleset
|
|
35
47
|
|
|
@@ -38,7 +50,7 @@ In **Settings → Rules → Rulesets**, create a branch ruleset with enforcement
|
|
|
38
50
|
* **Restrict updates**: only bypass actors can update the branch, so pull requests cannot be merged from the GitHub UI or CLI and commits cannot be pushed directly.
|
|
39
51
|
* **Restrict deletions** and **Block force pushes**.
|
|
40
52
|
* **Require a pull request before merging**, with ${approvals}.
|
|
41
|
-
* **Require status checks to pass**, listing ${statusChecks}. Leave **Require branches to be up to date before merging** unticked, as the queue already updates and retests each pull request
|
|
53
|
+
* **Require status checks to pass**, listing ${statusChecks}. Leave **Require branches to be up to date before merging** unticked, as the queue already updates and retests each pull request.${codeScanningRule}
|
|
42
54
|
|
|
43
55
|
Do not enable GitHub's own **Require merge queue** rule, as it competes with Mergify.
|
|
44
56
|
|
|
@@ -51,6 +63,11 @@ function configureMergify(project, options = {}) {
|
|
|
51
63
|
}
|
|
52
64
|
const buildJobIds = project.buildWorkflow?.buildJobIds ?? [];
|
|
53
65
|
project.autoMerge?.addConditions('-draft');
|
|
66
|
+
// Mergify is exempt from the ruleset's code scanning rule, so the queue enforces it instead
|
|
67
|
+
const codeScanning = project.components.some((c) => c instanceof codeql_1.CodeQl);
|
|
68
|
+
if (codeScanning) {
|
|
69
|
+
project.autoMerge?.addConditions(`status-success=${codeql_1.CodeQl.CHECK_NAME}`);
|
|
70
|
+
}
|
|
54
71
|
mergify.addRule({
|
|
55
72
|
name: 'Automatic approval for projen upgrade pull requests',
|
|
56
73
|
conditions: [
|
|
@@ -74,6 +91,6 @@ function configureMergify(project, options = {}) {
|
|
|
74
91
|
},
|
|
75
92
|
});
|
|
76
93
|
project.tryFindObjectFile('.mergify.yml')?.addOverride('merge_protections_settings.reporting_method', options.reportingMethod ?? 'deployments');
|
|
77
|
-
project.readme?.addSection('GitHub Configuration', githubConfigurationSection(buildJobIds, options.approvedReviews ?? 1));
|
|
94
|
+
project.readme?.addSection('GitHub Configuration', githubConfigurationSection(buildJobIds, options.approvedReviews ?? 1, codeScanning));
|
|
78
95
|
}
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2lmeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2dpdGh1Yi9tZXJnaWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBOEVBLDRDQThDQztBQTdGRCxTQUFTLDBCQUEwQixDQUNqQyxjQUE2QixFQUM3QixlQUF1QjtJQUV2QixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsTUFBTTtRQUN4QyxDQUFDLENBQUMsNkNBQTZDO1lBQzdDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzNCLEdBQUc7UUFDTCxDQUFDLENBQUMsd0dBQXdHLENBQUM7SUFDN0csTUFBTSxTQUFTLEdBQUcsZUFBZSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxxQkFBcUIsQ0FBQztJQUMxRyxNQUFNLE1BQU0sR0FBRyxlQUFlO1FBQzVCLENBQUMsQ0FBQyxxREFBcUQ7UUFDdkQsQ0FBQyxDQUFDLG9DQUFvQyxDQUFDO0lBQ3pDLE1BQU0sY0FBYyxHQUFHLGVBQWU7UUFDcEMsQ0FBQyxDQUFDOzswUUFFb1E7UUFDdFEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLE9BQU8sbUhBQW1ILE1BQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvREFxQjlFLFNBQVM7K0NBQ2QsWUFBWTs7Ozt3SUFJNkUsY0FBYyxFQUFFLENBQUM7QUFDekosQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUM5QixPQUF1QixFQUN2QixVQUEwQixFQUFFO0lBRTVCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO0lBQ3hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO0lBRTdELE9BQU8sQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTNDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDZCxJQUFJLEVBQUUscURBQXFEO1FBQzNELFVBQVUsRUFBRTtZQUNWLFVBQVUsT0FBTyxDQUFDLGFBQWEsSUFBSSxtQkFBbUIsRUFBRTtZQUN4RCxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztTQUNuRDtRQUNELE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsU0FBUztnQkFDZixPQUFPLEVBQUUsd0NBQXdDO2FBQ2xEO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFFSCxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ2QsSUFBSSxFQUFFLDRCQUE0QjtRQUNsQyxVQUFVLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztRQUNsQyxPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUU7Z0JBQ04sU0FBUyxFQUFFLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxjQUFjLENBQUM7YUFDbkQ7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsRUFBRSxXQUFXLENBQ3BELDZDQUE2QyxFQUM3QyxPQUFPLENBQUMsZUFBZSxJQUFJLGFBQWEsQ0FDekMsQ0FBQztJQUVGLE9BQU8sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUN4QixzQkFBc0IsRUFDdEIsMEJBQTBCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLENBQ3RFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2l0aHViLCBQcm9qZWN0IH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IFJlYWRtZSB9IGZyb20gJy4uL3JlYWRtZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVyZ2lmeU9wdGlvbnMge1xuICAvKipcbiAgICogTnVtYmVyIG9mIGFwcHJvdmluZyByZXZpZXdzIHRoZSBtZXJnZSBxdWV1ZSB3YWl0cyBmb3IsIHdoaWNoIHNob3VsZCBtYXRjaFxuICAgKiBgYXV0b01lcmdlT3B0aW9ucy5hcHByb3ZlZFJldmlld3NgLiBVc2UgMCBmb3IgYSByZXBvc2l0b3J5IHdpdGggYSBzaW5nbGVcbiAgICogbWFpbnRhaW5lciwgd2hvIGNhbm5vdCBhcHByb3ZlIHRoZWlyIG93biBwdWxsIHJlcXVlc3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSBhcHByb3ZlZFJldmlld3M/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGFzc2lnblVzZXJzPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVhZG9ubHkgcmVwb3J0aW5nTWV0aG9kPzogc3RyaW5nO1xuICAvKipcbiAgICogQXV0aG9yIG9mIHRoZSBwcm9qZW4gdXBncmFkZSBwdWxsIHJlcXVlc3RzIHRoYXQgYXJlIGF1dG9tYXRpY2FsbHkgYXBwcm92ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgJ2VuZG9yLXByb2plbltib3RdJ1xuICAgKi9cbiAgcmVhZG9ubHkgdXBncmFkZUF1dGhvcj86IHN0cmluZztcbn1cblxudHlwZSBNZXJnaWZ5UHJvamVjdCA9IFByb2plY3QgJiB7XG4gIHJlYWRvbmx5IGF1dG9NZXJnZT86IGdpdGh1Yi5BdXRvTWVyZ2U7XG4gIHJlYWRvbmx5IGdpdGh1Yj86IGdpdGh1Yi5HaXRIdWI7XG4gIHJlYWRvbmx5IGJ1aWxkV29ya2Zsb3c/OiB7XG4gICAgcmVhZG9ubHkgYnVpbGRKb2JJZHM/OiBBcnJheTxzdHJpbmc+O1xuICB9O1xuICByZWFkb25seSByZWFkbWU/OiBSZWFkbWU7XG59O1xuXG5mdW5jdGlvbiBnaXRodWJDb25maWd1cmF0aW9uU2VjdGlvbihcbiAgcmVxdWlyZWRDaGVja3M6IEFycmF5PHN0cmluZz4sXG4gIGFwcHJvdmVkUmV2aWV3czogbnVtYmVyLFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdHVzQ2hlY2tzID0gcmVxdWlyZWRDaGVja3MubGVuZ3RoXG4gICAgPyAndGhlIGNoZWNrcyB0aGF0IGAubWVyZ2lmeS55bWxgIHdhaXRzIGZvcjogYCcgK1xuICAgICAgcmVxdWlyZWRDaGVja3Muam9pbignYCwgYCcpICtcbiAgICAgICdgJ1xuICAgIDogJ2FueSBDSSBjaGVja3MgYWRkZWQgdG8gdGhlIHByb2plY3QgKG5vbmUgYXJlIGNvbmZpZ3VyZWQgeWV0KSwga2VlcGluZyB0aGVtIGluIHN5bmMgd2l0aCBgLm1lcmdpZnkueW1sYCc7XG4gIGNvbnN0IGFwcHJvdmFscyA9IGFwcHJvdmVkUmV2aWV3cyA9PT0gMSA/ICcxIHJlcXVpcmVkIGFwcHJvdmFsJyA6IGAke2FwcHJvdmVkUmV2aWV3c30gcmVxdWlyZWQgYXBwcm92YWxzYDtcbiAgY29uc3QgcXVldWVkID0gYXBwcm92ZWRSZXZpZXdzXG4gICAgPyAnT25jZSBhIHB1bGwgcmVxdWVzdCBpcyBhcHByb3ZlZCBhbmQgaXRzIGNoZWNrcyBwYXNzJ1xuICAgIDogJ09uY2UgYSBwdWxsIHJlcXVlc3RcXCdzIGNoZWNrcyBwYXNzJztcbiAgY29uc3Qgc29sZU1haW50YWluZXIgPSBhcHByb3ZlZFJldmlld3NcbiAgICA/IGBcblxuQSByZXBvc2l0b3J5IHdpdGggYSBzaW5nbGUgbWFpbnRhaW5lciwgd2hvIGNhbm5vdCBhcHByb3ZlIHRoZWlyIG93biBwdWxsIHJlcXVlc3RzLCBzaG91bGQgc2V0IFxcYGF1dG9NZXJnZU9wdGlvbnM6IHsgYXBwcm92ZWRSZXZpZXdzOiAwIH1cXGAgaW4gXFxgLnByb2plbnJjLnRzXFxgIGFuZCBzZXQgdGhlIHJ1bGVzZXQncyByZXF1aXJlZCBhcHByb3ZhbHMgdG8gMC4gUHVsbCByZXF1ZXN0cyBhcmUgdGhlbiBtZXJnZWQgYXMgc29vbiBhcyB0aGVpciBjaGVja3MgcGFzcy5gXG4gICAgOiAnJztcbiAgcmV0dXJuIGBBbGwgcHVsbCByZXF1ZXN0cyBhcmUgbWVyZ2VkIGJ5IHRoZSBbTWVyZ2lmeV0oaHR0cHM6Ly9tZXJnaWZ5LmNvbSkgbWVyZ2UgcXVldWUsIGNvbmZpZ3VyZWQgaW4gXFxgLm1lcmdpZnkueW1sXFxgLiAke3F1ZXVlZH0sIE1lcmdpZnkgcXVldWVzIGl0LCBicmluZ3MgaXQgdXAgdG8gZGF0ZSB3aXRoIHRoZSBkZWZhdWx0IGJyYW5jaCwgd2FpdHMgZm9yIHRoZSBjaGVja3MgYWdhaW4gYW5kIHNxdWFzaCBtZXJnZXMgaXQuIERyYWZ0IHB1bGwgcmVxdWVzdHMgYW5kIHRob3NlIGxhYmVsbGVkIFxcYGRvLW5vdC1tZXJnZVxcYCBhcmUgbm90IG1lcmdlZC5cblxuVGhlIHJlcG9zaXRvcnkgbXVzdCBiZSBjb25maWd1cmVkIGFzIGJlbG93IHNvIHRoYXQgbm90aGluZyBjYW4gYmUgbWVyZ2VkIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgcXVldWUuXG5cbiMjIyBNZXJnaWZ5XG5cbkluc3RhbGwgdGhlIFtNZXJnaWZ5IEdpdEh1YiBBcHBdKGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBzL21lcmdpZnkpIGFuZCBnaXZlIGl0IGFjY2VzcyB0byB0aGlzIHJlcG9zaXRvcnkuXG5cbiMjIyBQdWxsIHJlcXVlc3Qgc2V0dGluZ3NcblxuSW4gKipTZXR0aW5ncyDihpIgR2VuZXJhbCDihpIgUHVsbCBSZXF1ZXN0cyoqOlxuKiBBbGxvdyBzcXVhc2ggbWVyZ2luZyBvbmx5ICh1bnRpY2sgbWVyZ2UgY29tbWl0cyBhbmQgcmViYXNlIG1lcmdpbmcpLCBtYXRjaGluZyB0aGUgcXVldWUncyBtZXJnZSBtZXRob2QuXG4qIFVudGljayAqKkFsbG93IGF1dG8tbWVyZ2UqKiwgYmVjYXVzZSBHaXRIdWIncyBvd24gYXV0by1tZXJnZSBtZXJnZXMgb3V0c2lkZSB0aGUgcXVldWUuXG4qIFRpY2sgKipBdXRvbWF0aWNhbGx5IGRlbGV0ZSBoZWFkIGJyYW5jaGVzKiouXG5cbiMjIyBCcmFuY2ggcnVsZXNldFxuXG5JbiAqKlNldHRpbmdzIOKGkiBSdWxlcyDihpIgUnVsZXNldHMqKiwgY3JlYXRlIGEgYnJhbmNoIHJ1bGVzZXQgd2l0aCBlbmZvcmNlbWVudCAqKkFjdGl2ZSoqIHRoYXQgdGFyZ2V0cyB0aGUgZGVmYXVsdCBicmFuY2gsIGFuZCBzZXQ6XG4qICoqQnlwYXNzIGxpc3QqKjogdGhlICoqTWVyZ2lmeSoqIGFwcCBvbmx5LCBpbiAqKkV4ZW1wdCoqIG1vZGUuIERvIG5vdCBhZGQgYWRtaW5zIG9yIG90aGVyIHJvbGVzLCBhcyBhbnlvbmUgb24gdGhpcyBsaXN0IGNhbiBtZXJnZSB3aXRob3V0IHRoZSBxdWV1ZS5cbiogKipSZXN0cmljdCB1cGRhdGVzKio6IG9ubHkgYnlwYXNzIGFjdG9ycyBjYW4gdXBkYXRlIHRoZSBicmFuY2gsIHNvIHB1bGwgcmVxdWVzdHMgY2Fubm90IGJlIG1lcmdlZCBmcm9tIHRoZSBHaXRIdWIgVUkgb3IgQ0xJIGFuZCBjb21taXRzIGNhbm5vdCBiZSBwdXNoZWQgZGlyZWN0bHkuXG4qICoqUmVzdHJpY3QgZGVsZXRpb25zKiogYW5kICoqQmxvY2sgZm9yY2UgcHVzaGVzKiouXG4qICoqUmVxdWlyZSBhIHB1bGwgcmVxdWVzdCBiZWZvcmUgbWVyZ2luZyoqLCB3aXRoICR7YXBwcm92YWxzfS5cbiogKipSZXF1aXJlIHN0YXR1cyBjaGVja3MgdG8gcGFzcyoqLCBsaXN0aW5nICR7c3RhdHVzQ2hlY2tzfS4gTGVhdmUgKipSZXF1aXJlIGJyYW5jaGVzIHRvIGJlIHVwIHRvIGRhdGUgYmVmb3JlIG1lcmdpbmcqKiB1bnRpY2tlZCwgYXMgdGhlIHF1ZXVlIGFscmVhZHkgdXBkYXRlcyBhbmQgcmV0ZXN0cyBlYWNoIHB1bGwgcmVxdWVzdC5cblxuRG8gbm90IGVuYWJsZSBHaXRIdWIncyBvd24gKipSZXF1aXJlIG1lcmdlIHF1ZXVlKiogcnVsZSwgYXMgaXQgY29tcGV0ZXMgd2l0aCBNZXJnaWZ5LlxuXG5JZiB0aGUgcXVldWUgaXMgdW5hdmFpbGFibGUgYW5kIGEgY2hhbmdlIGhhcyB0byBiZSBtZXJnZWQsIGFkZCB5b3Vyc2VsZiB0byB0aGUgYnlwYXNzIGxpc3QgdGVtcG9yYXJpbHkgYW5kIHJlbW92ZSB5b3Vyc2VsZiBhZnRlcndhcmRzLiR7c29sZU1haW50YWluZXJ9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZU1lcmdpZnkoXG4gIHByb2plY3Q6IE1lcmdpZnlQcm9qZWN0LFxuICBvcHRpb25zOiBNZXJnaWZ5T3B0aW9ucyA9IHt9LFxuKSB7XG4gIGNvbnN0IG1lcmdpZnkgPSBwcm9qZWN0LmdpdGh1Yj8ubWVyZ2lmeTtcbiAgaWYgKCFtZXJnaWZ5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYnVpbGRKb2JJZHMgPSBwcm9qZWN0LmJ1aWxkV29ya2Zsb3c/LmJ1aWxkSm9iSWRzID8/IFtdO1xuXG4gIHByb2plY3QuYXV0b01lcmdlPy5hZGRDb25kaXRpb25zKCctZHJhZnQnKTtcblxuICBtZXJnaWZ5LmFkZFJ1bGUoe1xuICAgIG5hbWU6ICdBdXRvbWF0aWMgYXBwcm92YWwgZm9yIHByb2plbiB1cGdyYWRlIHB1bGwgcmVxdWVzdHMnLFxuICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgIGBhdXRob3I9JHtvcHRpb25zLnVwZ3JhZGVBdXRob3IgPz8gJ2VuZG9yLXByb2plbltib3RdJ31gLFxuICAgICAgLi4uYnVpbGRKb2JJZHMubWFwKChpZCkgPT4gYHN0YXR1cy1zdWNjZXNzPSR7aWR9YCksXG4gICAgXSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICByZXZpZXc6IHtcbiAgICAgICAgdHlwZTogJ0FQUFJPVkUnLFxuICAgICAgICBtZXNzYWdlOiAnQXV0b21hdGljYWxseSBhcHByb3ZpbmcgcHJvamVuIHVwZ3JhZGUnLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICBtZXJnaWZ5LmFkZFJ1bGUoe1xuICAgIG5hbWU6ICdBc3NpZ24gUFIgd2hlbiBjaGVjayBmYWlscycsXG4gICAgY29uZGl0aW9uczogWycjY2hlY2stZmFpbHVyZSA+IDAnXSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBhc3NpZ246IHtcbiAgICAgICAgYWRkX3VzZXJzOiBvcHRpb25zLmFzc2lnblVzZXJzID8/IFsnZGF2ZXNoZXBoZXJkJ10sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIHByb2plY3QudHJ5RmluZE9iamVjdEZpbGUoJy5tZXJnaWZ5LnltbCcpPy5hZGRPdmVycmlkZShcbiAgICAnbWVyZ2VfcHJvdGVjdGlvbnNfc2V0dGluZ3MucmVwb3J0aW5nX21ldGhvZCcsXG4gICAgb3B0aW9ucy5yZXBvcnRpbmdNZXRob2QgPz8gJ2RlcGxveW1lbnRzJyxcbiAgKTtcblxuICBwcm9qZWN0LnJlYWRtZT8uYWRkU2VjdGlvbihcbiAgICAnR2l0SHViIENvbmZpZ3VyYXRpb24nLFxuICAgIGdpdGh1YkNvbmZpZ3VyYXRpb25TZWN0aW9uKGJ1aWxkSm9iSWRzLCBvcHRpb25zLmFwcHJvdmVkUmV2aWV3cyA/PyAxKSxcbiAgKTtcbn1cbiJdfQ==
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2lmeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2dpdGh1Yi9tZXJnaWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMkZBLDRDQXdEQztBQWxKRCxxQ0FBa0M7QUErQmxDLFNBQVMsMEJBQTBCLENBQ2pDLGNBQTZCLEVBQzdCLGVBQXVCLEVBQ3ZCLFlBQXFCO0lBRXJCLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxNQUFNO1FBQ3hDLENBQUMsQ0FBQyw2Q0FBNkM7WUFDN0MsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDM0IsR0FBRztRQUNMLENBQUMsQ0FBQyx3R0FBd0csQ0FBQztJQUM3RyxNQUFNLFNBQVMsR0FBRyxlQUFlLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLHFCQUFxQixDQUFDO0lBQzFHLE1BQU0sTUFBTSxHQUFHLGVBQWU7UUFDNUIsQ0FBQyxDQUFDLHFEQUFxRDtRQUN2RCxDQUFDLENBQUMsb0NBQW9DLENBQUM7SUFDekMsTUFBTSxjQUFjLEdBQUcsZUFBZTtRQUNwQyxDQUFDLENBQUM7OzBRQUVvUTtRQUN0USxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1AsTUFBTSxvQkFBb0IsR0FBRyxZQUFZO1FBQ3ZDLENBQUMsQ0FBQzs7Ozt1WEFJaVgsZUFBTSxDQUFDLFVBQVUsNkhBQTZIO1FBQ2pnQixDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1AsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZO1FBQ25DLENBQUMsQ0FBQztvTkFDOE0sZUFBTSxDQUFDLFVBQVUsbUJBQW1CO1FBQ3BQLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDUCxPQUFPLG1IQUFtSCxNQUFNOzs7Ozs7Ozs7Ozs7O2dEQWFsRixvQkFBb0I7Ozs7Ozs7O29EQVFoQixTQUFTOytDQUNkLFlBQVkscUlBQXFJLGdCQUFnQjs7Ozt3SUFJeEUsY0FBYyxFQUFFLENBQUM7QUFDekosQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUM5QixPQUF1QixFQUN2QixVQUEwQixFQUFFO0lBRTVCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO0lBQ3hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO0lBRTdELE9BQU8sQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTNDLDRGQUE0RjtJQUM1RixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLGVBQU0sQ0FBQyxDQUFDO0lBQ3pFLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsa0JBQWtCLGVBQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ2QsSUFBSSxFQUFFLHFEQUFxRDtRQUMzRCxVQUFVLEVBQUU7WUFDVixVQUFVLE9BQU8sQ0FBQyxhQUFhLElBQUksbUJBQW1CLEVBQUU7WUFDeEQsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7U0FDbkQ7UUFDRCxPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsT0FBTyxFQUFFLHdDQUF3QzthQUNsRDtTQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNkLElBQUksRUFBRSw0QkFBNEI7UUFDbEMsVUFBVSxFQUFFLENBQUMsb0JBQW9CLENBQUM7UUFDbEMsT0FBTyxFQUFFO1lBQ1AsTUFBTSxFQUFFO2dCQUNOLFNBQVMsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDO2FBQ25EO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFFSCxPQUFPLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEVBQUUsV0FBVyxDQUNwRCw2Q0FBNkMsRUFDN0MsT0FBTyxDQUFDLGVBQWUsSUFBSSxhQUFhLENBQ3pDLENBQUM7SUFFRixPQUFPLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FDeEIsc0JBQXNCLEVBQ3RCLDBCQUEwQixDQUN4QixXQUFXLEVBQ1gsT0FBTyxDQUFDLGVBQWUsSUFBSSxDQUFDLEVBQzVCLFlBQVksQ0FDYixDQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2l0aHViLCBQcm9qZWN0IH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IENvZGVRbCB9IGZyb20gJy4vY29kZXFsJztcbmltcG9ydCB7IFJlYWRtZSB9IGZyb20gJy4uL3JlYWRtZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVyZ2lmeU9wdGlvbnMge1xuICAvKipcbiAgICogTnVtYmVyIG9mIGFwcHJvdmluZyByZXZpZXdzIHRoZSBtZXJnZSBxdWV1ZSB3YWl0cyBmb3IsIHdoaWNoIHNob3VsZCBtYXRjaFxuICAgKiBgYXV0b01lcmdlT3B0aW9ucy5hcHByb3ZlZFJldmlld3NgLiBVc2UgMCBmb3IgYSByZXBvc2l0b3J5IHdpdGggYSBzaW5nbGVcbiAgICogbWFpbnRhaW5lciwgd2hvIGNhbm5vdCBhcHByb3ZlIHRoZWlyIG93biBwdWxsIHJlcXVlc3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSBhcHByb3ZlZFJldmlld3M/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGFzc2lnblVzZXJzPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVhZG9ubHkgcmVwb3J0aW5nTWV0aG9kPzogc3RyaW5nO1xuICAvKipcbiAgICogQXV0aG9yIG9mIHRoZSBwcm9qZW4gdXBncmFkZSBwdWxsIHJlcXVlc3RzIHRoYXQgYXJlIGF1dG9tYXRpY2FsbHkgYXBwcm92ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgJ2VuZG9yLXByb2plbltib3RdJ1xuICAgKi9cbiAgcmVhZG9ubHkgdXBncmFkZUF1dGhvcj86IHN0cmluZztcbn1cblxudHlwZSBNZXJnaWZ5UHJvamVjdCA9IFByb2plY3QgJiB7XG4gIHJlYWRvbmx5IGF1dG9NZXJnZT86IGdpdGh1Yi5BdXRvTWVyZ2U7XG4gIHJlYWRvbmx5IGdpdGh1Yj86IGdpdGh1Yi5HaXRIdWI7XG4gIHJlYWRvbmx5IGJ1aWxkV29ya2Zsb3c/OiB7XG4gICAgcmVhZG9ubHkgYnVpbGRKb2JJZHM/OiBBcnJheTxzdHJpbmc+O1xuICB9O1xuICByZWFkb25seSByZWFkbWU/OiBSZWFkbWU7XG59O1xuXG5mdW5jdGlvbiBnaXRodWJDb25maWd1cmF0aW9uU2VjdGlvbihcbiAgcmVxdWlyZWRDaGVja3M6IEFycmF5PHN0cmluZz4sXG4gIGFwcHJvdmVkUmV2aWV3czogbnVtYmVyLFxuICBjb2RlU2Nhbm5pbmc6IGJvb2xlYW4sXG4pOiBzdHJpbmcge1xuICBjb25zdCBzdGF0dXNDaGVja3MgPSByZXF1aXJlZENoZWNrcy5sZW5ndGhcbiAgICA/ICd0aGUgY2hlY2tzIHRoYXQgYC5tZXJnaWZ5LnltbGAgd2FpdHMgZm9yOiBgJyArXG4gICAgICByZXF1aXJlZENoZWNrcy5qb2luKCdgLCBgJykgK1xuICAgICAgJ2AnXG4gICAgOiAnYW55IENJIGNoZWNrcyBhZGRlZCB0byB0aGUgcHJvamVjdCAobm9uZSBhcmUgY29uZmlndXJlZCB5ZXQpLCBrZWVwaW5nIHRoZW0gaW4gc3luYyB3aXRoIGAubWVyZ2lmeS55bWxgJztcbiAgY29uc3QgYXBwcm92YWxzID0gYXBwcm92ZWRSZXZpZXdzID09PSAxID8gJzEgcmVxdWlyZWQgYXBwcm92YWwnIDogYCR7YXBwcm92ZWRSZXZpZXdzfSByZXF1aXJlZCBhcHByb3ZhbHNgO1xuICBjb25zdCBxdWV1ZWQgPSBhcHByb3ZlZFJldmlld3NcbiAgICA/ICdPbmNlIGEgcHVsbCByZXF1ZXN0IGlzIGFwcHJvdmVkIGFuZCBpdHMgY2hlY2tzIHBhc3MnXG4gICAgOiAnT25jZSBhIHB1bGwgcmVxdWVzdFxcJ3MgY2hlY2tzIHBhc3MnO1xuICBjb25zdCBzb2xlTWFpbnRhaW5lciA9IGFwcHJvdmVkUmV2aWV3c1xuICAgID8gYFxuXG5BIHJlcG9zaXRvcnkgd2l0aCBhIHNpbmdsZSBtYWludGFpbmVyLCB3aG8gY2Fubm90IGFwcHJvdmUgdGhlaXIgb3duIHB1bGwgcmVxdWVzdHMsIHNob3VsZCBzZXQgXFxgYXV0b01lcmdlT3B0aW9uczogeyBhcHByb3ZlZFJldmlld3M6IDAgfVxcYCBpbiBcXGAucHJvamVucmMudHNcXGAgYW5kIHNldCB0aGUgcnVsZXNldCdzIHJlcXVpcmVkIGFwcHJvdmFscyB0byAwLiBQdWxsIHJlcXVlc3RzIGFyZSB0aGVuIG1lcmdlZCBhcyBzb29uIGFzIHRoZWlyIGNoZWNrcyBwYXNzLmBcbiAgICA6ICcnO1xuICBjb25zdCBjb2RlU2Nhbm5pbmdTZXR0aW5ncyA9IGNvZGVTY2FubmluZ1xuICAgID8gYFxuXG4jIyMgQ29kZSBzY2FubmluZ1xuXG5Db2RlUUwgcnVucyBmcm9tIFxcYC5naXRodWIvd29ya2Zsb3dzL2NvZGVxbC55bWxcXGAsIHdoaWNoIGlzIG1hbmFnZWQgYnkgcHJvamVuLiBJbiAqKlNldHRpbmdzIOKGkiBBZHZhbmNlZCBTZWN1cml0eSoqLCBsZWF2ZSBDb2RlUUwgKipEZWZhdWx0IHNldHVwKiogb2ZmLCBiZWNhdXNlIGl0IGNhbm5vdCBydW4gYWxvbmdzaWRlIHRoaXMgd29ya2Zsb3cuIFVuZGVyICoqUHJvdGVjdGlvbiBydWxlcyoqLCBrZWVwIHRoZSAqKkNoZWNrIHJ1biBmYWlsdXJlIHRocmVzaG9sZCoqIGF0ICoqSGlnaCBvciBoaWdoZXIqKiBmb3Igc2VjdXJpdHkgYWxlcnRzIGFuZCAqKkVycm9ycyoqIGZvciBvdGhlciBhbGVydHMsIGFzIHRoaXMgZGVjaWRlcyB3aGV0aGVyIHRoZSBcXGAke0NvZGVRbC5DSEVDS19OQU1FfVxcYCBjaGVjayBmYWlscy4gUHJpdmF0ZSByZXBvc2l0b3JpZXMgYWxzbyBuZWVkIEdpdEh1YiBDb2RlIFNlY3VyaXR5IGVuYWJsZWQgdGhlcmUgZm9yIGNvZGUgc2Nhbm5pbmcgcmVzdWx0cyB0byBiZSB1cGxvYWRlZC5gXG4gICAgOiAnJztcbiAgY29uc3QgY29kZVNjYW5uaW5nUnVsZSA9IGNvZGVTY2FubmluZ1xuICAgID8gYFxuKiAqKlJlcXVpcmUgY29kZSBzY2FubmluZyByZXN1bHRzKiosIHdpdGggdGhlIHRvb2wgKipDb2RlUUwqKiwgc2VjdXJpdHkgYWxlcnRzIHNldCB0byAqKkhpZ2ggb3IgaGlnaGVyKiogYW5kIGFsZXJ0cyBzZXQgdG8gKipFcnJvcnMqKi4gTWVyZ2lmeSBpcyBleGVtcHQgZnJvbSB0aGlzIHJ1bGUsIHNvIFxcYC5tZXJnaWZ5LnltbFxcYCBhbHNvIHdhaXRzIGZvciB0aGUgXFxgJHtDb2RlUWwuQ0hFQ0tfTkFNRX1cXGAgY2hlY2sgaW5zdGVhZC5gXG4gICAgOiAnJztcbiAgcmV0dXJuIGBBbGwgcHVsbCByZXF1ZXN0cyBhcmUgbWVyZ2VkIGJ5IHRoZSBbTWVyZ2lmeV0oaHR0cHM6Ly9tZXJnaWZ5LmNvbSkgbWVyZ2UgcXVldWUsIGNvbmZpZ3VyZWQgaW4gXFxgLm1lcmdpZnkueW1sXFxgLiAke3F1ZXVlZH0sIE1lcmdpZnkgcXVldWVzIGl0LCBicmluZ3MgaXQgdXAgdG8gZGF0ZSB3aXRoIHRoZSBkZWZhdWx0IGJyYW5jaCwgd2FpdHMgZm9yIHRoZSBjaGVja3MgYWdhaW4gYW5kIHNxdWFzaCBtZXJnZXMgaXQuIERyYWZ0IHB1bGwgcmVxdWVzdHMgYW5kIHRob3NlIGxhYmVsbGVkIFxcYGRvLW5vdC1tZXJnZVxcYCBhcmUgbm90IG1lcmdlZC5cblxuVGhlIHJlcG9zaXRvcnkgbXVzdCBiZSBjb25maWd1cmVkIGFzIGJlbG93IHNvIHRoYXQgbm90aGluZyBjYW4gYmUgbWVyZ2VkIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgcXVldWUuXG5cbiMjIyBNZXJnaWZ5XG5cbkluc3RhbGwgdGhlIFtNZXJnaWZ5IEdpdEh1YiBBcHBdKGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBzL21lcmdpZnkpIGFuZCBnaXZlIGl0IGFjY2VzcyB0byB0aGlzIHJlcG9zaXRvcnkuXG5cbiMjIyBQdWxsIHJlcXVlc3Qgc2V0dGluZ3NcblxuSW4gKipTZXR0aW5ncyDihpIgR2VuZXJhbCDihpIgUHVsbCBSZXF1ZXN0cyoqOlxuKiBBbGxvdyBzcXVhc2ggbWVyZ2luZyBvbmx5ICh1bnRpY2sgbWVyZ2UgY29tbWl0cyBhbmQgcmViYXNlIG1lcmdpbmcpLCBtYXRjaGluZyB0aGUgcXVldWUncyBtZXJnZSBtZXRob2QuXG4qIFVudGljayAqKkFsbG93IGF1dG8tbWVyZ2UqKiwgYmVjYXVzZSBHaXRIdWIncyBvd24gYXV0by1tZXJnZSBtZXJnZXMgb3V0c2lkZSB0aGUgcXVldWUuXG4qIFRpY2sgKipBdXRvbWF0aWNhbGx5IGRlbGV0ZSBoZWFkIGJyYW5jaGVzKiouJHtjb2RlU2Nhbm5pbmdTZXR0aW5nc31cblxuIyMjIEJyYW5jaCBydWxlc2V0XG5cbkluICoqU2V0dGluZ3Mg4oaSIFJ1bGVzIOKGkiBSdWxlc2V0cyoqLCBjcmVhdGUgYSBicmFuY2ggcnVsZXNldCB3aXRoIGVuZm9yY2VtZW50ICoqQWN0aXZlKiogdGhhdCB0YXJnZXRzIHRoZSBkZWZhdWx0IGJyYW5jaCwgYW5kIHNldDpcbiogKipCeXBhc3MgbGlzdCoqOiB0aGUgKipNZXJnaWZ5KiogYXBwIG9ubHksIGluICoqRXhlbXB0KiogbW9kZS4gRG8gbm90IGFkZCBhZG1pbnMgb3Igb3RoZXIgcm9sZXMsIGFzIGFueW9uZSBvbiB0aGlzIGxpc3QgY2FuIG1lcmdlIHdpdGhvdXQgdGhlIHF1ZXVlLlxuKiAqKlJlc3RyaWN0IHVwZGF0ZXMqKjogb25seSBieXBhc3MgYWN0b3JzIGNhbiB1cGRhdGUgdGhlIGJyYW5jaCwgc28gcHVsbCByZXF1ZXN0cyBjYW5ub3QgYmUgbWVyZ2VkIGZyb20gdGhlIEdpdEh1YiBVSSBvciBDTEkgYW5kIGNvbW1pdHMgY2Fubm90IGJlIHB1c2hlZCBkaXJlY3RseS5cbiogKipSZXN0cmljdCBkZWxldGlvbnMqKiBhbmQgKipCbG9jayBmb3JjZSBwdXNoZXMqKi5cbiogKipSZXF1aXJlIGEgcHVsbCByZXF1ZXN0IGJlZm9yZSBtZXJnaW5nKiosIHdpdGggJHthcHByb3ZhbHN9LlxuKiAqKlJlcXVpcmUgc3RhdHVzIGNoZWNrcyB0byBwYXNzKiosIGxpc3RpbmcgJHtzdGF0dXNDaGVja3N9LiBMZWF2ZSAqKlJlcXVpcmUgYnJhbmNoZXMgdG8gYmUgdXAgdG8gZGF0ZSBiZWZvcmUgbWVyZ2luZyoqIHVudGlja2VkLCBhcyB0aGUgcXVldWUgYWxyZWFkeSB1cGRhdGVzIGFuZCByZXRlc3RzIGVhY2ggcHVsbCByZXF1ZXN0LiR7Y29kZVNjYW5uaW5nUnVsZX1cblxuRG8gbm90IGVuYWJsZSBHaXRIdWIncyBvd24gKipSZXF1aXJlIG1lcmdlIHF1ZXVlKiogcnVsZSwgYXMgaXQgY29tcGV0ZXMgd2l0aCBNZXJnaWZ5LlxuXG5JZiB0aGUgcXVldWUgaXMgdW5hdmFpbGFibGUgYW5kIGEgY2hhbmdlIGhhcyB0byBiZSBtZXJnZWQsIGFkZCB5b3Vyc2VsZiB0byB0aGUgYnlwYXNzIGxpc3QgdGVtcG9yYXJpbHkgYW5kIHJlbW92ZSB5b3Vyc2VsZiBhZnRlcndhcmRzLiR7c29sZU1haW50YWluZXJ9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZU1lcmdpZnkoXG4gIHByb2plY3Q6IE1lcmdpZnlQcm9qZWN0LFxuICBvcHRpb25zOiBNZXJnaWZ5T3B0aW9ucyA9IHt9LFxuKSB7XG4gIGNvbnN0IG1lcmdpZnkgPSBwcm9qZWN0LmdpdGh1Yj8ubWVyZ2lmeTtcbiAgaWYgKCFtZXJnaWZ5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYnVpbGRKb2JJZHMgPSBwcm9qZWN0LmJ1aWxkV29ya2Zsb3c/LmJ1aWxkSm9iSWRzID8/IFtdO1xuXG4gIHByb2plY3QuYXV0b01lcmdlPy5hZGRDb25kaXRpb25zKCctZHJhZnQnKTtcblxuICAvLyBNZXJnaWZ5IGlzIGV4ZW1wdCBmcm9tIHRoZSBydWxlc2V0J3MgY29kZSBzY2FubmluZyBydWxlLCBzbyB0aGUgcXVldWUgZW5mb3JjZXMgaXQgaW5zdGVhZFxuICBjb25zdCBjb2RlU2Nhbm5pbmcgPSBwcm9qZWN0LmNvbXBvbmVudHMuc29tZSgoYykgPT4gYyBpbnN0YW5jZW9mIENvZGVRbCk7XG4gIGlmIChjb2RlU2Nhbm5pbmcpIHtcbiAgICBwcm9qZWN0LmF1dG9NZXJnZT8uYWRkQ29uZGl0aW9ucyhgc3RhdHVzLXN1Y2Nlc3M9JHtDb2RlUWwuQ0hFQ0tfTkFNRX1gKTtcbiAgfVxuXG4gIG1lcmdpZnkuYWRkUnVsZSh7XG4gICAgbmFtZTogJ0F1dG9tYXRpYyBhcHByb3ZhbCBmb3IgcHJvamVuIHVwZ3JhZGUgcHVsbCByZXF1ZXN0cycsXG4gICAgY29uZGl0aW9uczogW1xuICAgICAgYGF1dGhvcj0ke29wdGlvbnMudXBncmFkZUF1dGhvciA/PyAnZW5kb3ItcHJvamVuW2JvdF0nfWAsXG4gICAgICAuLi5idWlsZEpvYklkcy5tYXAoKGlkKSA9PiBgc3RhdHVzLXN1Y2Nlc3M9JHtpZH1gKSxcbiAgICBdLFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIHJldmlldzoge1xuICAgICAgICB0eXBlOiAnQVBQUk9WRScsXG4gICAgICAgIG1lc3NhZ2U6ICdBdXRvbWF0aWNhbGx5IGFwcHJvdmluZyBwcm9qZW4gdXBncmFkZScsXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIG1lcmdpZnkuYWRkUnVsZSh7XG4gICAgbmFtZTogJ0Fzc2lnbiBQUiB3aGVuIGNoZWNrIGZhaWxzJyxcbiAgICBjb25kaXRpb25zOiBbJyNjaGVjay1mYWlsdXJlID4gMCddLFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIGFzc2lnbjoge1xuICAgICAgICBhZGRfdXNlcnM6IG9wdGlvbnMuYXNzaWduVXNlcnMgPz8gWydkYXZlc2hlcGhlcmQnXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgcHJvamVjdC50cnlGaW5kT2JqZWN0RmlsZSgnLm1lcmdpZnkueW1sJyk/LmFkZE92ZXJyaWRlKFxuICAgICdtZXJnZV9wcm90ZWN0aW9uc19zZXR0aW5ncy5yZXBvcnRpbmdfbWV0aG9kJyxcbiAgICBvcHRpb25zLnJlcG9ydGluZ01ldGhvZCA/PyAnZGVwbG95bWVudHMnLFxuICApO1xuXG4gIHByb2plY3QucmVhZG1lPy5hZGRTZWN0aW9uKFxuICAgICdHaXRIdWIgQ29uZmlndXJhdGlvbicsXG4gICAgZ2l0aHViQ29uZmlndXJhdGlvblNlY3Rpb24oXG4gICAgICBidWlsZEpvYklkcyxcbiAgICAgIG9wdGlvbnMuYXBwcm92ZWRSZXZpZXdzID8/IDEsXG4gICAgICBjb2RlU2Nhbm5pbmcsXG4gICAgKSxcbiAgKTtcbn1cbiJdfQ==
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Section = void 0;
|
|
4
4
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
5
|
class Section {
|
|
6
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Section", version: "3.
|
|
6
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Section", version: "3.2.0" };
|
|
7
7
|
options;
|
|
8
8
|
constructor(options) {
|
|
9
9
|
this.options = options;
|
|
@@ -5,7 +5,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
5
5
|
const projen_1 = require("projen");
|
|
6
6
|
const section_1 = require("./elements/section");
|
|
7
7
|
class Readme extends projen_1.FileBase {
|
|
8
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Readme", version: "3.
|
|
8
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Readme", version: "3.2.0" };
|
|
9
9
|
description;
|
|
10
10
|
sections = [];
|
|
11
11
|
constructor(project, options = {}) {
|
|
@@ -1262,6 +1262,11 @@ export interface CdkTypeScriptAppOptions {
|
|
|
1262
1262
|
* @featured true
|
|
1263
1263
|
*/
|
|
1264
1264
|
readonly name: string;
|
|
1265
|
+
/**
|
|
1266
|
+
* Scan the code with CodeQL on pull requests, pushes to the default branch and weekly.
|
|
1267
|
+
* @default true
|
|
1268
|
+
*/
|
|
1269
|
+
readonly codeql?: boolean;
|
|
1265
1270
|
/**
|
|
1266
1271
|
* List of teams used to generate the CODEOWNERS file
|
|
1267
1272
|
*/
|