fiftyone.geolocation 4.3.0 → 4.3.5
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/ci/build-and-test.yml +21 -0
- package/ci/common-ci/.github/labels.yml +80 -0
- package/ci/common-ci/.github/workflows/sync-labels.yml +52 -0
- package/ci/common-ci/CiTips.md +30 -1
- package/ci/common-ci/GitVersion.yml +18 -0
- package/ci/common-ci/README.md +155 -17
- package/ci/common-ci/build-and-test.yml +65 -0
- package/ci/common-ci/check-merge-commit-format.yml +56 -0
- package/ci/common-ci/cloud-release-config.json +51 -0
- package/ci/common-ci/create-tag.yml +41 -0
- package/ci/common-ci/deploy.yml +16 -2
- package/ci/common-ci/dotnet/shared-code-signing-steps.yml +20 -0
- package/ci/common-ci/dotnet/shared-extract-and-publish-packages.yml +29 -0
- package/ci/common-ci/go/shared-go-list-stage.yml +64 -0
- package/ci/common-ci/java/readme.md +22 -0
- package/ci/common-ci/java/shared-package-signing-steps.yml +17 -0
- package/ci/{shared-extract-and-publish-packages.yml → common-ci/node/shared-extract-and-publish-packages.yml} +7 -1
- package/ci/common-ci/php/readme.md +15 -0
- package/ci/common-ci/release-config-schema.json +52 -0
- package/ci/common-ci/release-config-template.json +310 -0
- package/ci/common-ci/release-config.json +89 -0
- package/ci/common-ci/release-process.drawio +165 -0
- package/ci/common-ci/release-process.png +0 -0
- package/ci/common-ci/scripts/azure/checkSlot.ps1 +28 -0
- package/ci/common-ci/scripts/modules/51DAuthorizationModule/51DAuthorizationModule.Tests.ps1 +1 -0
- package/ci/common-ci/scripts/modules/51DAuthorizationModule/51DAuthorizationModule.psm1 +16 -0
- package/ci/common-ci/scripts/modules/51DBuildModule/51DBuildModule.Tests.ps1 +3 -0
- package/ci/common-ci/scripts/modules/51DBuildModule/51DBuildModule.psm1 +200 -0
- package/ci/common-ci/scripts/modules/51DDeployModule/51DDeployModule.psm1 +66 -0
- package/ci/common-ci/scripts/modules/51DDownloadDataFileModule/51DDownloadDataFileModule.psm1 +74 -0
- package/ci/common-ci/scripts/modules/51DEnvironmentModule/51DEnvironmentModule.Tests.ps1 +25 -0
- package/ci/common-ci/scripts/modules/51DEnvironmentModule/51DEnvironmentModule.psm1 +22 -0
- package/ci/common-ci/scripts/modules/51DErrorHandleModule/51DErrorHandleModule.Tests.ps1 +1 -0
- package/ci/common-ci/scripts/modules/51DErrorHandleModule/51DErrorHandleModule.psm1 +41 -0
- package/ci/common-ci/scripts/modules/51DGitModule/51DGitModule.Tests.ps1 +5 -0
- package/ci/common-ci/scripts/modules/51DGitModule/51DGitModule.psm1 +702 -0
- package/ci/common-ci/scripts/modules/51DPackageModule/51DPackageModule.Tests.ps1 +842 -0
- package/ci/common-ci/scripts/modules/51DPackageModule/51DPackageModule.psm1 +926 -0
- package/ci/common-ci/scripts/modules/51DPipelineModule/51DPipelineModule.Tests.ps1 +1 -0
- package/ci/common-ci/scripts/modules/51DPipelineModule/51DPipelineModule.psm1 +87 -0
- package/ci/common-ci/scripts/modules/51DPullRequestModule/51DPullRequestModule.Tests.ps1 +194 -0
- package/ci/common-ci/scripts/modules/51DPullRequestModule/51DPullRequestModule.psm1 +653 -0
- package/ci/common-ci/scripts/modules/51DReleaseModule/51DReleaseModule.Tests.ps1 +277 -0
- package/ci/common-ci/scripts/modules/51DReleaseModule/51DReleaseModule.psm1 +554 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/51DReleaseTestEnvModule.Tests.ps1 +1141 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/51DReleaseTestEnvModule.psd1 +0 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/51DReleaseTestEnvModule.psm1 +1465 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/ConfigurationVerifier.Tests.ps1 +318 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/ConfigurationVerifier.psm1 +344 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/ReleaseVerifier.Tests.ps1 +1186 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/ReleaseVerifier.psm1 +900 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/SharedVariables.psm1 +139 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/config/c-test-env-config.json +268 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/config/dotnet-deploy-test-env-config.json +700 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/config/dotnet-test-env-config.json +533 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/config/go-deploy-test-env-config.json +290 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/config/go-test-env-config.json +260 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/config/java-deploy-test-env-config.json +511 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/config/java-test-env-config.json +388 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/config/node-deploy-test-env-config.json +419 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/config/node-test-env-config.json +329 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/config/php-test-env-config.json +540 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/config/python-deploy-test-env-config.json +411 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/config/python-test-env-config.json +321 -0
- package/ci/common-ci/scripts/modules/51DReleaseTestEnvModule/config/test-env-config.json +457 -0
- package/ci/common-ci/scripts/modules/51DRestModule/51DRestModule.psm1 +38 -0
- package/ci/common-ci/scripts/modules/AzurePortalModules/51DApplicationInsightsModule/51DApplicationInsightsModule.psm1 +104 -0
- package/ci/common-ci/scripts/modules/AzurePortalModules/51DChecksModule/51DChecksModule.psm1 +68 -0
- package/ci/common-ci/scripts/modules/AzurePortalModules/51DCloudModule/51DCloudModule.psm1 +155 -0
- package/ci/common-ci/scripts/modules/AzurePortalModules/51DConnectAzureModule/51DConnectAzureModule.psm1 +45 -0
- package/ci/common-ci/scripts/modules/AzurePortalModules/51DSSLBindingsModule/51DSSLBIndingsModule.psm1 +100 -0
- package/ci/common-ci/scripts/modules/AzurePortalModules/51DStagingSlotModule/51DStagingSlotModule.psm1 +50 -0
- package/ci/common-ci/scripts/modules/AzurePortalModules/51DStorageAccountModule/51DStorageAccountModule.psm1 +248 -0
- package/ci/common-ci/scripts/modules/AzurePortalModules/51DTrafficManagerModule/51DTrafficManagerModule.psm1 +58 -0
- package/ci/common-ci/shared-auto-complete-pr-stage.yml +61 -0
- package/ci/common-ci/shared-create-tag-job.yml +19 -30
- package/ci/common-ci/shared-docker-build-steps.yml +34 -0
- package/ci/common-ci/shared-docker-push-steps.yml +32 -0
- package/ci/common-ci/shared-docker-test-http-steps.yml +69 -0
- package/ci/common-ci/shared-git-tag-job.yml +38 -0
- package/ci/common-ci/shared-git-version-job.yml +71 -0
- package/ci/common-ci/shared-publish-github-stage.yml +69 -60
- package/ci/common-ci/shared-submodule-trigger-stage.yml +110 -0
- package/ci/common-ci/shared-variables.yml +3 -0
- package/ci/common-ci/trigger-release-apis.yml +39 -0
- package/ci/create-packages.yml +24 -36
- package/ci/deploy-external.yml +55 -0
- package/ci/{deploy.yml → deploy-internal.yml} +3 -29
- package/ci/shared-build-and-test-platforms.yml +7 -1
- package/ci/shared-build-and-test-stage.yml +9 -2
- package/ci/submodule-trigger.yml +12 -0
- package/examples/examples.test.js +3 -3
- package/geoLocationPipelineBuilder.js +13 -10
- package/package.json +11 -7
- package/setup.js +1 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"repositories": {
|
|
3
|
+
"common-ci": {
|
|
4
|
+
"version": "4.3.41",
|
|
5
|
+
"isLeaf": true
|
|
6
|
+
},
|
|
7
|
+
"device-detection-cxx": {
|
|
8
|
+
"version": "4.3.12",
|
|
9
|
+
"isLeaf": false,
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"common-ci"
|
|
12
|
+
]
|
|
13
|
+
},
|
|
14
|
+
"location-java": {
|
|
15
|
+
"version": "4.3.7",
|
|
16
|
+
"packageName": "pipeline.geo-location",
|
|
17
|
+
"versionVariableName": "geolocation.version",
|
|
18
|
+
"isLeaf": false,
|
|
19
|
+
"dependencies": [
|
|
20
|
+
"common-ci",
|
|
21
|
+
"device-detection-java"
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"device-detection-java": {
|
|
25
|
+
"version": "4.3.12",
|
|
26
|
+
"packageName": "pipeline.device-detection",
|
|
27
|
+
"versionVariableName": "devicedetection.version",
|
|
28
|
+
"isLeaf": false,
|
|
29
|
+
"dependencies": [
|
|
30
|
+
"common-ci",
|
|
31
|
+
"device-detection-cxx"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"location-node": {
|
|
35
|
+
"version": "4.3.5",
|
|
36
|
+
"packageName": "fiftyone.geolocation",
|
|
37
|
+
"isLeaf": false,
|
|
38
|
+
"dependencies": [
|
|
39
|
+
"common-ci",
|
|
40
|
+
"device-detection-node"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
"device-detection-node": {
|
|
44
|
+
"version": "4.3.9",
|
|
45
|
+
"packageName": "fiftyone.devicedetection",
|
|
46
|
+
"isLeaf": false,
|
|
47
|
+
"dependencies": [
|
|
48
|
+
"common-ci",
|
|
49
|
+
"device-detection-cxx"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
"device-detection-python": {
|
|
53
|
+
"version": "4.3.3",
|
|
54
|
+
"packageName": "fiftyone_devicedetection",
|
|
55
|
+
"versionVariableName": "deviceDetectionVersion",
|
|
56
|
+
"isLeaf": false,
|
|
57
|
+
"dependencies": [
|
|
58
|
+
"common-ci",
|
|
59
|
+
"device-detection-cxx"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"device-detection-php-onpremise": {
|
|
63
|
+
"version": "4.3.9",
|
|
64
|
+
"packageName": "fiftyone.devicedetection",
|
|
65
|
+
"isLeaf": false,
|
|
66
|
+
"dependencies": [
|
|
67
|
+
"common-ci",
|
|
68
|
+
"device-detection-cxx"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"device-detection-go": {
|
|
72
|
+
"version": "4.3.3",
|
|
73
|
+
"isLeaf": false,
|
|
74
|
+
"dependencies": [
|
|
75
|
+
"common-ci",
|
|
76
|
+
"device-detection-cxx"
|
|
77
|
+
]
|
|
78
|
+
},
|
|
79
|
+
"device-detection-examples-go": {
|
|
80
|
+
"version": "4.3.2",
|
|
81
|
+
"isLeaf": false,
|
|
82
|
+
"dependencies": [
|
|
83
|
+
"common-ci",
|
|
84
|
+
"device-detection-go"
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"approvalRequired": false
|
|
89
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
<mxfile host="65bd71144e">
|
|
2
|
+
<diagram id="kqvr45VDlgbzlYrqjXVV" name="Page-1">
|
|
3
|
+
<mxGraphModel dx="1092" dy="790" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
|
4
|
+
<root>
|
|
5
|
+
<mxCell id="0"/>
|
|
6
|
+
<mxCell id="1" parent="0"/>
|
|
7
|
+
<mxCell id="3" value="Release Trigger" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
8
|
+
<mxGeometry x="320" y="20" width="120" height="60" as="geometry"/>
|
|
9
|
+
</mxCell>
|
|
10
|
+
<mxCell id="4" value="Complete Leaf Modules Pull Requests" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
11
|
+
<mxGeometry x="320" y="120" width="120" height="60" as="geometry"/>
|
|
12
|
+
</mxCell>
|
|
13
|
+
<mxCell id="5" value="Tag-Repository/Create-Packages" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
14
|
+
<mxGeometry x="320" y="220" width="120" height="60" as="geometry"/>
|
|
15
|
+
</mxCell>
|
|
16
|
+
<mxCell id="6" value="Tag Creation Only" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
17
|
+
<mxGeometry x="340" y="320" width="80" height="80" as="geometry"/>
|
|
18
|
+
</mxCell>
|
|
19
|
+
<mxCell id="7" value="Deploy Internally" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
20
|
+
<mxGeometry x="320" y="440" width="120" height="60" as="geometry"/>
|
|
21
|
+
</mxCell>
|
|
22
|
+
<mxCell id="8" value="Deploy externally" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
23
|
+
<mxGeometry x="520" y="440" width="120" height="60" as="geometry"/>
|
|
24
|
+
</mxCell>
|
|
25
|
+
<mxCell id="9" value="Submodule trigger" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
26
|
+
<mxGeometry x="320" y="670" width="120" height="60" as="geometry"/>
|
|
27
|
+
</mxCell>
|
|
28
|
+
<mxCell id="10" value="Create Pull Request To Main" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
29
|
+
<mxGeometry x="320" y="870" width="120" height="60" as="geometry"/>
|
|
30
|
+
</mxCell>
|
|
31
|
+
<mxCell id="11" value="Pull Request Tests Run" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
32
|
+
<mxGeometry x="320" y="970" width="120" height="60" as="geometry"/>
|
|
33
|
+
</mxCell>
|
|
34
|
+
<mxCell id="12" value="Pull Request Auto Completion" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
35
|
+
<mxGeometry x="320" y="1190" width="120" height="60" as="geometry"/>
|
|
36
|
+
</mxCell>
|
|
37
|
+
<mxCell id="13" value="Tests Pass" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
38
|
+
<mxGeometry x="340" y="1070" width="80" height="80" as="geometry"/>
|
|
39
|
+
</mxCell>
|
|
40
|
+
<mxCell id="14" value="Update dependency references and versions" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
41
|
+
<mxGeometry x="320" y="770" width="120" height="60" as="geometry"/>
|
|
42
|
+
</mxCell>
|
|
43
|
+
<mxCell id="15" value="" style="endArrow=classic;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="3" target="4">
|
|
44
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
45
|
+
<mxPoint x="530" y="260" as="sourcePoint"/>
|
|
46
|
+
<mxPoint x="580" y="210" as="targetPoint"/>
|
|
47
|
+
<Array as="points">
|
|
48
|
+
<mxPoint x="380" y="100"/>
|
|
49
|
+
</Array>
|
|
50
|
+
</mxGeometry>
|
|
51
|
+
</mxCell>
|
|
52
|
+
<mxCell id="16" value="" style="endArrow=classic;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="4" target="5">
|
|
53
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
54
|
+
<mxPoint x="530" y="260" as="sourcePoint"/>
|
|
55
|
+
<mxPoint x="580" y="210" as="targetPoint"/>
|
|
56
|
+
</mxGeometry>
|
|
57
|
+
</mxCell>
|
|
58
|
+
<mxCell id="17" value="" style="endArrow=classic;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="5" target="6">
|
|
59
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
60
|
+
<mxPoint x="390" y="190" as="sourcePoint"/>
|
|
61
|
+
<mxPoint x="390" y="230" as="targetPoint"/>
|
|
62
|
+
</mxGeometry>
|
|
63
|
+
</mxCell>
|
|
64
|
+
<mxCell id="18" value="Yes" style="endArrow=classic;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="6" target="7">
|
|
65
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
66
|
+
<mxPoint x="530" y="460" as="sourcePoint"/>
|
|
67
|
+
<mxPoint x="580" y="410" as="targetPoint"/>
|
|
68
|
+
</mxGeometry>
|
|
69
|
+
</mxCell>
|
|
70
|
+
<mxCell id="19" value="Yes" style="endArrow=classic;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="6">
|
|
71
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
72
|
+
<mxPoint x="530" y="460" as="sourcePoint"/>
|
|
73
|
+
<mxPoint x="590" y="440" as="targetPoint"/>
|
|
74
|
+
<Array as="points">
|
|
75
|
+
<mxPoint x="590" y="360"/>
|
|
76
|
+
</Array>
|
|
77
|
+
</mxGeometry>
|
|
78
|
+
</mxCell>
|
|
79
|
+
<mxCell id="20" value="No" style="endArrow=classic;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="6" target="9">
|
|
80
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
81
|
+
<mxPoint x="530" y="460" as="sourcePoint"/>
|
|
82
|
+
<mxPoint x="580" y="410" as="targetPoint"/>
|
|
83
|
+
<Array as="points">
|
|
84
|
+
<mxPoint x="200" y="360"/>
|
|
85
|
+
<mxPoint x="200" y="700"/>
|
|
86
|
+
</Array>
|
|
87
|
+
</mxGeometry>
|
|
88
|
+
</mxCell>
|
|
89
|
+
<mxCell id="21" value="" style="endArrow=classic;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" target="31">
|
|
90
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
91
|
+
<mxPoint x="380" y="505" as="sourcePoint"/>
|
|
92
|
+
<mxPoint x="374" y="550" as="targetPoint"/>
|
|
93
|
+
</mxGeometry>
|
|
94
|
+
</mxCell>
|
|
95
|
+
<mxCell id="22" value="" style="endArrow=classic;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="9" target="14">
|
|
96
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
97
|
+
<mxPoint x="530" y="590" as="sourcePoint"/>
|
|
98
|
+
<mxPoint x="580" y="540" as="targetPoint"/>
|
|
99
|
+
</mxGeometry>
|
|
100
|
+
</mxCell>
|
|
101
|
+
<mxCell id="24" value="" style="endArrow=classic;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="14" target="10">
|
|
102
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
103
|
+
<mxPoint x="530" y="690" as="sourcePoint"/>
|
|
104
|
+
<mxPoint x="580" y="640" as="targetPoint"/>
|
|
105
|
+
</mxGeometry>
|
|
106
|
+
</mxCell>
|
|
107
|
+
<mxCell id="25" value="" style="endArrow=classic;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="10" target="11">
|
|
108
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
109
|
+
<mxPoint x="530" y="690" as="sourcePoint"/>
|
|
110
|
+
<mxPoint x="580" y="640" as="targetPoint"/>
|
|
111
|
+
</mxGeometry>
|
|
112
|
+
</mxCell>
|
|
113
|
+
<mxCell id="26" value="" style="endArrow=classic;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="11" target="13">
|
|
114
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
115
|
+
<mxPoint x="530" y="890" as="sourcePoint"/>
|
|
116
|
+
<mxPoint x="380" y="1079" as="targetPoint"/>
|
|
117
|
+
</mxGeometry>
|
|
118
|
+
</mxCell>
|
|
119
|
+
<mxCell id="28" value="Yes" style="endArrow=classic;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="13" target="12">
|
|
120
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
121
|
+
<mxPoint x="530" y="1090" as="sourcePoint"/>
|
|
122
|
+
<mxPoint x="580" y="1040" as="targetPoint"/>
|
|
123
|
+
</mxGeometry>
|
|
124
|
+
</mxCell>
|
|
125
|
+
<mxCell id="29" value="" style="endArrow=classic;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="12" target="5">
|
|
126
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
127
|
+
<mxPoint x="330" y="1110" as="sourcePoint"/>
|
|
128
|
+
<mxPoint x="120" y="260" as="targetPoint"/>
|
|
129
|
+
<Array as="points">
|
|
130
|
+
<mxPoint x="120" y="1220"/>
|
|
131
|
+
<mxPoint x="120" y="250"/>
|
|
132
|
+
</Array>
|
|
133
|
+
</mxGeometry>
|
|
134
|
+
</mxCell>
|
|
135
|
+
<mxCell id="31" value="Parent Module Exists" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
136
|
+
<mxGeometry x="340" y="544.5" width="80" height="80" as="geometry"/>
|
|
137
|
+
</mxCell>
|
|
138
|
+
<mxCell id="32" value="Yes" style="endArrow=classic;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="31" target="9">
|
|
139
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
140
|
+
<mxPoint x="530" y="750" as="sourcePoint"/>
|
|
141
|
+
<mxPoint x="374" y="680" as="targetPoint"/>
|
|
142
|
+
</mxGeometry>
|
|
143
|
+
</mxCell>
|
|
144
|
+
<mxCell id="34" value="Terminated" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
|
145
|
+
<mxGeometry x="660" y="1070" width="80" height="80" as="geometry"/>
|
|
146
|
+
</mxCell>
|
|
147
|
+
<mxCell id="35" value="No" style="endArrow=classic;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="31" target="34">
|
|
148
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
149
|
+
<mxPoint x="530" y="750" as="sourcePoint"/>
|
|
150
|
+
<mxPoint x="580" y="700" as="targetPoint"/>
|
|
151
|
+
<Array as="points">
|
|
152
|
+
<mxPoint x="699" y="585"/>
|
|
153
|
+
</Array>
|
|
154
|
+
</mxGeometry>
|
|
155
|
+
</mxCell>
|
|
156
|
+
<mxCell id="36" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="13" target="34">
|
|
157
|
+
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
158
|
+
<mxPoint x="530" y="950" as="sourcePoint"/>
|
|
159
|
+
<mxPoint x="580" y="900" as="targetPoint"/>
|
|
160
|
+
</mxGeometry>
|
|
161
|
+
</mxCell>
|
|
162
|
+
</root>
|
|
163
|
+
</mxGraphModel>
|
|
164
|
+
</diagram>
|
|
165
|
+
</mxfile>
|
|
Binary file
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# This is a wrapper script which runs the Get-SlotStatus function in the
|
|
2
|
+
# 51DDeployModule, helpful if running from azure pipelines and need to pass in
|
|
3
|
+
# arguments.
|
|
4
|
+
|
|
5
|
+
param (
|
|
6
|
+
# The path to the module folder which contains the 51DeployModule. This
|
|
7
|
+
# module contains the Get-SlotStatus function.
|
|
8
|
+
[Parameter(Mandatory=$true)]
|
|
9
|
+
[string]$ModulePath,
|
|
10
|
+
|
|
11
|
+
# The URI of the service to test, e.g. https://51degrees.com
|
|
12
|
+
[Parameter(Mandatory=$true)]
|
|
13
|
+
[string]$Uri,
|
|
14
|
+
|
|
15
|
+
# The number of tries before aborting the test.
|
|
16
|
+
[int]$NumberOfTries=18,
|
|
17
|
+
|
|
18
|
+
# The delay between tries in seconds.
|
|
19
|
+
[int]$SecondsBetweenTries=10
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
# Install all modules
|
|
23
|
+
$Env:PSModulePath += "$([IO.Path]::PathSeparator)$($ModulePath)"
|
|
24
|
+
Write-Host "Module Path: $($Env:PSModulePath)"
|
|
25
|
+
|
|
26
|
+
# Execute Get-SlotStatus script. The function will exit with a status of 1 if
|
|
27
|
+
# the service fails to respond with a HTTP 200 status code.
|
|
28
|
+
Get-SlotStatus -Uri $Uri -NumberOfTries $NumberOfTries -SecondsBetweenTries $SecondsBetweenTries
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Placeholder for future tests.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Get the path to the script parent folder.
|
|
2
|
+
$scriptPath = Split-Path -parent $MyInvocation.MyCommand.Definition
|
|
3
|
+
|
|
4
|
+
# Class contains definition of authorization string.
|
|
5
|
+
class Authorization {
|
|
6
|
+
static [string]$AuthorizationString = "Bearer $Env:SYSTEM_ACCESSTOKEN"
|
|
7
|
+
# When using this script locally, create a authorization -setting.json with the following content:
|
|
8
|
+
# { "Base64PAT": "Basic [Your Base 64 PAT]" }
|
|
9
|
+
# Update it with your base 64 encoded PAT as described at
|
|
10
|
+
# https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=preview-page#use-a-pat
|
|
11
|
+
#
|
|
12
|
+
# Then uncomment the following line, load this module and run 'Using module 51DAuthorizationModule' in a fresh environment if
|
|
13
|
+
# accessing this directly from a terminal.
|
|
14
|
+
#
|
|
15
|
+
# static [string]$AuthorizationString = $(Get-Content $scriptPath/authorization-settings.json -Raw | Out-String | ConvertFrom-Json).Base64PAT
|
|
16
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
<#
|
|
2
|
+
===================== Build =====================
|
|
3
|
+
.Description
|
|
4
|
+
This module contains functions that perform actions
|
|
5
|
+
on a or more Azure Devops build.
|
|
6
|
+
For more information, please read description of
|
|
7
|
+
each function.
|
|
8
|
+
#>
|
|
9
|
+
|
|
10
|
+
Using module 51DAuthorizationModule
|
|
11
|
+
Using module 51DEnvironmentModule
|
|
12
|
+
|
|
13
|
+
<#
|
|
14
|
+
.Description
|
|
15
|
+
Requeue a test build of a pull request.
|
|
16
|
+
|
|
17
|
+
.Parameter RepositoryName
|
|
18
|
+
Name of a repository
|
|
19
|
+
|
|
20
|
+
.Parameter PullRequestId
|
|
21
|
+
Id number of a pull request
|
|
22
|
+
|
|
23
|
+
.Parameter TeamProjectName
|
|
24
|
+
Name ofthe repository team project
|
|
25
|
+
|
|
26
|
+
.Outputs true or false
|
|
27
|
+
#>
|
|
28
|
+
function Restart-TestBuild {
|
|
29
|
+
param (
|
|
30
|
+
[Parameter(Mandatory)]
|
|
31
|
+
[string]$RepositoryName,
|
|
32
|
+
[Parameter(Mandatory)]
|
|
33
|
+
[int32]$PullRequestId,
|
|
34
|
+
[Parameter(Mandatory)]
|
|
35
|
+
[string]$TeamProjectName
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# Get the merge branch of the pull request
|
|
39
|
+
$ref = Get-MergeBranchName -PullRequestId $PullRequestId
|
|
40
|
+
|
|
41
|
+
# Obtain test pipeline id of a repository.
|
|
42
|
+
$pipelineId = Get-PipelineId -Name "$RepositoryName-test" -TeamProjectName $TeamProjectName
|
|
43
|
+
if ($pipelineId -eq $null) {
|
|
44
|
+
Write-Host "# ERROR: Failed to get pipeline id"
|
|
45
|
+
return $false
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# Get all runs for the pipeline.
|
|
49
|
+
$url = "$([EnvironmentHandler]::GetEnvironmentVariable($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI))$($TeamProjectName)/_apis/build/builds?api-version=6.0"
|
|
50
|
+
$jsonBody = @"
|
|
51
|
+
{
|
|
52
|
+
"definition" : {
|
|
53
|
+
"id" : $pipelineId
|
|
54
|
+
},
|
|
55
|
+
"sourceBranch" : "$ref"
|
|
56
|
+
}
|
|
57
|
+
"@
|
|
58
|
+
|
|
59
|
+
$response = Invoke-WebRequest `
|
|
60
|
+
-URI $url `
|
|
61
|
+
-Headers @{
|
|
62
|
+
Authorization = "$([Authorization]::AuthorizationString)"
|
|
63
|
+
} `
|
|
64
|
+
-Method POST `
|
|
65
|
+
-ContentType "application/json" `
|
|
66
|
+
-Body $jsonBody
|
|
67
|
+
|
|
68
|
+
return $(Test-RestResponse `
|
|
69
|
+
-Response $response `
|
|
70
|
+
-ErrorMessage "Failed to rerun the test pipeline for pull request $PullRequestId.")
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
<#
|
|
74
|
+
.Description
|
|
75
|
+
Requeue a test build of a pull request.
|
|
76
|
+
|
|
77
|
+
.Parameter BuildId
|
|
78
|
+
Id number of a build.
|
|
79
|
+
|
|
80
|
+
.Parameter TeamProjectName
|
|
81
|
+
Name ofthe repository team project
|
|
82
|
+
|
|
83
|
+
.Outputs Build object.
|
|
84
|
+
#>
|
|
85
|
+
function Get-Build {
|
|
86
|
+
param (
|
|
87
|
+
[Parameter(Mandatory)]
|
|
88
|
+
[int32]$BuildId,
|
|
89
|
+
[Parameter(Mandatory)]
|
|
90
|
+
[string]$TeamProjectName
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
$url = "$([EnvironmentHandler]::GetEnvironmentVariable($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI))$($TeamProjectName)/_apis/build/builds/$($BuildId)?api-version=6.0"
|
|
94
|
+
$response = Invoke-WebRequest `
|
|
95
|
+
-URI $url `
|
|
96
|
+
-Headers @{
|
|
97
|
+
Authorization = "$([Authorization]::AuthorizationString)"
|
|
98
|
+
} `
|
|
99
|
+
-Method GET
|
|
100
|
+
|
|
101
|
+
if ($(Test-RestResponse `
|
|
102
|
+
-Response $response `
|
|
103
|
+
-ErrorMessage "Failed to get build object for build $BuildId.")) {
|
|
104
|
+
$content = $response.content | Out-String | ConvertFrom-Json
|
|
105
|
+
return $content
|
|
106
|
+
} else {
|
|
107
|
+
return $null
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
<#
|
|
112
|
+
.Description
|
|
113
|
+
Cancel all other builds of a pipeline on a certain branch, except the specified build id.
|
|
114
|
+
|
|
115
|
+
.Parameter PipelineName
|
|
116
|
+
Name of a pipeline to check for the builds.
|
|
117
|
+
|
|
118
|
+
.Parameter Branch
|
|
119
|
+
Full reference name of a branch to check if the builds run on.
|
|
120
|
+
|
|
121
|
+
.Parameter CurrentBuildId
|
|
122
|
+
Build id.
|
|
123
|
+
|
|
124
|
+
.Parameter TeamProjectName
|
|
125
|
+
Name ofthe repository team project
|
|
126
|
+
|
|
127
|
+
.Outputs true or false
|
|
128
|
+
#>
|
|
129
|
+
function Stop-PreviousBuilds {
|
|
130
|
+
param (
|
|
131
|
+
[Parameter(Mandatory)]
|
|
132
|
+
[string]$PipelineName,
|
|
133
|
+
[Parameter(Mandatory)]
|
|
134
|
+
[string]$Branch,
|
|
135
|
+
[Parameter(Mandatory)]
|
|
136
|
+
[string]$CurrentBuildId,
|
|
137
|
+
[Parameter(Mandatory)]
|
|
138
|
+
[string]$TeamProjectName
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
Write-Host ""
|
|
142
|
+
Write-Host "# Getting current builds."
|
|
143
|
+
$pipelineId = Get-PipelineId -Name $PipelineName -TeamProjectName $TeamProjectName
|
|
144
|
+
$url = "$([EnvironmentHandler]::GetEnvironmentVariable($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI))$($TeamProjectName)/_apis/build/builds?definitions=$pipelineId&branchName=$Branch&api-version=6.0"
|
|
145
|
+
$response = Invoke-WebRequest `
|
|
146
|
+
-URI $url `
|
|
147
|
+
-Headers @{
|
|
148
|
+
Authorization = "$([Authorization]::AuthorizationString)"
|
|
149
|
+
} `
|
|
150
|
+
-Method GET
|
|
151
|
+
|
|
152
|
+
if ($(Test-RestResponse -Response $response -ErrorMessage "Failed to get all current builds.")) {
|
|
153
|
+
$content = $response.content | Out-String | ConvertFrom-Json
|
|
154
|
+
$buildsToCancel = $content.value.Where({ ($_.status -eq 'inProgress') -and ($_.id -ne $CurrentBuildId) })
|
|
155
|
+
$allCancelled = $true
|
|
156
|
+
|
|
157
|
+
$currentBuild = Get-Build -BuildId $CurrentBuildId -TeamProjectName $TeamProjectName
|
|
158
|
+
if ($currentBuild -eq $null) {
|
|
159
|
+
Write-Host "# ERROR: Failed to obtain current build object."
|
|
160
|
+
return $false
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
$currentBuildTime = Get-Date -Format yyyy-MM-ddTHH-mm-ss-ff $currentBuild.startTime
|
|
164
|
+
foreach ($build in $buildsToCancel) {
|
|
165
|
+
$buildTime = Get-Date -Format yyyy-MM-ddTHH-mm-ss-ff $build.startTime
|
|
166
|
+
if ($buildTime -lt $currentBuildTime) {
|
|
167
|
+
Write-Host ""
|
|
168
|
+
Write-Host "# Cancelling build $($build.id)."
|
|
169
|
+
$body = @"
|
|
170
|
+
{
|
|
171
|
+
"id" : $($build.id),
|
|
172
|
+
"status" : "cancelling"
|
|
173
|
+
}
|
|
174
|
+
"@
|
|
175
|
+
|
|
176
|
+
$url = "$([EnvironmentHandler]::GetEnvironmentVariable($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI))$($TeamProjectName)/_apis/build/builds/$($build.id)?api-version=6.0"
|
|
177
|
+
$cancellingResponse = Invoke-WebRequest `
|
|
178
|
+
-URI $url `
|
|
179
|
+
-Headers @{
|
|
180
|
+
Authorization = "$([Authorization]::AuthorizationString)"
|
|
181
|
+
} `
|
|
182
|
+
-Method PATCH `
|
|
183
|
+
-ContentType "application/json" `
|
|
184
|
+
-Body $body
|
|
185
|
+
|
|
186
|
+
if ($(Test-RestResponse -Response $cancellingResponse -ErrorMessage "Failed to cancle build $($build.id)")) {
|
|
187
|
+
Write-Host "# SUCCESS"
|
|
188
|
+
} else {
|
|
189
|
+
Write-Host "# FAIL"
|
|
190
|
+
$allCancelled = $false
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return $allCancelled
|
|
195
|
+
}
|
|
196
|
+
return $false
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
Export-ModuleMember -Function Restart-TestBuild
|
|
200
|
+
Export-ModuleMember -Function Stop-PreviousBuilds
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<#
|
|
2
|
+
==================== Deploy =====================
|
|
3
|
+
.Description
|
|
4
|
+
This module contains functions to aid with deployment to Azure Services.
|
|
5
|
+
#>
|
|
6
|
+
|
|
7
|
+
# Get HTTP status where querying a Uri, return even if the client throws an
|
|
8
|
+
# exception.
|
|
9
|
+
function Get-StatusCode {
|
|
10
|
+
|
|
11
|
+
param(
|
|
12
|
+
[string]$Uri
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
try{
|
|
16
|
+
(Invoke-WebRequest -Uri $Uri -UseBasicParsing -DisableKeepAlive).StatusCode
|
|
17
|
+
}
|
|
18
|
+
catch [Net.WebException]
|
|
19
|
+
{
|
|
20
|
+
[int]$_.Exception.Response.StatusCode
|
|
21
|
+
}
|
|
22
|
+
catch [Exception]
|
|
23
|
+
{
|
|
24
|
+
return 0
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
# Check if a service has started by polling an endoint, if the number of retrys
|
|
29
|
+
# has been exhausted and the service is not running (no 200 status code returned)
|
|
30
|
+
# then exit with status code 1.
|
|
31
|
+
function Get-SlotStatus {
|
|
32
|
+
param (
|
|
33
|
+
# The URI of the service to test, e.g. https://51degrees.com
|
|
34
|
+
[Parameter(Mandatory=$true)]
|
|
35
|
+
[string]$Uri,
|
|
36
|
+
|
|
37
|
+
# The number of tries before aborting the test.
|
|
38
|
+
[Parameter(Mandatory=$true)]
|
|
39
|
+
[int]$NumberOfTries,
|
|
40
|
+
|
|
41
|
+
# The delay between tries in seconds.
|
|
42
|
+
[Parameter(Mandatory=$true)]
|
|
43
|
+
[int]$SecondsBetweenTries
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
# Wait for the service to start
|
|
47
|
+
Write-Host -NoNewline "Waiting for response from $Uri "
|
|
48
|
+
|
|
49
|
+
$Tries = 0
|
|
50
|
+
$HTTP_Status = Get-StatusCode -Uri $Uri -Path $Path
|
|
51
|
+
While ($HTTP_Status -ne 200 -And $Tries -le $NumberOfTries) {
|
|
52
|
+
Start-Sleep -Seconds $SecondsBetweenTries
|
|
53
|
+
$Tries = $Tries +1
|
|
54
|
+
$HTTP_Status = Get-StatusCode -Uri $Uri -Path $Path
|
|
55
|
+
Write-Host -NoNewLine "."
|
|
56
|
+
}
|
|
57
|
+
Write-Host ""
|
|
58
|
+
# Exit if service is not accepting requests
|
|
59
|
+
if($HTTP_Status -ne 200) {
|
|
60
|
+
Write-Host "Service is not accepting requests."
|
|
61
|
+
exit 1
|
|
62
|
+
}
|
|
63
|
+
Write-Host "Service has started"
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
Export-ModuleMember -Function Get-SlotStatus
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<#
|
|
2
|
+
==================== Download =====================
|
|
3
|
+
.Description
|
|
4
|
+
This module contains a function to download a data file
|
|
5
|
+
from the 51Degrees Distributor.
|
|
6
|
+
#>
|
|
7
|
+
|
|
8
|
+
# Download a data file.
|
|
9
|
+
function Get-DataFile {
|
|
10
|
+
|
|
11
|
+
param (
|
|
12
|
+
[Parameter(Mandatory=$true)]
|
|
13
|
+
[string]$licenseKey,
|
|
14
|
+
|
|
15
|
+
[Parameter(Mandatory=$true)]
|
|
16
|
+
[string]$dataType,
|
|
17
|
+
|
|
18
|
+
[Parameter(Mandatory=$true)]
|
|
19
|
+
[string]$product,
|
|
20
|
+
|
|
21
|
+
[Parameter(Mandatory=$true)]
|
|
22
|
+
[string]$fullFilePath
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
Add-Type -AssemblyName System.Net.Http
|
|
26
|
+
|
|
27
|
+
$webClient = New-Object System.Net.Http.HttpClient;
|
|
28
|
+
$webClient.Timeout = New-TimeSpan -Seconds 240
|
|
29
|
+
$url ="https://distributor.51degrees.com/api/v2/download?LicenseKeys=$($licenseKey)&Type=$($dataType)&Download=True&Product=$($product)"
|
|
30
|
+
$start_time = Get-Date
|
|
31
|
+
$complete = $false
|
|
32
|
+
$tryCount = 0
|
|
33
|
+
|
|
34
|
+
DO
|
|
35
|
+
{
|
|
36
|
+
$tryCount++;
|
|
37
|
+
Write-Host "Attempt: $tryCount"
|
|
38
|
+
|
|
39
|
+
try
|
|
40
|
+
{
|
|
41
|
+
# Get download stream
|
|
42
|
+
$stream = $webClient.GetStreamAsync($url)
|
|
43
|
+
$stream.ConfigureAwait($false) > $null
|
|
44
|
+
if ($null -ne $stream.Exception){ throw $stream.Exception }
|
|
45
|
+
|
|
46
|
+
# Save stream to path
|
|
47
|
+
try
|
|
48
|
+
{
|
|
49
|
+
$fileStream = [System.IO.File]::Create($fullFilePath)
|
|
50
|
+
$stream.Result.CopyTo($fileStream)
|
|
51
|
+
$complete = $true
|
|
52
|
+
}
|
|
53
|
+
finally
|
|
54
|
+
{
|
|
55
|
+
if ($null -ne $fileStream){ $fileStream.Dispose() }
|
|
56
|
+
if (($null -ne $stream) -and ($stream.IsCompleted -eq $true)){ $stream.Dispose() }
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch
|
|
60
|
+
{
|
|
61
|
+
Write-Host "# ERROR downloading data file:"
|
|
62
|
+
Write-Host $_
|
|
63
|
+
}
|
|
64
|
+
} While (($complete -eq $false) -and ($tryCount -le 10))
|
|
65
|
+
|
|
66
|
+
if($complete -eq $false)
|
|
67
|
+
{
|
|
68
|
+
throw "# ERROR: Data file download failed after $tryCount attempts."
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
Write-Output "Time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)"
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
Export-ModuleMember -Function Get-DataFile
|