Skip to content

Commit 89e714c

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
Add secure field to synthetics config variables (#966)
Co-authored-by: ci.datadog-api-spec <[email protected]>
1 parent 9672c8d commit 89e714c

File tree

9 files changed

+44
-27
lines changed

9 files changed

+44
-27
lines changed

.apigentools-info

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
"spec_versions": {
55
"v1": {
66
"apigentools_version": "1.6.4",
7-
"regenerated": "2022-12-29 18:12:54.073283",
8-
"spec_repo_commit": "5ba7a1cc"
7+
"regenerated": "2023-01-03 13:40:02.545609",
8+
"spec_repo_commit": "89fd9735"
99
},
1010
"v2": {
1111
"apigentools_version": "1.6.4",
12-
"regenerated": "2022-12-29 18:12:54.092212",
13-
"spec_repo_commit": "5ba7a1cc"
12+
"regenerated": "2023-01-03 13:40:02.557226",
13+
"spec_repo_commit": "89fd9735"
1414
}
1515
}
1616
}

.generator/schemas/v1/openapi.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12530,6 +12530,11 @@ components:
1253012530
pattern:
1253112531
description: Pattern of the variable.
1253212532
type: string
12533+
secure:
12534+
description: Whether the value of this variable will be obfuscated in test
12535+
results.
12536+
example: false
12537+
type: boolean
1253312538
type:
1253412539
$ref: '#/components/schemas/SyntheticsConfigVariableType'
1253512540
required:
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
"2022-08-30T12:58:42.391Z"
1+
"2022-12-28T20:20:26.146Z"

cassettes/v1/Synthetics_2658572017/Create-a-browser-test-returns-OK-Returns-the-created-test-details-response_1783012467/recording.har

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
},
99
"entries": [
1010
{
11-
"_id": "620096238f9712d63a4a84f674a24b4e",
11+
"_id": "997b1d959c0a4edbe01eff3a28ee9326",
1212
"_order": 0,
1313
"cache": {},
1414
"request": {
15-
"bodySize": 763,
15+
"bodySize": 777,
1616
"cookies": [],
1717
"headers": [
1818
{
@@ -32,17 +32,17 @@
3232
"postData": {
3333
"mimeType": "application/json",
3434
"params": [],
35-
"text": "{\"config\":{\"assertions\":[],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"method\":\"GET\",\"url\":\"https://datadoghq.com\"},\"setCookie\":\"name:test\"},\"locations\":[\"aws:us-east-2\"],\"message\":\"Test message\",\"name\":\"Test-Create_a_browser_test_returns_OK_Returns_the_created_test_details_response-1661864322\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"device_ids\":[\"tablet\"],\"disableCors\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"min_location_failed\":1,\"noScreenshot\":true,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":300},\"steps\":[{\"allowFailure\":false,\"isCritical\":true,\"name\":\"Refresh page\",\"params\":{},\"type\":\"refresh\"}],\"tags\":[\"testing:browser\"],\"type\":\"browser\"}"
35+
"text": "{\"config\":{\"assertions\":[],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"secure\":true,\"type\":\"text\"}],\"request\":{\"method\":\"GET\",\"url\":\"https://datadoghq.com\"},\"setCookie\":\"name:test\"},\"locations\":[\"aws:us-east-2\"],\"message\":\"Test message\",\"name\":\"Test-Create_a_browser_test_returns_OK_Returns_the_created_test_details_response-1672258826\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"device_ids\":[\"tablet\"],\"disableCors\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"min_location_failed\":1,\"noScreenshot\":true,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":300},\"steps\":[{\"allowFailure\":false,\"isCritical\":true,\"name\":\"Refresh page\",\"params\":{},\"type\":\"refresh\"}],\"tags\":[\"testing:browser\"],\"type\":\"browser\"}"
3636
},
3737
"queryString": [],
3838
"url": "https://api.datadoghq.com/api/v1/synthetics/tests/browser"
3939
},
4040
"response": {
41-
"bodySize": 961,
41+
"bodySize": 926,
4242
"content": {
4343
"mimeType": "application/json",
44-
"size": 961,
45-
"text": "{\"status\":\"paused\",\"public_id\":\"3x7-bch-33k\",\"tags\":[\"testing:browser\"],\"org_id\":321813,\"locations\":[\"aws:us-east-2\"],\"message\":\"Test message\",\"deleted_at\":null,\"name\":\"Test-Create_a_browser_test_returns_OK_Returns_the_created_test_details_response-1661864322\",\"monitor_id\":81568570,\"type\":\"browser\",\"created_at\":\"2022-08-30T12:58:43.101655+00:00\",\"modified_at\":\"2022-08-30T12:58:43.101655+00:00\",\"steps\":[{\"name\":\"Refresh page\",\"allowFailure\":false,\"params\":{},\"isCritical\":true,\"type\":\"refresh\"}],\"config\":{\"setCookie\":\"name:test\",\"request\":{\"url\":\"https://datadoghq.com\",\"method\":\"GET\"},\"assertions\":[],\"configVariables\":[{\"pattern\":\"content-type\",\"type\":\"text\",\"example\":\"content-type\",\"name\":\"PROPERTY\"}]},\"options\":{\"accept_self_signed\":false,\"retry\":{\"count\":3,\"interval\":10},\"min_location_failed\":1,\"allow_insecure\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"noScreenshot\":true,\"disableCors\":true,\"device_ids\":[\"tablet\"],\"tick_every\":300}}"
44+
"size": 926,
45+
"text": "{\"status\":\"paused\",\"public_id\":\"t2j-ah7-xvk\",\"tags\":[\"testing:browser\"],\"org_id\":321813,\"locations\":[\"aws:us-east-2\"],\"message\":\"Test message\",\"deleted_at\":null,\"name\":\"Test-Create_a_browser_test_returns_OK_Returns_the_created_test_details_response-1672258826\",\"monitor_id\":106541668,\"type\":\"browser\",\"created_at\":\"2022-12-28T20:20:26.418704+00:00\",\"modified_at\":\"2022-12-28T20:20:26.418704+00:00\",\"steps\":[{\"name\":\"Refresh page\",\"allowFailure\":false,\"params\":{},\"isCritical\":true,\"type\":\"refresh\"}],\"config\":{\"setCookie\":\"name:test\",\"request\":{\"url\":\"https://datadoghq.com\",\"method\":\"GET\"},\"assertions\":[],\"configVariables\":[{\"type\":\"text\",\"secure\":true,\"name\":\"PROPERTY\"}]},\"options\":{\"accept_self_signed\":false,\"retry\":{\"count\":3,\"interval\":10},\"min_location_failed\":1,\"allow_insecure\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"noScreenshot\":true,\"disableCors\":true,\"device_ids\":[\"tablet\"],\"tick_every\":300}}"
4646
},
4747
"cookies": [],
4848
"headers": [
@@ -57,11 +57,11 @@
5757
"status": 200,
5858
"statusText": "OK"
5959
},
60-
"startedDateTime": "2022-08-30T12:58:42.395Z",
61-
"time": 706
60+
"startedDateTime": "2022-12-28T20:20:26.155Z",
61+
"time": 288
6262
},
6363
{
64-
"_id": "36510a730949bc22e7ab5f532d2101ba",
64+
"_id": "a12fb7b7a663b993805723cb39b1e9b9",
6565
"_order": 0,
6666
"cache": {},
6767
"request": {
@@ -85,17 +85,17 @@
8585
"postData": {
8686
"mimeType": "application/json",
8787
"params": [],
88-
"text": "{\"public_ids\":[\"3x7-bch-33k\"]}"
88+
"text": "{\"public_ids\":[\"t2j-ah7-xvk\"]}"
8989
},
9090
"queryString": [],
9191
"url": "https://api.datadoghq.com/api/v1/synthetics/tests/delete"
9292
},
9393
"response": {
94-
"bodySize": 95,
94+
"bodySize": 96,
9595
"content": {
9696
"mimeType": "application/json",
97-
"size": 95,
98-
"text": "{\"deleted_tests\":[{\"deleted_at\":\"2022-08-30T12:58:48.505733+00:00\",\"public_id\":\"3x7-bch-33k\"}]}"
97+
"size": 96,
98+
"text": "{\"deleted_tests\":[{\"deleted_at\":\"2022-12-28T20:20:26.638790+00:00\",\"public_id\":\"t2j-ah7-xvk\"}]}\n"
9999
},
100100
"cookies": [],
101101
"headers": [
@@ -104,14 +104,14 @@
104104
"value": "application/json"
105105
}
106106
],
107-
"headersSize": 665,
107+
"headersSize": 622,
108108
"httpVersion": "HTTP/1.1",
109109
"redirectURL": "",
110110
"status": 200,
111111
"statusText": "OK"
112112
},
113-
"startedDateTime": "2022-08-30T12:58:43.107Z",
114-
"time": 5415
113+
"startedDateTime": "2022-12-28T20:20:26.463Z",
114+
"time": 229
115115
}
116116
],
117117
"pages": [],

examples/v1/synthetics/CreateSyntheticsBrowserTest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const params: v1.SyntheticsApiCreateSyntheticsBrowserTestRequest = {
1717
name: "PROPERTY",
1818
pattern: "content-type",
1919
type: "text",
20+
secure: true,
2021
},
2122
],
2223
request: {

examples/v1/synthetics/UpdateBrowserTest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const params: v1.SyntheticsApiUpdateBrowserTestRequest = {
1414
configVariables: [
1515
{
1616
name: "VARIABLE_NAME",
17+
secure: false,
1718
type: "text",
1819
},
1920
],

features/v1/synthetics.feature

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Feature: Synthetics
3434
@generated @skip @team:DataDog/synthetics-app
3535
Scenario: Create a browser test returns "- JSON format is wrong" response
3636
Given new "CreateSyntheticsBrowserTest" request
37-
And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "proxy": {"url": "https://example.com"}, "service": "Greeter", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"ci": {"executionRule": "blocking"}, "device_ids": ["laptop_large"], "monitor_options": {}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"}
37+
And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "proxy": {"url": "https://example.com"}, "service": "Greeter", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"ci": {"executionRule": "blocking"}, "device_ids": ["laptop_large"], "monitor_options": {}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"}
3838
When the request is sent
3939
Then the response status is 400 - JSON format is wrong
4040

@@ -55,11 +55,12 @@ Feature: Synthetics
5555
When the request is sent
5656
Then the response status is 200 OK - Returns the created test details.
5757
And the response "name" is equal to "{{ unique }}"
58+
And the response "config.configVariables[0].secure" is equal to true
5859

5960
@generated @skip @team:DataDog/synthetics-app
6061
Scenario: Create a browser test returns "Test quota is reached" response
6162
Given new "CreateSyntheticsBrowserTest" request
62-
And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "proxy": {"url": "https://example.com"}, "service": "Greeter", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"ci": {"executionRule": "blocking"}, "device_ids": ["laptop_large"], "monitor_options": {}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"}
63+
And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "proxy": {"url": "https://example.com"}, "service": "Greeter", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"ci": {"executionRule": "blocking"}, "device_ids": ["laptop_large"], "monitor_options": {}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"}
6364
When the request is sent
6465
Then the response status is 402 Test quota is reached
6566

@@ -249,23 +250,23 @@ Feature: Synthetics
249250
Scenario: Edit a browser test returns "- JSON format is wrong" response
250251
Given new "UpdateBrowserTest" request
251252
And request contains "public_id" parameter from "REPLACE.ME"
252-
And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "proxy": {"url": "https://example.com"}, "service": "Greeter", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"ci": {"executionRule": "blocking"}, "device_ids": ["laptop_large"], "monitor_options": {}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"}
253+
And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "proxy": {"url": "https://example.com"}, "service": "Greeter", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"ci": {"executionRule": "blocking"}, "device_ids": ["laptop_large"], "monitor_options": {}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"}
253254
When the request is sent
254255
Then the response status is 400 - JSON format is wrong
255256

256257
@generated @skip @team:DataDog/synthetics-app
257258
Scenario: Edit a browser test returns "- Synthetic Monitoring is not activated for the user" response
258259
Given new "UpdateBrowserTest" request
259260
And request contains "public_id" parameter from "REPLACE.ME"
260-
And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "proxy": {"url": "https://example.com"}, "service": "Greeter", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"ci": {"executionRule": "blocking"}, "device_ids": ["laptop_large"], "monitor_options": {}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"}
261+
And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "proxy": {"url": "https://example.com"}, "service": "Greeter", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"ci": {"executionRule": "blocking"}, "device_ids": ["laptop_large"], "monitor_options": {}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"}
261262
When the request is sent
262263
Then the response status is 404 - Synthetic Monitoring is not activated for the user
263264

264265
@generated @skip @team:DataDog/synthetics-app
265266
Scenario: Edit a browser test returns "OK" response
266267
Given new "UpdateBrowserTest" request
267268
And request contains "public_id" parameter from "REPLACE.ME"
268-
And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "proxy": {"url": "https://example.com"}, "service": "Greeter", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"ci": {"executionRule": "blocking"}, "device_ids": ["laptop_large"], "monitor_options": {}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"}
269+
And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "proxy": {"url": "https://example.com"}, "service": "Greeter", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"ci": {"executionRule": "blocking"}, "device_ids": ["laptop_large"], "monitor_options": {}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"}
269270
When the request is sent
270271
Then the response status is 200 OK
271272

features/v1/synthetics_browser_test_payload.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
"example": "content-type",
77
"name": "PROPERTY",
88
"pattern": "content-type",
9-
"type": "text"
9+
"type": "text",
10+
"secure": true
1011
}
1112
],
1213
"request": { "method": "GET", "url": "https://datadoghq.com" },

0 commit comments

Comments
 (0)