From bb51d3acbc559c158e5e5d06e4a5f0e4fee758b0 Mon Sep 17 00:00:00 2001 From: Viral Pandya Date: Fri, 15 Mar 2024 10:04:50 -0700 Subject: [PATCH] Update symbol task with updated packaing-common nuget (#19637) --- .../_buildConfigs/Node20/package-lock.json | 668 ++++++++- .../_buildConfigs/Node20/package.json | 2 +- Tasks/PublishSymbolsV2/package-lock.json | 662 ++++++++- Tasks/PublishSymbolsV2/package.json | 2 +- Tasks/PublishSymbolsV2/task.json | 2 +- Tasks/PublishSymbolsV2/task.loc.json | 2 +- _generated/PublishSymbolsV2.versionmap.txt | 4 +- .../IndexHelpers/DbghelpFunctions.ps1 | 363 +++++ .../IndexHelpers/IndexFunctions.ps1 | 70 + .../IndexHelpers/IndexHelpers.psm1 | 12 + .../IndexHelpers/PdbstrFunctions.ps1 | 97 ++ .../IndexHelpers/SourceFileFunctions.ps1 | 84 ++ .../IndexHelpers/SourceProviderFunctions.ps1 | 89 ++ .../SrcSrvIniContentFunctions.ps1 | 172 +++ .../PreJobExecutionPublishSymbols.ts | 42 + .../PublishSymbolsV2/Publish-Symbols.ps1 | 121 ++ .../PublishHelpers/CommonFunctions.ps1 | 19 + .../PublishHelpers/PublishFunctions.ps1 | 124 ++ .../PublishHelpers/PublishHelpers.psm1 | 13 + .../PublishHelpers/SemaphoreFunctions.ps1 | 139 ++ .../PublishHelpers/UnpublishFunctions.ps1 | 36 + .../PublishSymbolsV2/PublishSymbols.ps1 | 259 ++++ _generated/PublishSymbolsV2/PublishSymbols.ts | 202 +++ .../resources.resjson/de-DE/resources.resjson | 74 + .../resources.resjson/en-US/resources.resjson | 74 + .../resources.resjson/es-ES/resources.resjson | 74 + .../resources.resjson/fr-FR/resources.resjson | 74 + .../resources.resjson/it-IT/resources.resjson | 74 + .../resources.resjson/ja-JP/resources.resjson | 74 + .../resources.resjson/ko-KR/resources.resjson | 74 + .../resources.resjson/ru-RU/resources.resjson | 74 + .../resources.resjson/zh-CN/resources.resjson | 74 + .../resources.resjson/zh-TW/resources.resjson | 74 + .../SymbolClientFunctions.ps1 | 115 ++ .../PublishSymbolsV2/SymbolsCommon.psm1 | 154 ++ .../Add-DbghelpLibrary.LoadsIfNotLoaded.ps1 | 27 + ...dd-DbghelpLibrary.SkipsIfAlreadyLoaded.ps1 | 29 + ...Add-DbghelpLibrary.ThrowsIfDllNotFound.ps1 | 12 + ....WarnsIfDifferentLocationAlreadyLoaded.ps1 | 33 + .../Add-DbghelpLibrary.WarnsIfLoadFails.ps1 | 30 + .../Add-SourceServerStream.InstrumentsPdb.ps1 | 21 + ...rStream.SpeciallyHandlesPdbsWithSpaces.ps1 | 26 + .../Get-ArtifactName.ReturnsCorrectValue.ps1 | 30 + .../Tests/Get-LastTransactionId.GetsId.ps1 | 20 + .../Get-LastTransactionId.WarnsIfNotFound.ps1 | 18 + ...t-SourceFilePaths.ReturnsMultipleFiles.ps1 | 29 + ...-SourceFilePaths.WarnsForNoSourceFiles.ps1 | 25 + ...ceFilePaths.WarnsForSourceFileNotFound.ps1 | 39 + ...lePaths.WarnsForSourceFileNotUnderRoot.ps1 | 35 + ...t-SourceProvider.ReturnsTfsGitProvider.ps1 | 24 + ...ceProvider.WarnsForUnsupportedProvider.ps1 | 17 + .../Get-SymbolBinaryPathCallers.Succeed.ps1 | 88 ++ ...-SymbolClientVersion.SucceedsWithRetry.ps1 | 34 + .../Get-ValidValue.ReturnsWithinRange.ps1 | 30 + .../Invoke-IndexSources.MultipleFiles.ps1 | 57 + ...exSources.ReturnIfSourceProviderIsNull.ps1 | 24 + ...oke-IndexSources.WarnsIfNoSymbolsFiles.ps1 | 14 + ...e-IndexSources.WarnsIfTmpContainsSpace.ps1 | 25 + .../Tests/Invoke-PublishSymbols.Publishes.ps1 | 47 + ...Invoke-PublishSymbols.ReturnsIfNoFiles.ps1 | 28 + .../Invoke-UnpublishSymbols.Unpublishes.ps1 | 29 + _generated/PublishSymbolsV2/Tests/L0.ts | 162 +++ .../PublishSymbolsV2/Tests/L0NetCore.ts | 26 + ...ock-Semaphore.CleansUpExpiredSemaphore.ps1 | 35 + .../Tests/Lock-Semaphore.CreatesSemaphore.ps1 | 33 + .../Lock-Semaphore.ReachesMaxWaitTime.ps1 | 27 + .../Lock-Semaphore.RetriesOnException.ps1 | 33 + .../Tests/New-ResponseFile.CreatesFile.ps1 | 18 + ...-SrcSrvIniContent.ReturnsTfsGitContent.ps1 | 15 + ...ew-SrcSrvIniContent.ReturnsTfvcContent.ps1 | 15 + ...-TfsGitSrcSrvIniContent.FormatsContent.ps1 | 54 + ...ew-TfvcSrcSrvIniContent.FormatsContent.ps1 | 85 ++ .../Tests/PassesArguments.ps1 | 44 + .../Tests/PassesDeleteArguments.ps1 | 34 + .../Tests/PublishSymbolsInternal.ts | 22 + .../Tests/PublishSymbolsMockHelper.ts | 76 + ...ove-SemaphoreFile_Safe.PerformsCleanup.ps1 | 37 + .../Tests/SetsFallbackMaxWaitTime.ps1 | 29 + .../PublishSymbolsV2/Tests/SkipsIndexing.ps1 | 42 + .../Tests/SkipsPublishing.ps1 | 39 + .../Test-SemaphoreMaximumAge.IsCorrect.ps1 | 33 + .../Unlock-Semaphore.PerformsCleanup.ps1 | 26 + _generated/PublishSymbolsV2/clienttoolmain.ts | 47 + _generated/PublishSymbolsV2/icon.png | Bin 0 -> 666 bytes _generated/PublishSymbolsV2/icon.svg | 10 + _generated/PublishSymbolsV2/make.json | 108 ++ _generated/PublishSymbolsV2/package-lock.json | 1277 +++++++++++++++++ _generated/PublishSymbolsV2/package.json | 28 + _generated/PublishSymbolsV2/task.json | 246 ++++ _generated/PublishSymbolsV2/task.loc.json | 246 ++++ _generated/PublishSymbolsV2/tsconfig.json | 11 + .../PublishSymbolsV2_Node20/package-lock.json | 668 ++++++++- .../PublishSymbolsV2_Node20/package.json | 2 +- _generated/PublishSymbolsV2_Node20/task.json | 6 +- .../PublishSymbolsV2_Node20/task.loc.json | 6 +- 95 files changed, 8454 insertions(+), 70 deletions(-) create mode 100644 _generated/PublishSymbolsV2/IndexHelpers/DbghelpFunctions.ps1 create mode 100644 _generated/PublishSymbolsV2/IndexHelpers/IndexFunctions.ps1 create mode 100644 _generated/PublishSymbolsV2/IndexHelpers/IndexHelpers.psm1 create mode 100644 _generated/PublishSymbolsV2/IndexHelpers/PdbstrFunctions.ps1 create mode 100644 _generated/PublishSymbolsV2/IndexHelpers/SourceFileFunctions.ps1 create mode 100644 _generated/PublishSymbolsV2/IndexHelpers/SourceProviderFunctions.ps1 create mode 100644 _generated/PublishSymbolsV2/IndexHelpers/SrcSrvIniContentFunctions.ps1 create mode 100644 _generated/PublishSymbolsV2/PreJobExecutionPublishSymbols.ts create mode 100644 _generated/PublishSymbolsV2/Publish-Symbols.ps1 create mode 100644 _generated/PublishSymbolsV2/PublishHelpers/CommonFunctions.ps1 create mode 100644 _generated/PublishSymbolsV2/PublishHelpers/PublishFunctions.ps1 create mode 100644 _generated/PublishSymbolsV2/PublishHelpers/PublishHelpers.psm1 create mode 100644 _generated/PublishSymbolsV2/PublishHelpers/SemaphoreFunctions.ps1 create mode 100644 _generated/PublishSymbolsV2/PublishHelpers/UnpublishFunctions.ps1 create mode 100644 _generated/PublishSymbolsV2/PublishSymbols.ps1 create mode 100644 _generated/PublishSymbolsV2/PublishSymbols.ts create mode 100644 _generated/PublishSymbolsV2/Strings/resources.resjson/de-DE/resources.resjson create mode 100644 _generated/PublishSymbolsV2/Strings/resources.resjson/en-US/resources.resjson create mode 100644 _generated/PublishSymbolsV2/Strings/resources.resjson/es-ES/resources.resjson create mode 100644 _generated/PublishSymbolsV2/Strings/resources.resjson/fr-FR/resources.resjson create mode 100644 _generated/PublishSymbolsV2/Strings/resources.resjson/it-IT/resources.resjson create mode 100644 _generated/PublishSymbolsV2/Strings/resources.resjson/ja-JP/resources.resjson create mode 100644 _generated/PublishSymbolsV2/Strings/resources.resjson/ko-KR/resources.resjson create mode 100644 _generated/PublishSymbolsV2/Strings/resources.resjson/ru-RU/resources.resjson create mode 100644 _generated/PublishSymbolsV2/Strings/resources.resjson/zh-CN/resources.resjson create mode 100644 _generated/PublishSymbolsV2/Strings/resources.resjson/zh-TW/resources.resjson create mode 100644 _generated/PublishSymbolsV2/SymbolClientFunctions.ps1 create mode 100644 _generated/PublishSymbolsV2/SymbolsCommon.psm1 create mode 100644 _generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.LoadsIfNotLoaded.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.SkipsIfAlreadyLoaded.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.ThrowsIfDllNotFound.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.WarnsIfDifferentLocationAlreadyLoaded.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.WarnsIfLoadFails.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Add-SourceServerStream.InstrumentsPdb.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Add-SourceServerStream.SpeciallyHandlesPdbsWithSpaces.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Get-ArtifactName.ReturnsCorrectValue.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Get-LastTransactionId.GetsId.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Get-LastTransactionId.WarnsIfNotFound.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.ReturnsMultipleFiles.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.WarnsForNoSourceFiles.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.WarnsForSourceFileNotFound.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.WarnsForSourceFileNotUnderRoot.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Get-SourceProvider.ReturnsTfsGitProvider.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Get-SourceProvider.WarnsForUnsupportedProvider.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Get-SymbolBinaryPathCallers.Succeed.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Get-SymbolClientVersion.SucceedsWithRetry.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Get-ValidValue.ReturnsWithinRange.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Invoke-IndexSources.MultipleFiles.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Invoke-IndexSources.ReturnIfSourceProviderIsNull.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Invoke-IndexSources.WarnsIfNoSymbolsFiles.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Invoke-IndexSources.WarnsIfTmpContainsSpace.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Invoke-PublishSymbols.Publishes.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Invoke-PublishSymbols.ReturnsIfNoFiles.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Invoke-UnpublishSymbols.Unpublishes.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/L0.ts create mode 100644 _generated/PublishSymbolsV2/Tests/L0NetCore.ts create mode 100644 _generated/PublishSymbolsV2/Tests/Lock-Semaphore.CleansUpExpiredSemaphore.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Lock-Semaphore.CreatesSemaphore.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Lock-Semaphore.ReachesMaxWaitTime.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Lock-Semaphore.RetriesOnException.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/New-ResponseFile.CreatesFile.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/New-SrcSrvIniContent.ReturnsTfsGitContent.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/New-SrcSrvIniContent.ReturnsTfvcContent.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/New-TfsGitSrcSrvIniContent.FormatsContent.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/New-TfvcSrcSrvIniContent.FormatsContent.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/PassesArguments.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/PassesDeleteArguments.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/PublishSymbolsInternal.ts create mode 100644 _generated/PublishSymbolsV2/Tests/PublishSymbolsMockHelper.ts create mode 100644 _generated/PublishSymbolsV2/Tests/Remove-SemaphoreFile_Safe.PerformsCleanup.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/SetsFallbackMaxWaitTime.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/SkipsIndexing.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/SkipsPublishing.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Test-SemaphoreMaximumAge.IsCorrect.ps1 create mode 100644 _generated/PublishSymbolsV2/Tests/Unlock-Semaphore.PerformsCleanup.ps1 create mode 100644 _generated/PublishSymbolsV2/clienttoolmain.ts create mode 100644 _generated/PublishSymbolsV2/icon.png create mode 100644 _generated/PublishSymbolsV2/icon.svg create mode 100644 _generated/PublishSymbolsV2/make.json create mode 100644 _generated/PublishSymbolsV2/package-lock.json create mode 100644 _generated/PublishSymbolsV2/package.json create mode 100644 _generated/PublishSymbolsV2/task.json create mode 100644 _generated/PublishSymbolsV2/task.loc.json create mode 100644 _generated/PublishSymbolsV2/tsconfig.json diff --git a/Tasks/PublishSymbolsV2/_buildConfigs/Node20/package-lock.json b/Tasks/PublishSymbolsV2/_buildConfigs/Node20/package-lock.json index 3132a20c4521..919200b0597d 100644 --- a/Tasks/PublishSymbolsV2/_buildConfigs/Node20/package-lock.json +++ b/Tasks/PublishSymbolsV2/_buildConfigs/Node20/package-lock.json @@ -22,11 +22,6 @@ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" }, - "@types/mockery": { - "version": "1.4.29", - "resolved": "https://registry.npmjs.org/@types/mockery/-/mockery-1.4.29.tgz", - "integrity": "sha512-SwFMxO68Z6ERGFpPYBdmgfS5LloELzY16h/PMAhnxMog91JcHI5AJjW0HN56cGUPhV0nDb8xNWsJkhuDzr4lAQ==" - }, "@types/node": { "version": "20.8.10", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", @@ -50,6 +45,11 @@ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.11.tgz", "integrity": "sha512-CJNkbEu4IdVuBMRVaNC2GjASgJK7ziqDlVXWuJ1pvhOLADl7nzxhTKjHRdOmo2SuXuygcWBmzgYgn9foTX0UiA==" }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + }, "adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -63,6 +63,33 @@ "debug": "4" } }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -109,37 +136,37 @@ } }, "azure-pipelines-tasks-packaging-common": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-packaging-common/-/azure-pipelines-tasks-packaging-common-3.229.0.tgz", - "integrity": "sha512-AoDdqgo9dBLrL7xgGorbVgV5+VSwwxrp01tVaawVBkmW9iTIh1k5SdpbeHHWg8TzbTHWXQsBZeHjdVYGVU72hQ==", + "version": "3.236.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-packaging-common/-/azure-pipelines-tasks-packaging-common-3.236.0.tgz", + "integrity": "sha512-ndG/0JZ5vkAmNC+sEqgYoxB2/4EQQ7I0g9QDGBBwa0kRzxf28vEUf6FijsSUUM6RsVoVnNVqQKwnSwCE+0Krng==", "requires": { "@types/ini": "1.3.30", "@types/ltx": "2.8.0", "@types/mocha": "^5.2.6", - "@types/mockery": "1.4.29", "@types/node": "^16.11.39", "@types/q": "1.5.2", "adm-zip": "^0.4.11", "azure-devops-node-api": "10.2.2", - "azure-pipelines-task-lib": "^4.0.0-preview", - "azure-pipelines-tool-lib": "^2.0.0-preview", + "azure-pipelines-task-lib": "^4.9.0", + "azure-pipelines-tool-lib": "^2.0.7", "ini": "^1.3.8", "ip-address": "^5.8.9", "ltx": "^2.6.2", + "mocha": "^8.4.0", "q": "^1.5.0", "semver": "^5.5.0", "typed-rest-client": "1.8.4" }, "dependencies": { "@types/node": { - "version": "16.18.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.60.tgz", - "integrity": "sha512-ZUGPWx5vKfN+G2/yN7pcSNLkIkXEvlwNaJEd4e0ppX7W2S8XAkdc/37hM4OUNJB9sa0p12AOvGvxL4JCPiz9DA==" + "version": "16.18.89", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.89.tgz", + "integrity": "sha512-QlrE8QI5z62nfnkiUZysUsAaxWaTMoGqFVcB3PvK1WxJ0c699bacErV4Fabe9Hki6ZnaHalgzihLbTl2d34XfQ==" }, "azure-pipelines-task-lib": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.7.0.tgz", - "integrity": "sha512-5MctDC1Bt7eFi9tQTXlikuWRDc2MenCNruMsEwcKuXqBj1ZY+fA/D+E1DbE0Qi2u8kl1p6szT0we8k6RHSOe/w==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.10.0.tgz", + "integrity": "sha512-/j5nwVEPYx/WV/5H66BuMK3ubrKYFgbFc0yPmEwfXvDwNbgXeIHtcXXZGHiCVq2q+JmHcFYav9sfOrCq2O2Bdg==", "requires": { "adm-zip": "^0.5.10", "deasync": "^0.1.28", @@ -152,9 +179,35 @@ }, "dependencies": { "adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==" + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.11.tgz", + "integrity": "sha512-bSG/kcTQRVyCZ3aOWt3nu/KGIxkfSNi7MXzgKr/MHfKbqPakFESQvaujpUaAG8OQuSroxYMY5vLMpdE6+oND2Q==" + } + } + }, + "azure-pipelines-tool-lib": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.7.tgz", + "integrity": "sha512-1FN67ypNwNhgZllYSm4/pAQdffSfEZJhwW8YeNvm/cKDTS6t6bukTBIkt04c1CsaQe7Ot+eDOVMn41wX1ketXw==", + "requires": { + "@types/semver": "^5.3.0", + "@types/uuid": "^3.4.5", + "azure-pipelines-task-lib": "^4.1.0", + "semver": "^5.7.0", + "semver-compare": "^1.0.0", + "typed-rest-client": "^1.8.6", + "uuid": "^3.3.2" + }, + "dependencies": { + "typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "requires": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } } } } @@ -250,6 +303,11 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -267,6 +325,19 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -276,6 +347,98 @@ "get-intrinsic": "^1.0.2" } }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -298,6 +461,31 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -308,6 +496,28 @@ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, "follow-redirects": { "version": "1.15.4", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", @@ -318,11 +528,22 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, "get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", @@ -357,11 +578,29 @@ } } }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + }, "has": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==" }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, "has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", @@ -387,6 +626,11 @@ } } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -430,6 +674,14 @@ "sprintf-js": "1.1.2" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -438,6 +690,39 @@ "hasown": "^2.0.0" } }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", @@ -452,11 +737,27 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "requires": { + "chalk": "^4.0.0" + } + }, "ltx": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/ltx/-/ltx-2.10.0.tgz", @@ -486,11 +787,104 @@ "brace-expansion": "^1.1.7" } }, + "mocha": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" + }, "node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", @@ -507,6 +901,11 @@ "sanitize-filename": "^1.6.3" } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -520,6 +919,27 @@ "wrappy": "1" } }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -530,6 +950,11 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -543,6 +968,22 @@ "side-channel": "^1.0.4" } }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -551,6 +992,11 @@ "resolve": "^1.1.6" } }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, "resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -561,6 +1007,11 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, "sanitize-filename": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", @@ -579,6 +1030,14 @@ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "requires": { + "randombytes": "^2.1.0" + } + }, "shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", @@ -604,11 +1063,49 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, "truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -658,10 +1155,141 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/Tasks/PublishSymbolsV2/_buildConfigs/Node20/package.json b/Tasks/PublishSymbolsV2/_buildConfigs/Node20/package.json index f5f4d14765a7..585f889ebda7 100644 --- a/Tasks/PublishSymbolsV2/_buildConfigs/Node20/package.json +++ b/Tasks/PublishSymbolsV2/_buildConfigs/Node20/package.json @@ -19,7 +19,7 @@ "dependencies": { "@types/node": "^20.3.1", "azure-pipelines-task-lib": "^5.0.1-preview.0", - "azure-pipelines-tasks-packaging-common": "^3.229.0", + "azure-pipelines-tasks-packaging-common": "^3.236.0", "azure-pipelines-tasks-utility-common": "^3.225.0" }, "devDependencies": { diff --git a/Tasks/PublishSymbolsV2/package-lock.json b/Tasks/PublishSymbolsV2/package-lock.json index a077594cf62b..29d673d0cef7 100644 --- a/Tasks/PublishSymbolsV2/package-lock.json +++ b/Tasks/PublishSymbolsV2/package-lock.json @@ -22,11 +22,6 @@ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" }, - "@types/mockery": { - "version": "1.4.29", - "resolved": "https://registry.npmjs.org/@types/mockery/-/mockery-1.4.29.tgz", - "integrity": "sha512-SwFMxO68Z6ERGFpPYBdmgfS5LloELzY16h/PMAhnxMog91JcHI5AJjW0HN56cGUPhV0nDb8xNWsJkhuDzr4lAQ==" - }, "@types/node": { "version": "16.18.57", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.57.tgz", @@ -47,6 +42,11 @@ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.11.tgz", "integrity": "sha512-CJNkbEu4IdVuBMRVaNC2GjASgJK7ziqDlVXWuJ1pvhOLADl7nzxhTKjHRdOmo2SuXuygcWBmzgYgn9foTX0UiA==" }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + }, "adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -60,6 +60,33 @@ "debug": "4" } }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -106,32 +133,32 @@ } }, "azure-pipelines-tasks-packaging-common": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-packaging-common/-/azure-pipelines-tasks-packaging-common-3.229.0.tgz", - "integrity": "sha512-AoDdqgo9dBLrL7xgGorbVgV5+VSwwxrp01tVaawVBkmW9iTIh1k5SdpbeHHWg8TzbTHWXQsBZeHjdVYGVU72hQ==", + "version": "3.236.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-packaging-common/-/azure-pipelines-tasks-packaging-common-3.236.0.tgz", + "integrity": "sha512-ndG/0JZ5vkAmNC+sEqgYoxB2/4EQQ7I0g9QDGBBwa0kRzxf28vEUf6FijsSUUM6RsVoVnNVqQKwnSwCE+0Krng==", "requires": { "@types/ini": "1.3.30", "@types/ltx": "2.8.0", "@types/mocha": "^5.2.6", - "@types/mockery": "1.4.29", "@types/node": "^16.11.39", "@types/q": "1.5.2", "adm-zip": "^0.4.11", "azure-devops-node-api": "10.2.2", - "azure-pipelines-task-lib": "^4.0.0-preview", - "azure-pipelines-tool-lib": "^2.0.0-preview", + "azure-pipelines-task-lib": "^4.9.0", + "azure-pipelines-tool-lib": "^2.0.7", "ini": "^1.3.8", "ip-address": "^5.8.9", "ltx": "^2.6.2", + "mocha": "^8.4.0", "q": "^1.5.0", "semver": "^5.5.0", "typed-rest-client": "1.8.4" }, "dependencies": { "azure-pipelines-task-lib": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.7.0.tgz", - "integrity": "sha512-5MctDC1Bt7eFi9tQTXlikuWRDc2MenCNruMsEwcKuXqBj1ZY+fA/D+E1DbE0Qi2u8kl1p6szT0we8k6RHSOe/w==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.10.0.tgz", + "integrity": "sha512-/j5nwVEPYx/WV/5H66BuMK3ubrKYFgbFc0yPmEwfXvDwNbgXeIHtcXXZGHiCVq2q+JmHcFYav9sfOrCq2O2Bdg==", "requires": { "adm-zip": "^0.5.10", "deasync": "^0.1.28", @@ -144,9 +171,35 @@ }, "dependencies": { "adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==" + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.11.tgz", + "integrity": "sha512-bSG/kcTQRVyCZ3aOWt3nu/KGIxkfSNi7MXzgKr/MHfKbqPakFESQvaujpUaAG8OQuSroxYMY5vLMpdE6+oND2Q==" + } + } + }, + "azure-pipelines-tool-lib": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.7.tgz", + "integrity": "sha512-1FN67ypNwNhgZllYSm4/pAQdffSfEZJhwW8YeNvm/cKDTS6t6bukTBIkt04c1CsaQe7Ot+eDOVMn41wX1ketXw==", + "requires": { + "@types/semver": "^5.3.0", + "@types/uuid": "^3.4.5", + "azure-pipelines-task-lib": "^4.1.0", + "semver": "^5.7.0", + "semver-compare": "^1.0.0", + "typed-rest-client": "^1.8.6", + "uuid": "^3.3.2" + }, + "dependencies": { + "typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "requires": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } } } } @@ -237,6 +290,11 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -254,6 +312,19 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -263,6 +334,98 @@ "get-intrinsic": "^1.0.2" } }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -285,6 +448,31 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -295,6 +483,28 @@ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, "follow-redirects": { "version": "1.15.4", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", @@ -305,11 +515,22 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, "get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", @@ -344,11 +565,29 @@ } } }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + }, "has": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==" }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, "has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", @@ -374,6 +613,11 @@ } } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -417,6 +661,14 @@ "sprintf-js": "1.1.2" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -425,6 +677,39 @@ "hasown": "^2.0.0" } }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", @@ -439,11 +724,27 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "requires": { + "chalk": "^4.0.0" + } + }, "ltx": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/ltx/-/ltx-2.10.0.tgz", @@ -473,11 +774,104 @@ "brace-expansion": "^1.1.7" } }, + "mocha": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" + }, "node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", @@ -494,6 +888,11 @@ "sanitize-filename": "^1.6.3" } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -507,6 +906,27 @@ "wrappy": "1" } }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -517,6 +937,11 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -530,6 +955,22 @@ "side-channel": "^1.0.4" } }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -538,6 +979,11 @@ "resolve": "^1.1.6" } }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, "resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -548,6 +994,11 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, "sanitize-filename": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", @@ -566,6 +1017,14 @@ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "requires": { + "randombytes": "^2.1.0" + } + }, "shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", @@ -591,11 +1050,49 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, "truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -640,10 +1137,141 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/Tasks/PublishSymbolsV2/package.json b/Tasks/PublishSymbolsV2/package.json index a483d61f44c9..f21c61c782d7 100644 --- a/Tasks/PublishSymbolsV2/package.json +++ b/Tasks/PublishSymbolsV2/package.json @@ -19,7 +19,7 @@ "dependencies": { "@types/node": "^16.11.39", "azure-pipelines-task-lib": "^5.0.1-preview.0", - "azure-pipelines-tasks-packaging-common": "^3.229.0", + "azure-pipelines-tasks-packaging-common": "^3.236.0", "azure-pipelines-tasks-utility-common": "^3.225.0" }, "devDependencies": { diff --git a/Tasks/PublishSymbolsV2/task.json b/Tasks/PublishSymbolsV2/task.json index fb803ff96d3e..18454d6d52e4 100644 --- a/Tasks/PublishSymbolsV2/task.json +++ b/Tasks/PublishSymbolsV2/task.json @@ -13,7 +13,7 @@ "preview": false, "version": { "Major": 2, - "Minor": 234, + "Minor": 237, "Patch": 0 }, "minimumAgentVersion": "2.144.0", diff --git a/Tasks/PublishSymbolsV2/task.loc.json b/Tasks/PublishSymbolsV2/task.loc.json index f859cf2e78b4..8e12ada42143 100644 --- a/Tasks/PublishSymbolsV2/task.loc.json +++ b/Tasks/PublishSymbolsV2/task.loc.json @@ -13,7 +13,7 @@ "preview": false, "version": { "Major": 2, - "Minor": 234, + "Minor": 237, "Patch": 0 }, "minimumAgentVersion": "2.144.0", diff --git a/_generated/PublishSymbolsV2.versionmap.txt b/_generated/PublishSymbolsV2.versionmap.txt index 56d671f5dec4..3b7a1723c403 100644 --- a/_generated/PublishSymbolsV2.versionmap.txt +++ b/_generated/PublishSymbolsV2.versionmap.txt @@ -1,2 +1,2 @@ -Default|2.234.0 -Node20_229_14|2.234.1 +Default|2.237.0 +Node20_229_14|2.237.1 diff --git a/_generated/PublishSymbolsV2/IndexHelpers/DbghelpFunctions.ps1 b/_generated/PublishSymbolsV2/IndexHelpers/DbghelpFunctions.ps1 new file mode 100644 index 000000000000..1602a2c1b971 --- /dev/null +++ b/_generated/PublishSymbolsV2/IndexHelpers/DbghelpFunctions.ps1 @@ -0,0 +1,363 @@ +function Add-DbghelpLibrary { + [CmdletBinding()] + param() + + Trace-VstsEnteringInvocation $MyInvocation + + $dbghelpPath = Get-DbghelpPath + + [bool]$isLoaded = $false + foreach ($module in (Get-CurrentProcess).Modules) { + if ($module.ModuleName -eq 'dbghelp.dll') { + $isLoaded = $true + if ($module.FileName -eq $dbghelpPath) { + Write-Verbose "Module dbghelp.dll is already loaded from the expected file path: $dbghelpPath" + } else { + Write-Warning (Get-VstsLocString -Key UnexpectedDbghelpdllExpected0Actual1 -ArgumentList $dbghelpPath, $module.FileName) + } + + # Don't short-circuit the loop. The module could be loaded more + # than once and we should trace info about each loaded instance. + } + } + + if (!$isLoaded) { + $hModule = Invoke-LoadLibrary -LiteralPath $dbghelpPath + if ($hModule -eq [System.IntPtr]::Zero) { + $errorCode = Get-LastWin32Error + Write-Warning (Get-VstsLocString -Key "FailedToLoadDbghelpDllFrom0ErrorCode1" -ArgumentList $dbghelpPath, $errorCode) + return + } + + $hModule + } + + Trace-VstsLeavingInvocation $MyInvocation +} + +function Get-DbghelpSourceFilePaths { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [string]$SymbolsFilePath) + + $processHandle = [System.Diagnostics.Process]::GetCurrentProcess().Handle + if ($processHandle -eq [System.IntPtr]::Zero) { + throw (New-Win32ErrorMessage -Method 'Process.Handle') + } elseif (![IndexHelpers.Dbghelp.NativeMethods]::SymInitialize($processHandle, $null, $false)) { + throw (New-Win32ErrorMessage -Method 'SymInitialize') + } + + try { + $null = [IndexHelpers.Dbghelp.NativeMethods]::SymSetOptions([IndexHelpers.Dbghelp.SymOptions]::SYMOPT_NO_IMAGE_SEARCH) + [uint64]$moduleBase = 0 + + # Open the symbols file. + [System.IO.FileStream]$fs = New-Object System.IO.FileStream( + $SymbolsFilePath, + [System.IO.FileMode]::Open, + [System.IO.FileAccess]::Read, + [System.IO.FileShare]::Read, + 4096, # bufferSize, + [System.IO.FileOptions]::None) + try { + try { + [Microsoft.Win32.SafeHandles.SafeFileHandle]$fileHandle = $fs.SafeFileHandle + if ($fileHandle.IsInvalid) { + throw (New-Win32ErrorMessage -Method 'SafeFileHandle.IsInvalid') + } + + # SymSrvGetFileIndexes extracts symbol server index information from executable + # images and pdbs. It will return false if the file is not one of them. + [guid]$guid = [guid]::Empty + [uint32]$val1 = 0 + [uint32]$val2 = 0 + if (![IndexHelpers.Dbghelp.NativeMethods]::SymSrvGetFileIndexes($SymbolsFilePath, [ref]$guid, [ref]$val1, [ref]$val2, 0)) { + throw (New-IndexedSourcesNotRetrievedMessage -SymbolsFilePath $SymbolsFilePath -Message 'Symbol indexes could not be retrieved.') + } + + # Load the symbols file in DbgHelp. + $moduleName = [System.IO.Path]::GetFileNameWithoutExtension($SymbolsFilePath) + $moduleBase = [IndexHelpers.Dbghelp.NativeMethods]::SymLoadModuleEx( + $processHandle, + $fileHandle, + $SymbolsFilePath, + $moduleName, + 1000000, + 1, + [System.IntPtr]::Zero, + 0) + } finally { + if ($fs -ne $null) { + $fs.Dispose() + } + } + + # Read the module info. Validate the file has symbol information and is a pdb type. + $moduleInfo = New-Object IndexHelpers.Dbghelp.IMAGEHLP_MODULE64 + $moduleInfo.SizeOfStruct = [uint32][System.Runtime.InteropServices.Marshal]::SizeOf($moduleInfo) + if (![IndexHelpers.Dbghelp.NativeMethods]::SymGetModuleInfo64($processHandle, $moduleBase, [ref]$moduleInfo)) { + throw (New-IndexedSourcesNotRetrievedMessage -SymbolsFilePath $SymbolsFilePath -Message 'Symbol information could not be retrieved.') + } elseif ($moduleInfo.SymType -ne [IndexHelpers.Dbghelp.SymType]::SymPdb) { + throw (New-IndexedSourcesNotRetrievedMessage -SymbolsFilePath $SymbolsFilePath -Message 'Symbol is not of type pdb.') + } + + # Enumerate the indexed source files if the pdb file has source information. + if ($moduleInfo.LineNumbers) { + $referencedSourceFiles = New-Object System.Collections.Generic.List[string] + if (![IndexHelpers.Dbghelp.NativeMethods]::SymEnumSourceFilesWrapper($processHandle, $moduleBase, $referencedSourceFiles)) { + throw (New-Win32ErrorMessage -Method 'SymEnumSourceFiles') + } + + return $referencedSourceFiles + } + } finally { + if ($moduleBase -gt 0 -and ![IndexHelpers.Dbghelp.NativeMethods]::SymUnloadModule64($processHandle, $moduleBase)) { + throw (New-Win32ErrorMessage -Method 'SymUnloadModule64') + } + } + } finally { + if (![IndexHelpers.Dbghelp.NativeMethods]::SymCleanup($processHandle)){ + throw (New-Win32ErrorMessage -Method 'SymCleanup') + } + } +} + +function New-IndexedSourcesNotRetrievedMessage { + [CmdletBinding()] + param( + [string]$SymbolsFilePath, + [string]$Message) + + Get-VstsLocString -Key SourceInfoNotRetrievedFrom0Message1 -ArgumentList $SymbolsFilePath, $Message +} + +function New-Win32ErrorMessage { + [CmdletBinding()] + param([string]$Method) + + Get-VstsLocString -Key Win32Error0FromMethod1 -ArgumentList (Get-LastWin32Error), $Method +} + +function Remove-DbghelpLibrary { + [CmdletBinding()] + param($HModule) + + Trace-VstsEnteringInvocation $MyInvocation + try { + if (!$HModule) { + return + } + + if (![IndexHelpers.Dbghelp.NativeMethods]::FreeLibrary($HModule)) { + $errorCode = [System.Runtime.InteropServices.Marshal]::GetLastWin32Error() + Write-Warning (Get-VstsLocString -Key FreeLibraryDbghelpDllError0 -ArgumentList $errorCode) + } + } finally { + Trace-VstsLeavingInvocation $MyInvocation + } +} + +######################################## +# Wrapper functions. +######################################## +function Get-CurrentProcess { + [CmdletBinding()] + param() + + [System.Diagnostics.Process]::GetCurrentProcess() +} + +function Get-LastWin32Error { + [System.Runtime.InteropServices.Marshal]::GetLastWin32Error() +} + +function Invoke-LoadLibrary { + [CmdletBinding()] + param($LiteralPath) + + Trace-VstsEnteringInvocation $MyInvocation + try { + [IndexHelpers.Dbghelp.NativeMethods]::LoadLibrary($LiteralPath) + } finally { + Trace-VstsLeavingInvocation $MyInvocation + } +} + +######################################## +# Types. +######################################## +# If the type has already been loaded once, then it is not loaded again. +Write-Verbose "Adding dbghelp native wrappers." +Add-Type -Debug:$false -TypeDefinition @' +namespace IndexHelpers.Dbghelp +{ + using System; + using System.Runtime.InteropServices; + using Microsoft.Win32.SafeHandles; + + public static class NativeMethods + { + [DllImport("kernel32.dll", SetLastError = true)] + public static extern bool FreeLibrary(IntPtr hModule); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr LoadLibrary(string dllToLoad); + + [DllImport("dbghelp.dll", SetLastError = true, CharSet = CharSet.Unicode)] + public static extern bool SymCleanup(IntPtr hProcess); + + [DllImport("dbghelp.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "SymEnumSourceFilesW")] + public static extern bool SymEnumSourceFiles( + IntPtr hProcess, + ulong ModeBase, + string Mask, + SymEnumSourceFilesProc EnumSymbolsCallback, + IntPtr UserContext); + + public static bool SymEnumSourceFilesWrapper( + IntPtr hProcess, + ulong ModeBase, + System.Collections.Generic.List referencedSourceFiles) + { + // Callback that processes the found source file from the pdb + SymEnumSourceFilesProc enumSourceFilesCallBack = delegate(ref SOURCEFILE pSourceFile, IntPtr UserContext) + { + if (pSourceFile.FileName != IntPtr.Zero) + { + referencedSourceFiles.Add(Marshal.PtrToStringUni(pSourceFile.FileName)); + } + + return true; + }; + + return SymEnumSourceFiles(hProcess, ModeBase, null, enumSourceFilesCallBack, IntPtr.Zero); + } + + [DllImport("dbghelp.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "SymGetModuleInfoW64")] + public static extern bool SymGetModuleInfo64( + IntPtr hProcess, + ulong dwAddr, + ref IMAGEHLP_MODULE64 ModuleInfo); + + [DllImport("dbghelp.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "SymInitializeW")] + public static extern bool SymInitialize(IntPtr hProcess, string UserSearchPath, bool fInvadeProcess); + + [DllImport("dbghelp.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "SymLoadModuleExW")] + public static extern ulong SymLoadModuleEx( + IntPtr hProcess, + SafeFileHandle hFile, + string ImageName, + string ModuleName, + ulong BaseOfDll, + uint DllSize, + IntPtr Data, + uint Flags); + + [DllImport("dbghelp.dll", SetLastError = true, CharSet = CharSet.Unicode)] + public static extern SymOptions SymSetOptions(SymOptions SymOptions); + + [DllImport("dbghelp.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "SymSrvGetFileIndexesW")] + public static extern bool SymSrvGetFileIndexes( + string file, + ref Guid Id, + ref uint Val1, + ref uint Val2, + uint Flags); + + [DllImport("dbghelp.dll", SetLastError = true, CharSet = CharSet.Unicode)] + public static extern bool SymUnloadModule64( + IntPtr hProcess, + ulong BaseOfDll); + } + + public delegate bool SymEnumSourceFilesProc( + ref SOURCEFILE pSourceFile, + IntPtr UserContext); + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct IMAGEHLP_MODULE64 + { + public uint SizeOfStruct; + public ulong BaseOfImage; + public uint ImageSize; + public uint TimeDateStamp; + public uint CheckSum; + public uint NumSyms; + public SymType SymType; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] + public string ModuleName; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] + public string ImageName; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] + public string LoadedImageName; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] + public string LoadedPdbName; + public uint CVSig; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 780)] + public string CVData; + public uint PdbSig; + public Guid PdbSig70; + public uint PdbAge; + public bool PdbUnmatched; + public bool DbgUnmatched; + public bool LineNumbers; + public bool GlobalSymbols; + public bool TypeInfo; + public bool SourceIndexed; + public bool Publics; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct SOURCEFILE + { + public ulong ModeBase; + public IntPtr FileName; + } + + [Flags] + public enum SymOptions : uint + { + SYMOPT_ALLOW_ABSOLUTE_SYMBOLS = 0x00000800, + SYMOPT_ALLOW_ZERO_ADDRESS = 0x01000000, + SYMOPT_AUTO_PUBLICS = 0x00010000, + SYMOPT_CASE_INSENSITIVE = 0x00000001, + SYMOPT_DEBUG = 0x80000000, + SYMOPT_DEFERRED_LOADS = 0x00000004, + SYMOPT_DISABLE_SYMSRV_AUTODETECT = 0x02000000, + SYMOPT_EXACT_SYMBOLS = 0x00000400, + SYMOPT_FAIL_CRITICAL_ERRORS = 0x00000200, + SYMOPT_FAVOR_COMPRESSED = 0x00800000, + SYMOPT_FLAT_DIRECTORY = 0x00400000, + SYMOPT_IGNORE_CVREC = 0x00000080, + SYMOPT_IGNORE_IMAGEDIR = 0x00200000, + SYMOPT_IGNORE_NT_SYMPATH = 0x00001000, + SYMOPT_INCLUDE_32BIT_MODULES = 0x00002000, + SYMOPT_LOAD_ANYTHING = 0x00000040, + SYMOPT_LOAD_LINES = 0x00000010, + SYMOPT_NO_CPP = 0x00000008, + SYMOPT_NO_IMAGE_SEARCH = 0x00020000, + SYMOPT_NO_PROMPTS = 0x00080000, + SYMOPT_NO_PUBLICS = 0x00008000, + SYMOPT_NO_UNQUALIFIED_LOADS = 0x00000100, + SYMOPT_OVERWRITE = 0x00100000, + SYMOPT_PUBLICS_ONLY = 0x00004000, + SYMOPT_SECURE = 0x00040000, + SYMOPT_UNDNAME = 0x00000002, + }; + + [Flags] + public enum SymType : uint + { + SymNone, + SymCoff, + SymCv, + SymPdb, + SymExport, + SymDeferred, + SymSym, + SymDia, + SymVirtual, + } +} +'@ diff --git a/_generated/PublishSymbolsV2/IndexHelpers/IndexFunctions.ps1 b/_generated/PublishSymbolsV2/IndexHelpers/IndexFunctions.ps1 new file mode 100644 index 000000000000..6be280f83bf2 --- /dev/null +++ b/_generated/PublishSymbolsV2/IndexHelpers/IndexFunctions.ps1 @@ -0,0 +1,70 @@ +function Invoke-IndexSources { + [CmdletBinding()] + param( + [string[]]$SymbolsFilePaths, + [switch]$TreatNotIndexedAsWarning + ) + + Trace-VstsEnteringInvocation $MyInvocation -Parameter TreatNotIndexedAsWarning + try { + # Validate at least one symbols file. + if (!$SymbolsFilePaths) { + Write-Warning (Get-VstsLocString -Key NoFilesForIndexing); + return + } + + $pdbstrPath = Get-PdbstrPath + + # Warn if spaces in the temp path. + if ("$env:TMP".Contains(' ')) { + Write-Warning (Get-VstsLocString -Key SpacesInTemp) + # Don't short-circuit. Just try anyway even though it will likely fail. + } + + # For consistency with the previous implementation, set the working directory to the TEMP folder + # (even though the temp files are created in TMP) before calling pdbstr.exe. + Push-Location $env:TEMP + $dbghelpModuleHandle = $null + $provider = $null + try { + # Load dbghelp.dll if it is not already loaded. + $dbghelpModuleHandle = Add-DbghelpLibrary + + # Set the provider specific information. + if (!($provider = Get-SourceProvider)) { + return + } + + # Index the source files + foreach ($symbolsFilePath in $SymbolsFilePaths) { + #if (!$symbolsFilePath.EndsWith('.pdb', [System.StringComparison]::OrdinalIgnoreCase)) { + # Write-Verbose "Skipping: $symbolsFilePath" + # continue + #} + + $bytes = Get-Content $symbolsFilePath -Encoding byte -TotalCount 4 + $data = [System.Text.Encoding]::ASCII.GetString($bytes) + if ($data.equals("BSJB")) { + Write-Verbose "Skipping: $symbolsFilePath because it is a Portable PDB" + continue + } + + # Get the source file paths embedded in the symbols file. + [string[]]$sourceFilePaths = Get-SourceFilePaths -SymbolsFilePath $symbolsFilePath -SourcesRootPath $provider.SourcesRootPath -TreatNotIndexedAsWarning:$TreatNotIndexedAsWarning + if (!$sourceFilePaths.Count) { + continue + } + + # Get the content for the source server INI file. + [string]$srcSrvIniContent = New-SrcSrvIniContent -Provider $provider -SourceFilePaths $sourceFilePaths + + # Add the source server info to the symbols file. + Add-SourceServerStream -PdbStrPath $pdbstrPath -SymbolsFilePath $symbolsFilePath -StreamContent $srcSrvIniContent + } + } finally { + Remove-DbghelpLibrary -HModule $dbghelpModuleHandle + } + } finally { + Trace-VstsLeavingInvocation $MyInvocation + } +} diff --git a/_generated/PublishSymbolsV2/IndexHelpers/IndexHelpers.psm1 b/_generated/PublishSymbolsV2/IndexHelpers/IndexHelpers.psm1 new file mode 100644 index 000000000000..0b26f527d083 --- /dev/null +++ b/_generated/PublishSymbolsV2/IndexHelpers/IndexHelpers.psm1 @@ -0,0 +1,12 @@ +#requires -Module SymbolsCommon,VstsTaskSdk + +[CmdletBinding()] +param() + +. $PSScriptRoot\DbghelpFunctions.ps1 +. $PSScriptRoot\IndexFunctions.ps1 +. $PSScriptRoot\PdbstrFunctions.ps1 +. $PSScriptRoot\SourceFileFunctions.ps1 +. $PSScriptRoot\SourceProviderFunctions.ps1 +. $PSScriptRoot\SrcSrvIniContentFunctions.ps1 +Export-ModuleMember -Function 'Invoke-IndexSources' diff --git a/_generated/PublishSymbolsV2/IndexHelpers/PdbstrFunctions.ps1 b/_generated/PublishSymbolsV2/IndexHelpers/PdbstrFunctions.ps1 new file mode 100644 index 000000000000..cec04eff2618 --- /dev/null +++ b/_generated/PublishSymbolsV2/IndexHelpers/PdbstrFunctions.ps1 @@ -0,0 +1,97 @@ +function Add-SourceServerStream { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [string]$PdbStrPath, + + [Parameter(Mandatory = $true)] + [string]$SymbolsFilePath, + + [Parameter(Mandatory = $true)] + [string]$StreamContent + ) + + Trace-VstsEnteringInvocation $MyInvocation -Parameter @( ) + try { + # Create a temp file to store the stream content. + $streamContentFilePath = Get-TempFileName + try { + # For encoding consistency with previous implementation, use File.WriteAllText(...) instead + # of Out-File. From ildasm, it appears WriteAllText uses UTF8 with no BOM. It's impossible + # to use the no-BOM UTF8 encoding with Set-Content or Out-File. Therefore, in order to be + # able to stub out the call, created a small wrapper function instead. + Write-AllText -Path $streamContentFilePath -Content $StreamContent + Write-Verbose "Temp stream content file: $streamContentFilePath" + + # Store the original symbols file path. + [string]$originalSymbolsFilePath = $SymbolsFilePath + try { + # Pdbstr.exe doesn't work with symbols files with a space in the path. If the symbols file + # has a space in file path, then pdbstr.exe just prints the command usage information over + # STDOUT. It doesn't inject the indexing info into the PDB file, doesn't write to STDERR, + # and doesn't return a non-zero exit code. + if ($SymbolsFilePath.Contains(' ')) { + # Create a temp file. + Write-Verbose "Space in path. Copying to temp file." + $SymbolsFilePath = Get-TempFileName + + # If the temp file contains a space in the path, then the Invoke-IndexSources function + # would have already printed a warning. No need to check and warn again here. + + # Copy the original symbols file over the temp file. + Copy-Item -LiteralPath $originalSymbolsFilePath -Destination $SymbolsFilePath + Write-Verbose "Temp symbols file: $SymbolsFilePath" + } + + # Invoke pdbstr.exe. + Invoke-VstsTool -FileName $PdbStrPath -Arguments "-w -p:""$SymbolsFilePath"" -i:""$streamContentFilePath"" -s:srcsrv" -Verbose:$false 2>&1 | + ForEach-Object { + # Pdbstr.exe doesn't seem to ever write to STDERR or return a non-zero + # exit code. Just in case it does, log it as an error. Mainly this is + # just for consistency as that's what would have happened in the previous + # implementation that ran under the legacy PowerShell handler. + # + # It would probably be better to write an error if STDOUT matches the + # command usage. + if ($_ -is [System.Management.Automation.ErrorRecord]) { + Write-Error -ErrorRecord $_ + } else { + Write-Verbose $_ + } + } + + # Copy the temp symbols file back over the original file. + if ($SymbolsFilePath -ne $originalSymbolsFilePath) { + Write-Verbose "Updating original symbols file." + Copy-Item -LiteralPath $SymbolsFilePath -Destination $originalSymbolsFilePath + } + } finally { + # Clean up the temp symbols file. + if ($SymbolsFilePath -ne $originalSymbolsFilePath) { + Write-Verbose "Deleting temp symbols file." + Remove-Item -LiteralPath $SymbolsFilePath + } + } + } finally { + # Clean up the temp stream content file. + Write-Verbose "Deleting temp stream content file." + Remove-Item -LiteralPath $streamContentFilePath + } + } finally { + Trace-VstsLeavingInvocation $MyInvocation + } +} + +######################################## +# Wrapper functions. +######################################## +function Get-TempFileName { + [System.IO.Path]::GetTempFileName() +} + +function Write-AllText { + [CmdletBinding()] + param([string]$Path, [string]$Content) + + [System.IO.File]::WriteAllText($Path, $Content) +} diff --git a/_generated/PublishSymbolsV2/IndexHelpers/SourceFileFunctions.ps1 b/_generated/PublishSymbolsV2/IndexHelpers/SourceFileFunctions.ps1 new file mode 100644 index 000000000000..6cc79c551403 --- /dev/null +++ b/_generated/PublishSymbolsV2/IndexHelpers/SourceFileFunctions.ps1 @@ -0,0 +1,84 @@ +function Get-SourceFilePaths { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [string]$SymbolsFilePath, + [Parameter(Mandatory = $true)] + [string]$SourcesRootPath, + [switch]$TreatNotIndexedAsWarning + ) + + Trace-VstsEnteringInvocation $MyInvocation -Parameter SymbolsFilePath + + # Get the referenced source file paths. + $sourceFilePaths = @(Get-DbghelpSourceFilePaths -SymbolsFilePath $SymbolsFilePath) + if (!$sourceFilePaths.Count) { + # Warn if no source file paths were contained in the PDB file. + [string]$message = Get-VstsLocString -Key NoSourcePathsIn0 -ArgumentList $SymbolsFilePath + if ($TreatNotIndexedAsWarning) { + Write-Warning $message + } else { + Write-Host $message + } + + return + } + + # Make the sources root path end with a trailing slash. + $SourcesRootPath = $SourcesRootPath.TrimEnd('\') + $SourcesRootPath = "$SourcesRootPath\" + + $notUnderSourcesRootPaths = New-Object System.Collections.Generic.List[string] + $notFoundPaths = New-Object System.Collections.Generic.List[string] + $foundPaths = New-Object System.Collections.Generic.List[string] + foreach ($sourceFilePath in $sourceFilePaths) { + $sourceFilePath = $sourceFilePath.Trim() + if (!$sourceFilePath.StartsWith($SourcesRootPath, [System.StringComparison]::OrdinalIgnoreCase)) { + # The source file path is not under sources root. + $notUnderSourcesRootPaths.Add($sourceFilePath) + } else { + + $found = $false; + try { + $found = Test-Path -LiteralPath $sourceFilePath -PathType Leaf + } + catch [System.ArgumentException] { # Path contains invalid characters + Write-Verbose "Skipping source path containing invalid characters: $sourceFilePath" + $found = $false; + } + + if (!$found) { + # The source file does not exist. + $notFoundPaths.Add($sourceFilePath) + } else { + # The source file was found. + $foundPaths.Add($sourceFilePath) + } + } + } + + # Warn if issues. + if ($notUnderSourcesRootPaths.Count -or $notFoundPaths.Count) { + [string]$message = Get-VstsLocString -Key OneOrMoreSourceFilesNotIndexedFor0 -ArgumentList $SymbolsFilePath + if ($TreatNotIndexedAsWarning) { + Write-Warning $message + } else { + Write-Host $message + } + + if ($notUnderSourcesRootPaths.Count) { + Write-Verbose "One or more source files not under sources root directory: $SourcesRootPath" + Trace-VstsPath -Path $notUnderSourcesRootPaths + } + + if ($notFoundPaths.Count) { + Write-Verbose "One or more source files not found." + Trace-VstsPath -Path $notFoundPaths + } + } + + Write-Verbose "Found source files:" + Trace-VstsPath $foundPaths + $foundPaths + Trace-VstsLeavingInvocation $MyInvocation +} diff --git a/_generated/PublishSymbolsV2/IndexHelpers/SourceProviderFunctions.ps1 b/_generated/PublishSymbolsV2/IndexHelpers/SourceProviderFunctions.ps1 new file mode 100644 index 000000000000..c654bbbdd92c --- /dev/null +++ b/_generated/PublishSymbolsV2/IndexHelpers/SourceProviderFunctions.ps1 @@ -0,0 +1,89 @@ +function Get-SourceProvider { + [CmdletBinding()] + param() + + Trace-VstsEnteringInvocation $MyInvocation + $provider = @{ + Name = Get-VstsTaskVariable -Name 'Build.Repository.Provider' -Require + SourcesRootPath = Get-VstsTaskVariable -Name 'Build.SourcesDirectory' -Require + TeamProjectId = Get-VstsTaskVariable -Name 'System.TeamProjectId' -Require + } + $success = $false + try { + if ($provider.Name -eq 'TfsGit') { + $provider.CollectionUrl = (Get-VstsTaskVariable -Name 'System.TeamFoundationCollectionUri' -Require).TrimEnd('/') + $provider.RepoId = Get-VstsTaskVariable -Name 'Build.Repository.Id' -Require + $provider.CommitId = Get-VstsTaskVariable -Name 'Build.SourceVersion' -Require + $success = $true + return New-Object psobject -Property $provider + } + + if ($provider.Name -eq 'TfsVersionControl') { + $versionControlServer = Get-VstsTfsService -TypeName 'Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer' + $provider.Workspace = $versionControlServer.TryGetWorkspace($provider.SourcesRootPath) + if (!$provider.Workspace) { + Write-Verbose "Unable to determine workspace from source folder: $($provider.SourcesRootPath)" + Write-Verbose "Attempting to resolve workspace recursively from locally cached info." + $workspaceInfos = [Microsoft.TeamFoundation.VersionControl.Client.Workstation]::Current.GetLocalWorkspaceInfoRecursively($provider.SourcesRootPath); + if ($workspaceInfos) { + foreach ($workspaceInfo in $workspaceInfos) { + Write-Verbose "Cached workspace info discovered. Server URI: $($workspaceInfo.ServerUri) ; Name: $($workspaceInfo.Name) ; Owner Name: $($workspaceInfo.OwnerName)" + try { + $provider.Workspace = $versionControlServer.GetWorkspace($workspaceInfo) + break + } catch { + Write-Verbose "Determination failed. Exception: $_" + } + } + } + } + + if (!$provider.Workspace) { + Write-Verbose "Attempting to resolve workspace by name." + try { + $provider.Workspace = $versionControlServer.GetWorkspace( + (Get-VstsTaskVariable -Name 'Build.Repository.Tfvc.Workspace' -Require), + '.') + } catch [Microsoft.TeamFoundation.VersionControl.Client.WorkspaceNotFoundException] { + Write-Verbose "Workspace not found." + } catch { + Write-Verbose "Determination failed. Exception: $_" + } + } + + if (!$provider.Workspace) { + Write-Warning (Get-VstsLocString -Key 'UnableToDetermineWorkspaceFromSourceFolder0' -ArgumentList $provider.SourcesRootPath) + return + } + + # When the build service runs on the same box as the AT, we use localhost + # to connect to the AT. This is not appropriate for storing inside of a PDB that will + # be used on another box, so we have to look up a more durable URL. + $locationService = Get-VstsTfsService -TypeName 'Microsoft.TeamFoundation.Framework.Client.ILocationService' + # Retrieve a URI to the location service. + $provider.PublicCollectionUrl = [string]$locationService.LocationForAccessMapping( + [Microsoft.TeamFoundation.ServiceInterfaces]::LocationService, + [Microsoft.TeamFoundation.Framework.Common.LocationServiceConstants]::SelfReferenceLocationServiceIdentifier, + $locationService.DefaultAccessMapping) + # Remove the location service part to form a collection URI. + if ($provider.PublicCollectionUrl.EndsWith( + [Microsoft.TeamFoundation.Framework.Common.LocationServiceConstants]::CollectionLocationServiceRelativePath, + [System.StringComparison]::OrdinalIgnoreCase)) { + $provider.PublicCollectionUrl = $provider.PublicCollectionUrl.Substring( + 0, + $provider.PublicCollectionUrl.Length - [Microsoft.TeamFoundation.Framework.Common.LocationServiceConstants]::CollectionLocationServiceRelativePath.Length) + } else { + # TODO: SHOULD THIS REVERT TO ENV VAR? + } + + $success = $true + return New-Object psobject -Property $provider + } + + Write-Warning (Get-VstsLocString -Key UnsupportedSourceProvider0 -ArgumentList $provider.Name) + Write-Warning (Get-VstsLocString -Key UnableToIndexSources) + return + } finally { + Trace-VstsLeavingInvocation $MyInvocation + } +} diff --git a/_generated/PublishSymbolsV2/IndexHelpers/SrcSrvIniContentFunctions.ps1 b/_generated/PublishSymbolsV2/IndexHelpers/SrcSrvIniContentFunctions.ps1 new file mode 100644 index 000000000000..b17eaff69c29 --- /dev/null +++ b/_generated/PublishSymbolsV2/IndexHelpers/SrcSrvIniContentFunctions.ps1 @@ -0,0 +1,172 @@ +function New-SrcSrvIniContent { + [CmdletBinding()] + param($Provider, $SourceFilePaths) + + Trace-VstsEnteringInvocation $MyInvocation -Parameter @( ) + try { + switch ($Provider.Name) { + 'TfsGit' { + $srcSrvIniContent = New-TfsGitSrcSrvIniContent -Provider $Provider -SourceFilePaths $SourceFilePaths + break + } + 'TfsVersionControl' { + $srcSrvIniContent = New-TfvcSrcSrvIniContent -Provider $Provider -SourceFilePaths $SourceFilePaths + break + } + default { + throw 'Not supported.' # Execution should never reach here. + } + } + + # For consistency with previous implementation, append a blank line so that the content + # gets written with a trailing new-line. + [string[]]$srcSrvIniContent = @($srcSrvIniContent) + '' + [string]::Join([System.Environment]::NewLine, $srcSrvIniContent) + } finally { + Trace-VstsLeavingInvocation $MyInvocation + } +} + +function New-TfsGitSrcSrvIniContent { + [CmdletBinding()] + param( + [ValidateNotNull()] + $Provider, + + [ValidateNotNullOrEmpty()] + [string[]]$SourceFilePaths) + + Trace-VstsEnteringInvocation $MyInvocation -Parameter @( ) + try { + # For more information, see: + # https://msdn.microsoft.com/en-us/library/windows/hardware/ff558876(v=vs.85).aspx + # https://msdn.microsoft.com/en-us/library/windows/desktop/ms680641(v=vs.85).aspx + # http://www.codeproject.com/Articles/115125/Source-Indexing-and-Symbol-Servers-A-Guide-to-Easi + 'SRCSRV: ini ------------------------------------------------' + 'VERSION=3' + 'INDEXVERSION=2' + 'VERCTRL=Team Foundation Server' + [string]::Format( + [System.Globalization.CultureInfo]::InvariantCulture, + 'DATETIME={0:ddd MMM dd HH:mm:ss yyyy}', + (Get-Date)) + 'INDEXER=TFSTB' + 'SRCSRV: variables ------------------------------------------' + # Assigning values to variables in the variables section - e.g. the variable + # TFS_COLLECTION - allows for the variable to be overridden at debugging time. + # For example, if the source code moves to a different collection URL altogether, + # then at debugging time the TFS_COLLECTION variable can be overridden. + # + # Use the short commit hash in the target file path to alleviate max path issues. + "TFS_EXTRACT_TARGET=%targ%\%var5%\%fnvar%(%var6%)%fnbksl%(%var7%)" + # The "commitId" arg requires the full commit ID. + # + # The /applyfilters switch indicates whether to convert LF to CRLF. The source file hashes are + # embedded in the PDB files and the debugger will reject the source file as a match if the + # downloaded file's hash doesn't match the hash embedded in the PDB file. We make the assumption + # the PDB was built from a source file with CRLFs. In some edge case were this is not true, the + # variable TFS_APPLY_FILTERS can be overridden at debugging time. + "TFS_EXTRACT_CMD=tf.exe git view /collection:%fnvar%(%var2%) /teamproject:""%fnvar%(%var3%)"" /repository:""%fnvar%(%var4%)"" /commitId:%fnvar%(%var5%) /path:""%var7%"" /output:%SRCSRVTRG% %fnvar%(%var8%)" + "TFS_COLLECTION=$($provider.CollectionUrl)" + "TFS_TEAM_PROJECT=$($provider.TeamProjectId)" + "TFS_REPO=$($provider.RepoId)" + "TFS_COMMIT=$($provider.CommitId)" + "TFS_SHORT_COMMIT=$($provider.CommitId.Substring(0, 8))" # Take the first 8 chars only. + "TFS_APPLY_FILTERS=/applyfilters" + 'SRCSRVVERCTRL=git' + 'SRCSRVERRDESC=access' + 'SRCSRVERRVAR=var2' + 'SRCSRVTRG=%TFS_EXTRACT_TARGET%' + 'SRCSRVCMD=%TFS_EXTRACT_CMD%' + 'SRCSRV: source files ---------------------------------------' + # Make the sources root path end with a trailing slash. + $sourcesRootPath = $provider.SourcesRootPath.TrimEnd('\') + $sourcesRootPath = "$sourcesRootPath\" + $isMultiRepoCheckout = !(Test-Path "${sourcesRootPath}.git") + foreach ($sourceFilePath in $SourceFilePaths) { + [string]$relativeSourceFilePath = $sourceFilePath.Substring($sourcesRootPath.Length) + if ($isMultiRepoCheckout) { + $i = $relativeSourceFilePath.IndexOf('\') + if ($i -gt 0) { + $repoName = $relativeSourceFilePath.Substring(0, $i) + if (Test-Path "${sourcesRootPath}$repoName\.git") { + $relativeSourceFilePath = $relativeSourceFilePath.Substring($i + 1) + } + } + } + $relativeSourceFilePath = $relativeSourceFilePath.Replace('\', '/') + $relativeSourceFilePath = "/$relativeSourceFilePath" + "$sourceFilePath*TFS_COLLECTION*TFS_TEAM_PROJECT*TFS_REPO*TFS_COMMIT*TFS_SHORT_COMMIT*$relativeSourceFilePath*TFS_APPLY_FILTERS" + } + + 'SRCSRV: end ------------------------------------------------' + } finally { + Trace-VstsLeavingInvocation $MyInvocation + } +} + +function New-TfvcSrcSrvIniContent { + [CmdletBinding()] + param( + [ValidateNotNull()] + $Provider, + + [ValidateNotNullOrEmpty()] + [string[]]$SourceFilePaths) + + Trace-VstsEnteringInvocation $MyInvocation -Parameter @( ) + try { + 'SRCSRV: ini ------------------------------------------------' + 'VERSION=3' + 'INDEXVERSION=2' + 'VERCTRL=Team Foundation Server' + [string]::Format( + [System.Globalization.CultureInfo]::InvariantCulture, + 'DATETIME={0:ddd MMM dd HH:mm:ss yyyy}', + (Get-Date)) + 'INDEXER=TFSTB' + 'SRCSRV: variables ------------------------------------------' + 'TFS_EXTRACT_CMD=tf.exe view /version:%var4% /noprompt "$%var3%" /server:%fnvar%(%var2%) /output:%SRCSRVTRG%' + 'TFS_EXTRACT_TARGET=%targ%\%var2%%fnbksl%(%var3%)\%var4%\%fnfile%(%var5%)' + 'SRCSRVVERCTRL=tfs' + 'SRCSRVERRDESC=access' + 'SRCSRVERRVAR=var2' + "VSTFSSERVER=$($provider.PublicCollectionUrl)" + 'SRCSRVTRG=%TFS_EXTRACT_TARGET%' + 'SRCSRVCMD=%TFS_EXTRACT_CMD%' + 'SRCSRV: source files ---------------------------------------' + $itemSpecs = foreach ($localPath in $SourceFilePaths) { New-ItemSpec -LocalPath $localPath } + # The type returned by GetLocalVersions(...) is LocalVersion[][]. + $localVersions = $provider.Workspace.GetLocalVersions( + $itemSpecs, # itemSpecs + $false); # sortData + foreach ($localVersion in $localVersions) { + if (!$localVersion) { + continue + } + + [string]$localPath = $localVersion[0].Item + [string]$serverPath = $provider.Workspace.GetServerItemForLocalItem($localPath).Substring(1) # Everything but the '$'. + [int]$version = $localVersion[0].Version + [string]$fileName = Split-Path -Leaf -Path $localPath + "$localPath*VSTFSSERVER*$serverPath*$version*$fileName" + } + + 'SRCSRV: end ------------------------------------------------' + } finally { + Trace-VstsLeavingInvocation $MyInvocation + } +} + +######################################## +# Wrapper functions. +######################################## +function New-ItemSpec { + [CmdletBinding()] + param( + [ValidateNotNullOrEmpty()] + [Parameter(Mandatory = $true)] + [string]$LocalPath) + + New-Object -TypeName 'Microsoft.TeamFoundation.VersionControl.Client.ItemSpec' -ArgumentList $LocalPath, 'None' +} diff --git a/_generated/PublishSymbolsV2/PreJobExecutionPublishSymbols.ts b/_generated/PublishSymbolsV2/PreJobExecutionPublishSymbols.ts new file mode 100644 index 000000000000..db726f53ce6f --- /dev/null +++ b/_generated/PublishSymbolsV2/PreJobExecutionPublishSymbols.ts @@ -0,0 +1,42 @@ +const path = require('path'); +const clientToolUtils = require('azure-pipelines-tasks-packaging-common/universal/ClientToolUtilities'); +const tl = require('azure-pipelines-task-lib'); + +const toolName = "symbol"; + +async function PreJobExecutionPublishSymbols(){ + tl.setResourcePath(path.join(__dirname, "task.json")); + const UseNetCoreClientTool = tl.getBoolInput("UseNetCoreClientTool", false); + + try { + // feature flag true or none Windows, then download NetCore version of client tool + if (UseNetCoreClientTool || tl.osType() != "Windows_NT") { + + // Getting NetCore client tool + tl.debug("Getting NetCore client tool"); + let clientToolFilePath = "/fake/path"; + + // Downloading the correct version of Symbol to target location + const accessToken = clientToolUtils.getSystemAccessToken(); + const serviceUri = tl.getEndpointUrl("SYSTEMVSSCONNECTION", false); + const blobUri = await clientToolUtils.getBlobstoreUriFromBaseServiceUri(serviceUri, accessToken); + + tl.debug(tl.loc("Info_RetrievingClientToolUri", blobUri)); + + // Downloading the client tool + clientToolFilePath = await clientToolUtils.retryOnExceptionHelper( + () => clientToolUtils.getClientToolFromService( + blobUri, + accessToken, + toolName), 3, 1000); + + tl.setTaskVariable('SYMBOLTOOL_FILE_PATH', clientToolFilePath); + } + + } catch (error) { + tl.error(error); + tl.setResult(tl.TaskResult.Failed, tl.loc("PreJobFailedToExecute")); + } +} + +PreJobExecutionPublishSymbols() diff --git a/_generated/PublishSymbolsV2/Publish-Symbols.ps1 b/_generated/PublishSymbolsV2/Publish-Symbols.ps1 new file mode 100644 index 000000000000..c570788cb9b9 --- /dev/null +++ b/_generated/PublishSymbolsV2/Publish-Symbols.ps1 @@ -0,0 +1,121 @@ +<# +.SYNOPSIS +Script to publish a symbol request to Artifact Store Symbol Service + +.PARAMETER RequestName +The name to give the published request. + +.PARAMETER SourcePath +The root directory containing the files to be analyzed for inclusion in the request. Only valid debug files will actually be included in the published request. + +.PARAMETER SymbolServiceUri +The Azure Artifacts Symbol Service to which the request should be published. + +.PARAMETER ExpirationInDays +The number of days that symbols should be retained. If not specified, the default settings of the service will be used. + +.PARAMETER PersonalAccessToken +Optional. Use the provided PAT to authenticate to the Symbol Service. If not provided, AAD authentication will be used. + +.EXAMPLE +Publish-Symbols -SymbolServiceUri "https://microsoft.artifacts.visualstudio.com/defaultcollection" -RequestName $(Build.BuildNumber) -SourcePath $(Agent.BuildDirectory)\bin +#> +[CmdletBinding()] +param( + [Parameter(Mandatory=$true)] + [string] $SymbolServiceUri, + + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] $RequestName, + + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] $SourcePath, + + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] $SourcePathListFileName, + + [Parameter(Mandatory=$false)] + [string] $IndexableFileFormats, + + [Parameter(Mandatory=$false)] + [string] $ExpirationInDays, + + [Parameter(Mandatory=$false)] + [string] $PersonalAccessToken, + + [Parameter(Mandatory=$false)] + [bool] $DetailedLog +) + +$ErrorActionPreference = "Stop" + +. $PSScriptRoot\SymbolClientFunctions.ps1 + +function Publish-Symbols([string]$symbolServiceUri, [string]$requestName, [string]$sourcePath, [string]$expirationInDays, [string]$personalAccessToken) +{ + "Using endpoint $symbolServiceUri to create request $requestName with content in $sourcePath" | Write-Verbose + + $assemblyPath = $Env:VSTS_TASKVARIABLE_SYMBOLTOOL_FILE_PATH + if (![string]::IsNullOrEmpty($assemblyPath)) + { + $assemblyPath = Split-Path -Path $assemblyPath -Parent + } + else + { + # the latest symbol.app.buildtask.zip and use the assemblies in it. + $assemblyPath = Update-SymbolClient $SymbolServiceUri $env:Temp + } + + # Publish the files + try + { + if ( $sourcePath ) { + $sourcePath = $sourcePath.TrimEnd("\") + "Removing trailing '\' in SourcePath. New value: $sourcePath" | Write-Verbose + } + + $args = "publish --service `"$symbolServiceUri`" --name `"$requestName`" --directory `"$sourcePath`"" + + if ( $expirationInDays ) { + $args += " --expirationInDays `"$expirationInDays`"" + } + + if ( $personalAccessToken ) { + $env:SYMBOL_PAT_AUTH_TOKEN = $personalAccessToken + $args += " --patAuthEnvVar SYMBOL_PAT_AUTH_TOKEN" + } else { + $args += " --aadAuth" + } + + if ($SourcePathListFileName) { + $args += " --fileListFileName `"$SourcePathListFileName`"" + } + + if ($IndexableFileFormats) { + $args += " --indexableFileFormats `"$IndexableFileFormats`"" + } + + Run-SymbolCommand $assemblyPath $args + } + catch [Exception] + { + # throw $_ here improves the error message from being + # Exception calling "GetResult" with "0" argument(s): + # to just + # + # which I find more clear + throw $_ + } + finally + { + $env:SYMBOL_PAT_AUTH_TOKEN = '' + } +} + +# Publish the symbols +Publish-Symbols $SymbolServiceUri $requestName $sourcePath $ExpirationInDays $PersonalAccessToken + +exit $lastexitcode diff --git a/_generated/PublishSymbolsV2/PublishHelpers/CommonFunctions.ps1 b/_generated/PublishSymbolsV2/PublishHelpers/CommonFunctions.ps1 new file mode 100644 index 000000000000..77d4a65088e3 --- /dev/null +++ b/_generated/PublishSymbolsV2/PublishHelpers/CommonFunctions.ps1 @@ -0,0 +1,19 @@ +######################################## +# Private functions. +######################################## +function Get-ValidValue { + [CmdletBinding()] + param( + [timespan]$Current, + [timespan]$Minimum, + [timespan]$Maximum) + + Trace-VstsEnteringInvocation $MyInvocation + try { + if ($Current -lt $Minimum) { return $Minimum } + elseif ($Current -gt $Maximum) { return $Maximum } + else { return $Current } + } finally { + Trace-VstsLeavingInvocation $MyInvocation + } +} diff --git a/_generated/PublishSymbolsV2/PublishHelpers/PublishFunctions.ps1 b/_generated/PublishSymbolsV2/PublishHelpers/PublishFunctions.ps1 new file mode 100644 index 000000000000..c098abbbd522 --- /dev/null +++ b/_generated/PublishSymbolsV2/PublishHelpers/PublishFunctions.ps1 @@ -0,0 +1,124 @@ +######################################## +# Public functions. +######################################## +function Invoke-PublishSymbols { + [CmdletBinding()] + param( + [string[]]$PdbFiles, + [Parameter(Mandatory = $true)] + [string]$Share, + [Parameter(Mandatory = $true)] + [string]$Product, + [Parameter(Mandatory = $true)] + [string]$Version, + [Parameter(Mandatory = $true)] + [timespan]$MaximumWaitTime, + [Parameter(Mandatory = $true)] + [string]$SemaphoreMessage, + [string]$ArtifactName, + [switch]$CompressSymbols) + + Trace-VstsEnteringInvocation $MyInvocation + try { + # Short-circuit if no files. + if (!$PdbFiles.Count) { + Write-Warning (Get-VstsLocString -Key NoFilesForPublishing) + return + } + + [string]$symbolsRspFile = '' + try { + # Write the list of PDBs to the response file. + $symbolsRspFile = New-ResponseFile -PdbFiles $PdbFiles + + # Adjust the max wait time if out of range. + $MaximumWaitTime = Get-ValidValue -Current $MaximumWaitTime -Minimum ([timespan]::FromMinutes(1)) -Maximum ([timespan]::FromHours(3)) + + # Obtain the semaphore. + $semaphore = Lock-Semaphore -Share $Share -MaximumWaitTime $MaximumWaitTime -SemaphoreMessage $SemaphoreMessage + try { + # Invoke symstore.exe. + $symstoreArgs = "add /f ""@$symbolsRspFile"" /s ""$Share"" /t ""$Product"" /v ""$Version""$(if ($CompressSymbols) { " /compress" })" + Invoke-VstsTool -FileName (Get-SymStorePath) -Arguments $symstoreArgs -WorkingDirectory ([System.IO.Path]::GetTempPath()) 2>&1 | + ForEach-Object { + if ($_ -is [System.Management.Automation.ErrorRecord]) { + Write-Error $_ + } else { + Write-Verbose $_ + } + } + $lastTransactionId = Get-LastTransactionId -Share $Share + } finally { + # Release the semaphore. + Unlock-Semaphore $semaphore + } + + # Default the artifact name. + $ArtifactName = Get-ArtifactName -ArtifactName $ArtifactName -LastTransactionId $lastTransactionId + + # Create the artifact. + Write-VstsAssociateArtifact -Name $ArtifactName -Path $Share -Type 'SymbolStore' -Properties @{ + TransactionId = $lastTransactionId + } + } finally { + # Delete the temporary response file. + if ($symbolsRspFile) { + [System.IO.File]::Delete($symbolsRspFile) + } + } + } finally { + Trace-VstsLeavingInvocation $MyInvocation + } +} + +######################################## +# Private functions. +######################################## +function Get-ArtifactName { + [CmdletBinding()] + param($ArtifactName, $LastTransactionId) + + if ($ArtifactName) { $ArtifactName } + elseif ($LastTransactionId) { $LastTransactionId } + else { [guid]::NewGuid().ToString() } +} + +function Get-LastTransactionId { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [string]$Share) + + [string]$lastIdFileName = [System.IO.Path]::Combine($Share, '000Admin\lastid.txt') + if (Test-Path -LiteralPath $lastIdFileName -PathType Leaf) { + [System.IO.File]::ReadAllText($lastIdFileName).Trim() + } else { + Write-Warning (Get-VstsLocString -Key SymbolStoreLastIdTxtNotFoundAt0 -ArgumentList ([System.IO.Path]::Combine($Share, "000Admin"))) + } +} + +function New-ResponseFile { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [string[]]$PdbFiles) + + Trace-VstsEnteringInvocation $MyInvocation + try { + $symbolsRspFile = [System.IO.Path]::GetTempFileName() + $sw = New-Object System.IO.StreamWriter([System.IO.File]::OpenWrite($symbolsRspFile)) + try { + foreach ($pdbFile in $PdbFiles) { + $sw.WriteLine($pdbFile) + } + + $sw.Flush() + } finally { + $sw.Dispose() + } + + $symbolsRspFile + } finally { + Trace-VstsLeavingInvocation $MyInvocation + } +} diff --git a/_generated/PublishSymbolsV2/PublishHelpers/PublishHelpers.psm1 b/_generated/PublishSymbolsV2/PublishHelpers/PublishHelpers.psm1 new file mode 100644 index 000000000000..a4986c2f49a2 --- /dev/null +++ b/_generated/PublishSymbolsV2/PublishHelpers/PublishHelpers.psm1 @@ -0,0 +1,13 @@ +#requires -Module SymbolsCommon,VstsTaskSdk + +[CmdletBinding()] +param() + +. $PSScriptRoot\CommonFunctions.ps1 +. $PSScriptRoot\PublishFunctions.ps1 +. $PSScriptRoot\SemaphoreFunctions.ps1 +. $PSScriptRoot\UnpublishFunctions.ps1 +Export-ModuleMember -Function @( + 'Invoke-PublishSymbols' + 'Invoke-UnpublishSymbols' +) diff --git a/_generated/PublishSymbolsV2/PublishHelpers/SemaphoreFunctions.ps1 b/_generated/PublishSymbolsV2/PublishHelpers/SemaphoreFunctions.ps1 new file mode 100644 index 000000000000..a03026e4fb34 --- /dev/null +++ b/_generated/PublishSymbolsV2/PublishHelpers/SemaphoreFunctions.ps1 @@ -0,0 +1,139 @@ +######################################## +# Private module variables. +######################################## +$script:maximumSemaphoreAge = [timespan]::FromDays(1) +$script:sleepInterval = [timespan]::FromSeconds(10) + +######################################## +# Private functions. +######################################## +function Lock-Semaphore { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [string]$Share, + [Parameter(Mandatory = $true)] + [timespan]$MaximumWaitTime, + [Parameter(Mandatory = $true)] + [string]$SemaphoreMessage) + + Trace-VstsEnteringInvocation $MyInvocation + try { + $totalSleepTime = [timespan]::Zero + $attemptedDelete = $false + $semaphoreFile = [System.IO.Path]::Combine($Share, '_lockfile.sem') + while ($true) { + # Reached max wait time. + if ($totalSleepTime -ge $MaximumWaitTime) { + throw (Get-VstsLocString -Key ReachedPublishingMaxWaitTime0Seconds -ArgumentList $MaximumWaitTime.TotalSeconds) + } + + try { + # Semaphore file exists. + if (Test-Path -LiteralPath $semaphoreFile -PathType Leaf) { + # File can be deleted. + if (!$attemptedDelete -and (Test-SemaphoreMaximumAge -SemaphoreFile $semaphoreFile)) { + # Try delete. + $attemptedDelete = $true + Remove-SemaphoreFile_Safe -SemaphoreFile $semaphoreFile # This function does not throw. + + # Continue. + continue + } + + # Warn, sleep, continue. + Write-Warning (Get-VstsLocString -Key SemaphoreFile0ExistsRetrying1Seconds -ArgumentList $semaphoreFile, $script:sleepInterval.TotalSeconds) + Start-Sleep -Seconds $script:sleepInterval.TotalSeconds; + $totalSleepTime += $script:sleepInterval; + continue; + } + + # Checking for the existence of the share folder. In XAML Build, there was no semaphore file + # and the users could enter a non-existent share and it would be created. So replicate that + # functionality here (which was provided by symstore.exe in XAML build). + if (!(Test-Path -LiteralPath $Share -PathType Container)) { + $null = [System.IO.Directory]::CreateDirectory($Share) + Write-Verbose "Created symbol store path at $Share since it did not exist." + } + + # Create the semaphore file. + [byte[]]$bytes = [System.Text.UTF8Encoding]::UTF8.GetBytes($SemaphoreMessage) + $semaphore = [System.IO.File]::Open($semaphoreFile, [System.IO.FileMode]::CreateNew, [System.IO.FileAccess]::Write, [System.IO.FileShare]::None) + $semaphore.Write($bytes, 0, $bytes.Length) + $semaphore.Flush() + return New-Object psobject -Property @{ + Path = $semaphoreFile + Stream = $semaphore + } + } catch [System.IO.IOException] { + if ($_.Exception -is [System.IO.DirectoryNotFoundException] -or + $_.Exception -is [System.IO.PathTooLongException]) { + # Don't retry on these two exceptions. + throw + } + + if ($_.Exception.HResult -eq -2147024843) { + # Network path not found. Don't retry on this exception. + # XAML build, via symstore.exe, would fail straight away in this scenario. + throw + } + + # This will occur if the file is in use by another agent (the "typical, expected" case). + # This will occur if the file gets created after the File.Exists check above but before File.Open. + # It can also occur if the server does not exist or cannot be found. + Write-Warning (Get-VstsLocString -Key Error0AccessingSemaphoreFile1Retrying2Seconds -ArgumentList $_.Exception.Message, $semaphoreFile, $script:sleepInterval.TotalSeconds) + } + + # A retriable exception happened. + # Sleep before trying again. + Start-Sleep -Seconds $script:sleepInterval.TotalSeconds + $totalSleepTime += $script:sleepInterval; + } + } finally { + Trace-VstsLeavingInvocation $MyInvocation + } +} + +function Remove-SemaphoreFile_Safe { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [string]$SemaphoreFile) + + # Attempt to delete the semaphore file. + Write-Warning (Get-VstsLocString -Key SemaphoreFile0Minutes1AttemptingCleanup -ArgumentList $semaphoreFile, $script:maximumSemaphoreAge.TotalMinutes) + try { + [System.IO.File]::Delete($semaphoreFile) + Write-Warning (Get-VstsLocString -Key CleanedUpSemaphoreFile0 -ArgumentList $semaphoreFile) + } catch { + Write-Warning (Get-VstsLocString -Key CleanUpSemaphoreFile0Error1 -ArgumentList $semaphoreFile, $_.Message) + } +} + +function Test-SemaphoreMaximumAge { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [string]$SemaphoreFile) + + # Check if the semaphore file is older than 24h and a deletion has not been attempted. + $creationTimeUtc = [System.IO.File]::GetCreationTimeUtc($SemaphoreFile) + Write-Verbose "Semaphore file creation time (UTC): $creationTimeUtc" + $yesterdayUtc = [System.DateTime]::UtcNow.Subtract($script:maximumSemaphoreAge) + return $creationTimeUtc -lt $yesterdayUtc +} + +function Unlock-Semaphore { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + $Semaphore) + + Trace-VstsEnteringInvocation $MyInvocation + try { + $Semaphore.Stream.Dispose() + [System.IO.File]::Delete($Semaphore.Path) + } finally { + Trace-VstsLeavingInvocation $MyInvocation + } +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/PublishHelpers/UnpublishFunctions.ps1 b/_generated/PublishSymbolsV2/PublishHelpers/UnpublishFunctions.ps1 new file mode 100644 index 000000000000..30970488ecc5 --- /dev/null +++ b/_generated/PublishSymbolsV2/PublishHelpers/UnpublishFunctions.ps1 @@ -0,0 +1,36 @@ +######################################## +# Public functions. +######################################## +function Invoke-UnpublishSymbols { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [string]$Share, + [Parameter(Mandatory = $true)] + [string]$TransactionId, + [Parameter(Mandatory = $true)] + [timespan]$MaximumWaitTime, + [Parameter(Mandatory = $true)] + [string]$SemaphoreMessage) + + Trace-VstsEnteringInvocation $MyInvocation + try { + $MaximumWaitTime = Get-ValidValue -Current $MaximumWaitTime -Minimum ([timespan]::FromMinutes(1)) -Maximum ([timespan]::FromHours(3)) + $semaphore = Lock-Semaphore -Share $Share -MaximumWaitTime $MaximumWaitTime -SemaphoreMessage $SemaphoreMessage + try { + $symstoreArgs = "del /i ""$TransactionId"" /s ""$Share""" + Invoke-VstsTool -FileName (Get-SymStorePath) -Arguments $symstoreArgs -WorkingDirectory ([System.IO.Path]::GetTempPath()) -RequireExitCodeZero 2>&1 | + ForEach-Object { + if ($_ -is [System.Management.Automation.ErrorRecord]) { + Write-Error $_ + } else { + Write-Host $_ + } + } + } finally { + Unlock-Semaphore $semaphore + } + } finally { + Trace-VstsLeavingInvocation $MyInvocation + } +} diff --git a/_generated/PublishSymbolsV2/PublishSymbols.ps1 b/_generated/PublishSymbolsV2/PublishSymbols.ps1 new file mode 100644 index 000000000000..536c883b7707 --- /dev/null +++ b/_generated/PublishSymbolsV2/PublishSymbols.ps1 @@ -0,0 +1,259 @@ +[CmdletBinding()] +param() + +# # Ad-hoc test procedure +# node make.js build --task PublishSymbols +# $env:System_Culture = "en-US" +# Import-Module .\_build\Tasks\PublishSymbols\ps_modules\VstsTaskSdk\VstsTaskSdk.psd1 +# $env:Agent_HomeDirectory = "D:\Downloads\vsts-agent-win7-x64-2.117.1" +# $env:PublishSymbols_Debug = "true" +# $env:PublishSymbols_UseDbgLkg = "true" +# .\_build\Tasks\PublishSymbols\PublishSymbols.ps1 + +Trace-VstsEnteringInvocation $MyInvocation + +$ErrorActionPreference = "Stop" +Import-Module $PSScriptRoot\ps_modules\PowershellHelpers\PowershellHelpers.psm1 + +function Get-SymbolServiceUri ([string]$collectionUri) +{ + $serviceDefinitionUri = "$collectionUri/_apis/servicedefinitions/locationservice2/951917ac-a960-4999-8464-e3f0aa25b381" + $action = { Invoke-WebRequest $serviceDefinitionUri -UseBasicParsing } + $result = Invoke-ActionWithRetries -Action $action -MaxTries 5 + if ($result.StatusCode -eq 200) { + $locationUri = (ConvertFrom-Json $result.Content).locationMappings[0].location + if (-not $locationUri) { + throw "No location mappings found while querying $serviceDefinitionUri" + } + $locationServiceUri = "$locationUri/_apis/servicedefinitions/locationservice2/00000016-0000-8888-8000-000000000000" + $action = { Invoke-WebRequest $locationServiceUri -UseBasicParsing } + $result = Invoke-ActionWithRetries -Action $action -MaxTries 5 + if ($result.StatusCode -ne 200) { + throw "Failure while querying '$locationServiceUri', returned $($result.StatusCode)" + } + $artifactsUri = (ConvertFrom-Json $result.Content).locationMappings[0].location + if (-not $artifactsUri) { + throw "No location mappings found while querying $artifactsUri" + } + Write-Host "Retrieved artifact service url: '$artifactsUri'" + } + else { # Fallback + if ( [RegEx]::Match($collectionUri, '\.(visualstudio\.com|vsts\.me)').Success ) { + $artifactsUri = [RegEx]::Replace($collectionUri, '\.(visualstudio\.com|vsts\.me)', '.artifacts.$1') + } + else { + $artifactsUri = [RegEx]::Replace($collectionUri, '://[^/]+/([^/]+)', '://$1.artifacts.visualstudio.com') + } + } + return $artifactsUri +} + +try { + # Import the localized strings. + Import-VstsLocStrings "$PSScriptRoot\Task.json" + + # Output dependency paths + Import-Module $PSScriptRoot\SymbolsCommon.psm1 + $debug = [System.Convert]::ToBoolean($env:PublishSymbols_Debug) + if ($debug) + { + $pdbstrPath = Get-PdbstrPath + Write-Host "Get-PdbstrPath: $pdbstrPath" + $dbghelpPath = Get-DbghelpPath + Write-Host "Get-DbghelpPath: $dbghelpPath" + $symstorePath = Get-SymStorePath + Write-Host "Get-SymStorePath: $symstorePath" + } + + [string]$SymbolServerType = Get-VstsInput -Name 'SymbolServerType' -Default 'None' + [bool]$DetailedLog = Get-VstsInput -Name 'DetailedLog' -AsBool + + if ($SymbolServerType -eq "FileShare") { + # Get common inputs. + [int]$SymbolsMaximumWaitTime = Get-VstsInput -Name 'SymbolsMaximumWaitTime' -Default '0' -AsInt + [timespan]$SymbolsMaximumWaitTime = if ($SymbolsMaximumWaitTime -gt 0) { [timespan]::FromMinutes($SymbolsMaximumWaitTime) } else { [timespan]::FromHours(2) } + + # Unpublish symbols. + if ([bool]$Delete = Get-VstsInput -Name 'Delete' -AsBool) { + # Construct the semaphore message. + $utcNow = (Get-Date).ToUniversalTime() + $semaphoreMessage = "Unpublish: True, Machine: $env:ComputerName, BuildUri: $env:Build_BuildUri, BuildNumber: $env:Build_BuildNumber, RepositoryName: $env:Build_Repository_Name, RepositoryUri: $env:Build_Repository_Uri, Team Project: $env:System_TeamProject, CollectionUri: $env:System_TeamFoundationCollectionUri at $utcNow UTC" + + # Delete the symbol store transaction. + [string]$SymbolsPath = Get-VstsInput -Name 'SymbolsPath' -Require + [string]$TransactionId = Get-VstsInput -Name 'TransactionId' -Require + + Import-Module -Name $PSScriptRoot\PublishHelpers\PublishHelpers.psm1 + Invoke-UnpublishSymbols -Share $SymbolsPath -TransactionId $TransactionId -MaximumWaitTime $SymbolsMaximumWaitTime -SemaphoreMessage $SemaphoreMessage + return + } + + # Get the inputs. + [string]$SymbolsPath = Get-VstsInput -Name 'SymbolsPath' + + if ([string]$SourceFolder = (Get-VstsInput -Name 'SourceFolder') -and + $SourceFolder -ne (Get-VstsTaskVariable -Name 'Build.SourcesDirectory' -Require)) { + Write-Warning (Get-VstsLocString -Key SourceFolderDeprecated0 -ArgumentList $SourceFolder) + } + + [string]$SymbolsProduct = Get-VstsInput -Name 'SymbolsProduct' -Default (Get-VstsTaskVariable -Name 'Build.DefinitionName' -Require) + [string]$SymbolsVersion = Get-VstsInput -Name 'SymbolsVersion' -Default (Get-VstsTaskVariable -Name 'Build.BuildNumber' -Require) + [string]$SymbolsArtifactName = Get-VstsInput -Name 'SymbolsArtifactName' + } elseif ($symbolServerType -eq "TeamServices") { + [int]$SymbolExpirationInDays = Get-VstsInput -Name 'SymbolExpirationInDays' -AsInt -Default '36530' + } + + [bool]$SkipIndexing = -not (Get-VstsInput -Name 'IndexSources' -AsBool) + [bool]$CompressSymbols = (Get-VstsInput -Name 'CompressSymbols' -AsBool) + [bool]$TreatNotIndexedAsWarning = Get-VstsInput -Name 'TreatNotIndexedAsWarning' -AsBool + [string]$defaultSymbolFolder = (Get-VstsTaskVariable -Name 'Build.SourcesDirectory' -Default "") + [string]$SymbolsFolder = Get-VstsInput -Name 'SymbolsFolder' -Default $defaultSymbolFolder + + if ( ($SymbolServerType -eq "FileShare") -or ($SymbolServerType -eq "TeamServices") -or (-not $SkipIndexing) ) { + # Get the PDB file paths. + [string]$SearchPattern = Get-VstsInput -Name 'SearchPattern' -Default "**\bin\**\*.pdb" + if ($SearchPattern.Contains("`n")) { + [string[]]$SearchPattern = $SearchPattern -split "`n" + } + if (-not $SymbolsFolder) { # Both SymbolsFolder and Build.SourcesDirectory are not present + throw "Please provide value for SymbolFolder." + } + + $matches = @(Find-VstsMatch -DefaultRoot $SymbolsFolder -Pattern $SearchPattern) + $fileList = $matches | Where-Object { -not ( Test-Path -LiteralPath $_ -PathType Container ) } # Filter out directories + + Write-Host (Get-VstsLocString -Key Found0Files -ArgumentList $fileList.Count) + + if (-not $fileList) { + if ($SearchPattern.Contains(';') ) { + throw "No files found. Use newlines instead of ';' to separate search patterns." + } + elseif ($matches) { + Write-Host "No files present in matchList, the match had $($matches.Count) directories" + } + } + } + + # Index the sources. + if ($SkipIndexing) { + Write-Host (Get-VstsLocString -Key SkippingIndexing) + } else { + Import-Module -Name $PSScriptRoot\IndexHelpers\IndexHelpers.psm1 + $pdbFiles = $fileList | Where-Object { $_.EndsWith(".pdb", [StringComparison]::OrdinalIgnoreCase) } + Invoke-IndexSources -SymbolsFilePaths $pdbFiles -TreatNotIndexedAsWarning:$TreatNotIndexedAsWarning + } + + [bool]$NeedsPublishSymbols = Get-VstsInput -Name 'PublishSymbols' -Require -AsBool + if (-not $NeedsPublishSymbols) { + if ($SkipIndexing) { + throw "Either IndexSources or PublishSymbols should be checked" + } + return + } + + # Publish the symbols. + if ($SymbolServerType -eq "FileShare") { + if ($SymbolsPath) { + # Construct the semaphore message. + $utcNow = (Get-Date).ToUniversalTime() + $semaphoreMessage = "Machine: $env:ComputerName, BuildUri: $env:Build_BuildUri, BuildNumber: $env:Build_BuildNumber, RepositoryName: $env:Build_Repository_Name, RepositoryUri: $env:Build_Repository_Uri, Team Project: $env:System_TeamProject, CollectionUri: $env:System_TeamFoundationCollectionUri at $utcNow UTC" + + # Publish the symbols. + Import-Module -Name $PSScriptRoot\PublishHelpers\PublishHelpers.psm1 + Invoke-PublishSymbols -PdbFiles $fileList -Share $SymbolsPath -Product $SymbolsProduct -Version $SymbolsVersion -MaximumWaitTime $SymbolsMaximumWaitTime -ArtifactName $SymbolsArtifactName -SemaphoreMessage $semaphoreMessage -CompressSymbols:$CompressSymbols + } else { + Write-Verbose "SymbolsPath was not set, publish symbols step was skipped." + } + } elseif ($symbolServerType -eq "TeamServices") { + # If the SymbolsArtifactName is set to something other than the default, override the default request name + [string]$SymbolsArtifactName = Get-VstsInput -Name 'SymbolsArtifactName' + [string]$BuildConfiguration = Get-VstsTaskVariable -Name 'BuildConfiguration' + [string]$defaultArtifactName = if ($BuildConfiguration) { "Symbols_$BuildConfiguration" } else { "Symbols_`$(BuildConfiguration)" } + if ($SymbolsArtifactName -and $SymbolsArtifactName -ne $defaultArtifactName) { + [string]$RequestName = $SymbolsArtifactName + } + else { + [string]$RequestName = (Get-VstsTaskVariable -Name 'System.TeamProject' -Require) + "/" + + (Get-VstsTaskVariable -Name 'Build.DefinitionName' -Require) + "/" + + (Get-VstsTaskVariable -Name 'Build.BuildNumber' -Require) + "/" + + (Get-VstsTaskVariable -Name 'Build.BuildId' -Require) + "/" + + ([Guid]::NewGuid().ToString()); + $RequestName = $RequestName.ToLowerInvariant(); + } + + Write-Host "Symbol Request Name = $RequestName" + + [string]$asAccountName = (Get-VstsTaskVariable -Name 'ArtifactServices.Symbol.AccountName') + [string]$PersonalAccessToken = (Get-VstsTaskVariable -Name 'ArtifactServices.Symbol.PAT') + [bool]$UseAad = (Get-VstsTaskVariable -Name 'ArtifactServices.Symbol.UseAad' -AsBool) + [string]$IndexableFileFormats = (Get-VstsInput -Name 'IndexableFileFormats') + + if ( $asAccountName ) { + if ( $PersonalAccessToken ) { + if ( $UseAad ) { + throw "If AccountName is specified, then only one of PAT or UseAad should be present" + } + + $variableInfo = Get-VstsTaskVariableInfo | Where-Object { $_.Name -eq "ArtifactServices.Symbol.PAT" } + + if ($variableInfo -and -not $variableInfo.Secret) { + throw "The PAT needs to be specified as a secret" + } + } + elseif ( -not $UseAad ) { + throw "If AccountName is specified, then either PAT or UseAad needs to be present" + } + + [string]$SymbolServiceUri = "https://" + [System.Web.HttpUtility]::UrlEncode($asAccountName) + ".artifacts.visualstudio.com" + } + else { + if ( $PersonalAccessToken -or $UseAad ) { + throw "If PAT or UseAad is specified, then AccountName needs to be present" + } + + [string]$SymbolServiceUri = Get-SymbolServiceUri (Get-VstsTaskVariable -Name 'System.TeamFoundationCollectionUri' -Require) + + $Endpoint = Get-VstsEndPoint -Name "SystemVssConnection" + [string]$PersonalAccessToken = $Endpoint.Auth.Parameters.AccessToken + + if ( [string]::IsNullOrEmpty($PersonalAccessToken) ) { + throw "Unable to generate Personal Access Token for the user. Contact Project Collection Administrator" + } + } + + [string]$SymbolServiceUri = $SymbolServiceUri.TrimEnd('/') + + [string]$tmpFileName = [IO.Path]::GetTempFileName() + [string]$SourcePath = Resolve-Path -LiteralPath $SymbolsFolder + + [IO.File]::WriteAllLines($tmpFileName, [string[]]@("# FileList under $SymbolsFolder with pattern $SearchPattern", "")) # Also Truncates any existing files + foreach ($filename in $fileList) { + [string]$fullFilePath = [IO.Path]::Combine($SourcePath, $filename) + [IO.File]::AppendAllLines($tmpFileName, [string[]]@($fullFilePath)) + } + + [string] $encodedRequestName = [System.Web.HttpUtility]::UrlEncode($RequestName) + # Use hash prefix for now to be compatible with older/current agents, RequestType is still different (than SymbolStore) + [string] $requestUrl = "#$SymbolServiceUri/_apis/Symbol/requests?requestName=$encodedRequestName" + Write-VstsAssociateArtifact -Name "$RequestName" -Path $requestUrl -Type "SymbolRequest" -Properties @{} + + & "$PSScriptRoot\Publish-Symbols.ps1" ` + -SymbolServiceUri $SymbolServiceUri ` + -RequestName $RequestName ` + -SourcePath $SourcePath ` + -SourcePathListFileName $tmpFileName ` + -IndexableFileFormats `"$IndexableFileFormats`" ` + -PersonalAccessToken $PersonalAccessToken ` + -ExpirationInDays $SymbolExpirationInDays ` + -DetailedLog $DetailedLog + + if (Test-Path -Path $tmpFileName) { + del $tmpFileName + } + } + else { + throw "Unknown SymbolServerType : $SymbolServerType" + } +} finally { + Trace-VstsLeavingInvocation $MyInvocation +} diff --git a/_generated/PublishSymbolsV2/PublishSymbols.ts b/_generated/PublishSymbolsV2/PublishSymbols.ts new file mode 100644 index 000000000000..4a6729c98699 --- /dev/null +++ b/_generated/PublishSymbolsV2/PublishSymbols.ts @@ -0,0 +1,202 @@ +import * as fs from "fs"; +import * as path from "path"; +import * as uuidV4 from 'uuid/v4'; +import * as telemetry from "azure-pipelines-tasks-utility-common/telemetry"; +import * as clientToolUtils from "azure-pipelines-tasks-packaging-common/universal/ClientToolUtilities"; +import * as clientToolRunner from "azure-pipelines-tasks-packaging-common/universal/ClientToolRunner"; +import * as tl from "azure-pipelines-task-lib/task"; +import { IExecSyncResult, IExecOptions } from "azure-pipelines-task-lib/toolrunner"; + +const symbolRequestAlreadyExistsError = 17; + +interface IClientToolOptions { + clientToolFilePath: string; + detailedLog: boolean; + expirationInDays: string; + indexableFileFormats: string; + personalAccessToken: string; + requestName: string; + sourcePathListFileName: string; + symbolServiceUri: string; +} + +export async function run(clientToolFilePath: string): Promise { + + try { + // Get the inputs. + tl.debug("Getting client tool inputs"); + + let AsAccountName = tl.getVariable("ArtifactServices.Symbol.AccountName"); + let symbolServiceUri = "https://" + encodeURIComponent(AsAccountName) + ".artifacts.visualstudio.com" + let personalAccessToken; + if (AsAccountName) { + personalAccessToken = tl.getVariable("ArtifactServices.Symbol.PAT"); + } + else { + personalAccessToken = clientToolUtils.getSystemAccessToken(); + const serviceUri = tl.getEndpointUrl("SYSTEMVSSCONNECTION", false); + symbolServiceUri = await getSymbolServiceUri(serviceUri, personalAccessToken); + } + + let defaultSymbolFolder: string = tl.getVariable("Build.SourcesDirectory") ? tl.getVariable("Build.SourcesDirectory") : ""; + let symbolsFolder: string = tl.getInput("SymbolsFolder", false) ? tl.getInput("SymbolsFolder", false) : defaultSymbolFolder; + let uniqueId: string = tl.getVariable("Build.UniqueId") ? tl.getVariable("Build.UniqueId") : uuidV4(); + let searchPatterns = tl.getDelimitedInput("SearchPattern", "\n", false) ? tl.getDelimitedInput("SearchPattern", "\n", false) : ["**\\bin\\**\\*.pdb"]; + let indexableFileFormats = tl.getInput("IndexableFileFormats", false); + + // If SymbolsArtifactName input is not the default value, use that as the request name instead of the default + let symbolsArtifactName: string = tl.getInput("SymbolsArtifactName", false); + let requestName: string; + let defaultArtifactName: string = tl.getVariable("BuildConfiguration") ? "Symbols_" + tl.getVariable("BuildConfiguration") : "Symbols_$(BuildConfiguration)" + if (symbolsArtifactName && symbolsArtifactName !== defaultArtifactName) { + requestName = symbolsArtifactName; + } + else { + requestName = (tl.getVariable("System.TeamProject") + "/" + + tl.getVariable("Build.DefinitionName") + "/" + + tl.getVariable("Build.BuildNumber") + "/" + + tl.getVariable("Build.BuildId") + "/" + + uniqueId).toLowerCase(); + } + + let expirationInDays: string = tl.getInput("SymbolExpirationInDays", false) ? tl.getInput("SymbolExpirationInDays", false) : '36530'; + let detailedLog: boolean = tl.getBoolInput("DetailedLog"); + + // Determine specific files to publish, if provided + let matches = tl.findMatch(symbolsFolder, searchPatterns); + let fileList = matches.length > 0 ? matches.filter(function (testPath) { + return fs.statSync(testPath).isFile(); + }) : []; + console.log(tl.loc("FoundNFiles", fileList.length)); + + if (fileList.length <= 0) { + tl.setResult(tl.TaskResult.Succeeded, tl.loc("NoFilesForPublishing")); + } + else { + let execResult: IExecSyncResult; + if (fs.existsSync(clientToolFilePath)) { + tl.debug("Publishing the symbols"); + tl.debug(`Using endpoint ${symbolServiceUri} to create request ${requestName} with content in ${symbolsFolder}`); + + tl.debug(`Removing trailing '\/' in ${symbolServiceUri}`); + symbolServiceUri = clientToolUtils.trimEnd(symbolServiceUri, '/'); + + // Create temp file listing all files found + let tmpDir = tl.getVariable("Agent.TempDirectory"); + let sourcePathListFileName = path.join(tmpDir, `ListOfSymbols-${uniqueId}.txt`); + fs.writeFileSync(sourcePathListFileName, fileList.join("\n")); + + const publishOptions = { + clientToolFilePath, + detailedLog, + expirationInDays, + indexableFileFormats, + personalAccessToken, + requestName, + sourcePathListFileName, + symbolServiceUri + } as IClientToolOptions; + + let toolRunnerOptions = clientToolRunner.getClientToolOptions(); + execResult = publishSymbolsUsingClientTool(symbolsFolder, publishOptions, toolRunnerOptions); + if (fs.existsSync(sourcePathListFileName)) { + fs.unlinkSync(sourcePathListFileName); + } + + if (execResult != null && execResult.code === symbolRequestAlreadyExistsError) { + telemetry.logResult("Symbols", "PublishingCommand", execResult.code); + throw new Error(tl.loc("Error_UnexpectedErrorSymbolsPublishing", + execResult.code, + execResult.stderr ? execResult.stderr.trim() : execResult.stderr)); + } + + tl.setResult(tl.TaskResult.Succeeded, tl.loc("SymbolsPublishedSuccessfully") + execResult.stdout.trim()); + } + else { + throw new Error(tl.loc("Error_SymbolPublishingToolNotFound", clientToolFilePath)); + } + } + } + catch (error) { + tl.error(error); + tl.setResult(tl.TaskResult.Failed, tl.loc("FailedToPublishSymbols", error.message)); + + } finally { + process.env.SYMBOL_PAT_AUTH_TOKEN = ''; + } +} + +function publishSymbolsUsingClientTool( + sourcePath: string, + options: IClientToolOptions, + execOptions: IExecOptions) { + const command = new Array(); + command.push( + "publish", + "--service", options.symbolServiceUri, + "--name", options.requestName, + "--directory", sourcePath + ); + + if (options.expirationInDays) { + command.push("--expirationInDays", options.expirationInDays); + } + + if (options.personalAccessToken) { + process.env.SYMBOL_PAT_AUTH_TOKEN = options.personalAccessToken + command.push("--patAuthEnvVar", 'SYMBOL_PAT_AUTH_TOKEN'); + } + + if (options.sourcePathListFileName) { + command.push("--fileListFileName", options.sourcePathListFileName); + } + + if (options.indexableFileFormats) { + command.push("--indexableFileFormats", options.indexableFileFormats); + } + + if (options.detailedLog) { + command.push("--tracelevel", "verbose"); + } + else { + command.push("--tracelevel", "info"); + } + + command.push("--globalretrycount", "2"); + + console.log(tl.loc("Info_ClientTool", options.clientToolFilePath)); + const execResult: IExecSyncResult = clientToolRunner.runClientTool( + options.clientToolFilePath, + command, + execOptions + ); + + if (execResult.code === 0 || execResult.code == symbolRequestAlreadyExistsError) { + return execResult; + } + + telemetry.logResult("Symbols", "PublishingCommand", execResult.code); + throw new Error(tl.loc("Error_UnexpectedErrorSymbolsPublishing", + execResult.code, + execResult.stderr ? execResult.stderr.trim() : execResult.stderr)); +} + +async function getSymbolServiceUri(collectionUri: string, accessToken: string): Promise { + let locationServiceUri = await clientToolUtils.getServiceUriFromAreaId(collectionUri, accessToken, "951917ac-a960-4999-8464-e3f0aa25b381"); + let artifactsUri: string; + if (locationServiceUri) { + artifactsUri = await clientToolUtils.getServiceUriFromAreaId(locationServiceUri, accessToken, "00000016-0000-8888-8000-000000000000"); + } + else { + let baseRegEx = new RegExp("\\.(visualstudio\\.com|vsts\\.me)"); + if (collectionUri.match(baseRegEx)) { + artifactsUri = collectionUri.replace(baseRegEx, ".artifacts.$1"); + } + else { + let regEx = new RegExp("://[^/]+/([^/]+)"); + artifactsUri = collectionUri.replace(regEx, "://$1.artifacts.visualstudio.com"); + } + } + + return artifactsUri; +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Strings/resources.resjson/de-DE/resources.resjson b/_generated/PublishSymbolsV2/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..a826d698bdbb --- /dev/null +++ b/_generated/PublishSymbolsV2/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,74 @@ +{ + "loc.friendlyName": "Quellen indizieren und Symbole veröffentlichen", + "loc.helpMarkDown": "Weitere Informationen zur Verwendung dieser Aufgabe finden Sie [hier](https://go.microsoft.com/fwlink/?LinkID=613722).", + "loc.description": "Hiermit wird Ihr Quellcode indiziert, und Symbole werden in einer Dateifreigabe oder auf einem Azure Artifacts-Symbolserver veröffentlicht.", + "loc.instanceNameFormat": "Pfad für Symbolveröffentlichung", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.SymbolsFolder": "Pfad zum Symbolordner", + "loc.input.help.SymbolsFolder": "Der Pfad zu dem Ordner, der nach Symboldateien durchsucht wird. Der Standardwert ist \"$(Build.SourcesDirectory)\". Geben Sie andernfalls einen Stammpfad an, z. B.: \"$(Build.BinariesDirectory)/MyProject\".", + "loc.input.label.SearchPattern": "Suchmuster", + "loc.input.help.SearchPattern": "Das Muster, das zum Ermitteln der zu veröffentlichenden PDB-Dateien verwendet wird.", + "loc.input.label.IndexSources": "Quellen indizieren", + "loc.input.help.IndexSources": "Gibt an, ob Quellserverinformationen in die PDB-Dateien eingefügt werden sollen. Diese Option wird nur auf Windows-Agents unterstützt.", + "loc.input.label.PublishSymbols": "Symbole veröffentlichen", + "loc.input.help.PublishSymbols": "Gibt an, ob die Symboldateien veröffentlicht werden sollen.", + "loc.input.label.SymbolServerType": "Symbolservertyp", + "loc.input.help.SymbolServerType": "Wählen Sie den Ort für die Veröffentlichung von Symbolen aus. Auf dem Azure Artifacts-Symbolserver veröffentlichte Symbole sind für alle Benutzer mit Zugriff auf die Organisation/Sammlung zugänglich. Azure DevOps Server unterstützt nur die Option \"Dateifreigabe\". Befolgen Sie [diese Anweisungen](https://go.microsoft.com/fwlink/?linkid=846265), um Symbolserver in Azure Artifacts zu verwenden.", + "loc.input.label.SymbolsPath": "Pfad zum Veröffentlichen von Symbolen", + "loc.input.help.SymbolsPath": "Die Dateifreigabe, in der Ihre Symbole gehostet werden. Dieser Wert wird im Aufruf von \"symstore.exe add\" als Parameter \"/s\" verwendet.", + "loc.input.label.CompressSymbols": "Symbole komprimieren", + "loc.input.help.CompressSymbols": "Komprimieren Sie Symbole bei der Veröffentlichung in einer Dateifreigabe.", + "loc.input.label.SymbolExpirationInDays": "Symbolablauf (in Tagen)", + "loc.input.help.SymbolExpirationInDays": "Die Anzahl der Tage, in denen Symbole beibehalten werden sollen.", + "loc.input.label.IndexableFileFormats": "Zu veröffentlichende Symboldateiformate", + "loc.input.help.IndexableFileFormats": "Die Debugformate, die auf dem Symbolserver veröffentlicht werden sollen", + "loc.input.label.DetailedLog": "Ausführliche Protokollierung", + "loc.input.help.DetailedLog": "Verwenden Sie die ausführliche Protokollierung.", + "loc.input.label.TreatNotIndexedAsWarning": "Warnen, wenn nicht indiziert", + "loc.input.help.TreatNotIndexedAsWarning": "Gibt an, ob eine Warnung erfolgen soll, wenn Quellen für eine PDB-Datei nicht indiziert sind. Andernfalls werden die Nachrichten als normale Ausgabe protokolliert.", + "loc.input.label.UseNetCoreClientTool": "NetCore-Clienttool verwenden", + "loc.input.help.UseNetCoreClientTool": "Gibt an, ob die Version des Symboluploadtools verwendet werden soll, das die DWARF- und ELF-Dateien unterstützt. Diese Option ist nur für Windows-Agents von Bedeutung. Auf Nicht-Windows-Agents wird immer die Version des Symboluploadtools verwendet, das die DWARF- und ELF-Dateien unterstützt.", + "loc.input.label.SymbolsMaximumWaitTime": "Max. Wartezeit (Min.)", + "loc.input.help.SymbolsMaximumWaitTime": "Wartezeit in Minuten, bevor für diese Aufgabe ein Fehler ausgelöst wird.", + "loc.input.label.SymbolsProduct": "Produkt", + "loc.input.help.SymbolsProduct": "Geben Sie den Produktparameter für symstore.exe an. Der Standardwert ist $(Build.DefinitionName).", + "loc.input.label.SymbolsVersion": "Version", + "loc.input.help.SymbolsVersion": "Geben Sie den Versionsparameter für symstore.exe an. Der Standardwert ist $(Build.BuildNumber).", + "loc.input.label.SymbolsArtifactName": "Artefaktname", + "loc.input.help.SymbolsArtifactName": "Geben Sie den Artefaktnamen an, der für das Symbolartefakt verwendet werden soll. Der Standardwert ist \"Symbols_$(BuildConfiguration)\".", + "loc.messages.CleanedUpSemaphoreFile0": "Die Semaphordatei \"{0}\" wurde erfolgreich bereinigt.", + "loc.messages.CleanUpSemaphoreFile0Error1": "Die vorhandene Semaphordatei \"{0}\" konnte nicht bereinigt werden. {1}", + "loc.messages.Error0AccessingSemaphoreFile1Retrying2Seconds": "Fehler \"{0}\" beim Zugriff auf die Semaphordatei \"{1}\". Wiederholungsversuch in {2:N0} Sekunden.", + "loc.messages.Error_UnexpectedErrorSymbolsPublishing": "Unerwarteter Fehler beim Veröffentlichen von Symbolen. Exitcode (%s) und Fehler (%s)", + "loc.messages.Error_CommandNotRecognized": "Der Befehl %s wurde nicht erkannt.", + "loc.messages.Error_SymbolPublishingToolNotFound": "Das Symbolveröffentlichungstool wurde unter \"%s\" nicht gefunden.", + "loc.messages.FailedToLoadDbghelpDllFrom0ErrorCode1": "Fehler beim Laden von \"dbghelp.dll\" aus \"{0}\". Fehlercode: \"{1}\"", + "loc.messages.FailedToPublishSymbols": "Fehler beim Veröffentlichen von Symbolen. %s", + "loc.messages.FailedToRunClientTool": "Fehler beim Ausführen des Clienttools. %s", + "loc.messages.Found0Files": "Es wurden {0:N0} Dateien gefunden.", + "loc.messages.FoundNFiles": "Es wurden %s Dateien gefunden.", + "loc.messages.FreeLibraryDbghelpDllError0": "Fehler beim Freigeben der Bibliothek \"dbghelp.dll\". Fehlercode \"{0}\".", + "loc.messages.IndexingNotSupported": "Die Quellindizierung wird unter diesem Betriebssystem nicht unterstützt.", + "loc.messages.Info_RetrievingClientToolUri": "Clienttool wird abgerufen von: %s", + "loc.messages.Info_ClientTool": "ClientTool clientToolFilePath: %s", + "loc.messages.NoFilesForIndexing": "Es sind keine Dateien für die Indizierung ausgewählt.", + "loc.messages.NoFilesForPublishing": "Es sind keine Dateien zum Veröffentlichen ausgewählt.", + "loc.messages.NoSourcePathsIn0": "Quellen für die Symboldatei können nicht indiziert werden: \"{0}\". Die Datei enthält keine Quellpfadinformationen.", + "loc.messages.OneOrMoreSourceFilesNotIndexedFor0": "Mindestens eine Quelldatei für die Symboldatei \"{0}\" kann nicht indiziert werden.", + "loc.messages.PreJobFailedToExecute": "Fehler beim Ausführen von PreJob.", + "loc.messages.PublishOptionNotSet": "Die Option \"Symbole veröffentlichen\" wurde nicht festgelegt, sodass die Veröffentlichung ignoriert wird.", + "loc.messages.ReachedPublishingMaxWaitTime0Seconds": "Die Symbolveröffentlichung konnte nicht abgeschlossen werden. Die maximale Wartezeit von {0:N0} Sekunden wurde erreicht.", + "loc.messages.SemaphoreFile0ExistsRetrying1Seconds": "Die Semaphordatei \"{0}\" ist bereits vorhanden. Die Symbolveröffentlichung wird in {1:N0} Sekunden wiederholt.", + "loc.messages.SemaphoreFile0Minutes1AttemptingCleanup": "Die Semaphordatei \"{0}\" ist bereits vorhanden. Der letzte Zugriff auf die Datei erfolgte vor mehr als \"{1:N0}\" Minuten. Es wird versucht, die Datei zu bereinigen.", + "loc.messages.SkippingIndexing": "Die Indizierung wird übersprungen.", + "loc.messages.SourceFolderDeprecated0": "Der Quellordnerparameter ist veraltet. Der Wert \"{0}\" wird ignoriert.", + "loc.messages.SourceInfoNotRetrievedFrom0Message1": "Indizierte Quellinformationen konnten nicht aus \"{0}\" abgerufen werden. {1}", + "loc.messages.SpacesInTemp": "Die Quelldateien sind ggf. nicht ordnungsgemäß indiziert. Der Ordner \"Temp\" enthält Leerzeichen.", + "loc.messages.SymbolsPublishedSuccessfully": "Symbole wurden erfolgreich veröffentlicht. %s", + "loc.messages.SymbolStoreLastIdTxtNotFoundAt0": "Der Symbolspeicher \"lastid.txt\" wurde unter \"{0}\" nicht gefunden.", + "loc.messages.UnableToDetermineWorkspaceFromSourceFolder0": "Der Arbeitsbereich kann aus dem Quellordner \"{0}\" nicht ermittelt werden.", + "loc.messages.UnableToIndexSources": "Quellen können nicht indiziert werden.", + "loc.messages.UnexpectedDbghelpdllExpected0Actual1": "Die Bibliothek \"dbghelp.dll\" wurde bereits aus einem unerwarteten Pfad geladen. Erwartet: \"{0}\". Tatsächlich: \"{0}\".", + "loc.messages.UnsupportedSourceProvider0": "Nicht unterstützter Quellanbieter \"{0}\" für die Quellindizierung.", + "loc.messages.Win32Error0FromMethod1": "Win32-Fehler \"{0}\" aus der Methode \"{1}\"." +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Strings/resources.resjson/en-US/resources.resjson b/_generated/PublishSymbolsV2/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..bb59d27e121e --- /dev/null +++ b/_generated/PublishSymbolsV2/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,74 @@ +{ + "loc.friendlyName": "Index sources and publish symbols", + "loc.helpMarkDown": "See [more information](https://go.microsoft.com/fwlink/?LinkID=613722) on how to use this task.", + "loc.description": "Index your source code and publish symbols to a file share or Azure Artifacts symbol server", + "loc.instanceNameFormat": "Publish symbols path", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.SymbolsFolder": "Path to symbols folder", + "loc.input.help.SymbolsFolder": "The path to the folder that is searched for symbol files. The default is $(Build.SourcesDirectory). Otherwise specify a rooted path, for example: $(Build.BinariesDirectory)/MyProject", + "loc.input.label.SearchPattern": "Search pattern", + "loc.input.help.SearchPattern": "The pattern used to discover the pdb files to publish.", + "loc.input.label.IndexSources": "Index sources", + "loc.input.help.IndexSources": "Indicates whether to inject source server information into the PDB files. This option is only supported on Windows agents.", + "loc.input.label.PublishSymbols": "Publish symbols", + "loc.input.help.PublishSymbols": "Indicates whether to publish the symbol files.", + "loc.input.label.SymbolServerType": "Symbol server type", + "loc.input.help.SymbolServerType": "Choose where to publish symbols. Symbols published to the Azure Artifacts symbol server are accessible by any user with access to the organization/collection. Azure DevOps Server only supports the \"File share\" option. Follow [these instructions](https://go.microsoft.com/fwlink/?linkid=846265) to use Symbol Server in Azure Artifacts.", + "loc.input.label.SymbolsPath": "Path to publish symbols", + "loc.input.help.SymbolsPath": "The file share that hosts your symbols. This value will be used in the call to `symstore.exe add` as the `/s` parameter.", + "loc.input.label.CompressSymbols": "Compress symbols", + "loc.input.help.CompressSymbols": "Compress symbols when publishing to file share.", + "loc.input.label.SymbolExpirationInDays": "Symbol Expiration (in days)", + "loc.input.help.SymbolExpirationInDays": "The number of days that symbols should be retained.", + "loc.input.label.IndexableFileFormats": "Symbol file formats to publish", + "loc.input.help.IndexableFileFormats": "Which debug formats to publish to the symbol server", + "loc.input.label.DetailedLog": "Verbose logging", + "loc.input.help.DetailedLog": "Use verbose logging.", + "loc.input.label.TreatNotIndexedAsWarning": "Warn if not indexed", + "loc.input.help.TreatNotIndexedAsWarning": "Indicates whether to warn if sources are not indexed for a PDB file. Otherwise the messages are logged as normal output.", + "loc.input.label.UseNetCoreClientTool": "Use NetCore client tool", + "loc.input.help.UseNetCoreClientTool": "Indicates whether to use version of the symbol upload tool that supports DWARF and ELF files. This option only matters on Windows agents. On non-Windows agents, the version of the symbol upload tool that supports DWARF and ELF files will always be used.", + "loc.input.label.SymbolsMaximumWaitTime": "Max wait time (min)", + "loc.input.help.SymbolsMaximumWaitTime": "The number of minutes to wait before failing this task.", + "loc.input.label.SymbolsProduct": "Product", + "loc.input.help.SymbolsProduct": "Specify the product parameter to symstore.exe. The default is $(Build.DefinitionName)", + "loc.input.label.SymbolsVersion": "Version", + "loc.input.help.SymbolsVersion": "Specify the version parameter to symstore.exe. The default is $(Build.BuildNumber)", + "loc.input.label.SymbolsArtifactName": "Artifact name", + "loc.input.help.SymbolsArtifactName": "Specify the artifact name to use for the Symbols artifact. The default is Symbols_$(BuildConfiguration)", + "loc.messages.CleanedUpSemaphoreFile0": "Successfully cleaned up semaphore file '{0}'.", + "loc.messages.CleanUpSemaphoreFile0Error1": "Could not clean up existing semaphore file '{0}'. {1}", + "loc.messages.Error0AccessingSemaphoreFile1Retrying2Seconds": "Error '{0}' accessing semaphore file '{1}'. Retrying in {2:N0} seconds.", + "loc.messages.Error_UnexpectedErrorSymbolsPublishing": "An unexpected error occurred while trying to publish symbols. Exit code(%s) and error(%s)", + "loc.messages.Error_CommandNotRecognized": "The command %s was not recognized.", + "loc.messages.Error_SymbolPublishingToolNotFound": "Symbol publishing tool not found at %s.", + "loc.messages.FailedToLoadDbghelpDllFrom0ErrorCode1": "Failed to load dbghelp.dll from '{0}' with error code '{1}'.", + "loc.messages.FailedToPublishSymbols": "Failed to publish symbols. %s", + "loc.messages.FailedToRunClientTool": "Failed to run client tool. %s", + "loc.messages.Found0Files": "Found {0:N0} files.", + "loc.messages.FoundNFiles": "Found %s files.", + "loc.messages.FreeLibraryDbghelpDllError0": "Failed to free library dbghelp.dll. Error code '{0}'.", + "loc.messages.IndexingNotSupported": "Source indexing is not supported on this OS.", + "loc.messages.Info_RetrievingClientToolUri": "Retrieving client tool from: %s", + "loc.messages.Info_ClientTool": "ClientTool clientToolFilePath: %s", + "loc.messages.NoFilesForIndexing": "No files selected for indexing.", + "loc.messages.NoFilesForPublishing": "No files selected for publishing.", + "loc.messages.NoSourcePathsIn0": "Unable to index sources for symbols file '{0}'. The file does not contain any source path information.", + "loc.messages.OneOrMoreSourceFilesNotIndexedFor0": "Unable to index one or more source files for symbols file '{0}'.", + "loc.messages.PreJobFailedToExecute": "PreJob Failed To Execute.", + "loc.messages.PublishOptionNotSet": "The Publish Symbols option was not set so ignoring publishing.", + "loc.messages.ReachedPublishingMaxWaitTime0Seconds": "Symbol publishing could not be completed. Reached maximum wait time {0:N0} seconds.", + "loc.messages.SemaphoreFile0ExistsRetrying1Seconds": "Semaphore file '{0}' already exists. Retrying symbol publishing in {1:N0} seconds.", + "loc.messages.SemaphoreFile0Minutes1AttemptingCleanup": "Semaphore file '{0}' already exists. File was last accessed over '{1:N0}' minutes ago. Attempting to clean up the file.", + "loc.messages.SkippingIndexing": "Skipping indexing.", + "loc.messages.SourceFolderDeprecated0": "The source folder parameter has been deprecated. Ignoring the value '{0}'.", + "loc.messages.SourceInfoNotRetrievedFrom0Message1": "Indexed source information could not be retrieved from '{0}'. {1}", + "loc.messages.SpacesInTemp": "Source files may not be indexed properly. Temp folder contains spaces.", + "loc.messages.SymbolsPublishedSuccessfully": "Symbols published successfully. %s", + "loc.messages.SymbolStoreLastIdTxtNotFoundAt0": "Symbol store lastid.txt not found at '{0}'.", + "loc.messages.UnableToDetermineWorkspaceFromSourceFolder0": "Unable to determine the workspace from the source folder '{0}'.", + "loc.messages.UnableToIndexSources": "Unable to index sources.", + "loc.messages.UnexpectedDbghelpdllExpected0Actual1": "Library dbghelp.dll is already loaded from an unexpected path. Expected '{0}'. Actual '{0}'.", + "loc.messages.UnsupportedSourceProvider0": "Unsupported source provider '{0}' for source indexing.", + "loc.messages.Win32Error0FromMethod1": "Encountered Win32 error '{0}' from method '{1}'." +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Strings/resources.resjson/es-ES/resources.resjson b/_generated/PublishSymbolsV2/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..e36553b55050 --- /dev/null +++ b/_generated/PublishSymbolsV2/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,74 @@ +{ + "loc.friendlyName": "Indexar código fuente y publicar símbolos", + "loc.helpMarkDown": "Vea [más información](https://go.microsoft.com/fwlink/?LinkID=613722) acerca de cómo usar esta tarea.", + "loc.description": "Indexe el código fuente y publique los símbolos en un recurso compartido de archivos o en el servidor de símbolos de Azure Artifacts.", + "loc.instanceNameFormat": "Publicar ruta de acceso de símbolos", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.SymbolsFolder": "Ruta de acceso a la carpeta de los símbolos", + "loc.input.help.SymbolsFolder": "Ruta de acceso a la carpeta en la que se buscan los archivos de símbolos. El valor predeterminado es $(Build.SourcesDirectory). De lo contrario, especifique una ruta de acceso raíz, por ejemplo: $(Build.BinariesDirectory)/MyProject", + "loc.input.label.SearchPattern": "Patrón de búsqueda", + "loc.input.help.SearchPattern": "Patrón usado para detectar los archivos pdb que se van a publicar.", + "loc.input.label.IndexSources": "Indexar orígenes", + "loc.input.help.IndexSources": "Indique si se debe insertar la información del servidor de origen en los archivos PDB. Esta opción solo se admite en agentes de Windows.", + "loc.input.label.PublishSymbols": "Publicar símbolos", + "loc.input.help.PublishSymbols": "Indica si deben publicarse los archivos de símbolos.", + "loc.input.label.SymbolServerType": "Tipo de servidor de símbolos", + "loc.input.help.SymbolServerType": "Elija dónde deben publicarse los símbolos. Todo usuario con acceso a la organización o colección puede acceder a los símbolos publicados en el servidor de sí­mbolos de Azure Artifacts. Azure DevOps Server solo admite la opción \"Recurso compartido de archivos\". Siga [estas instrucciones](https://go.microsoft.com/fwlink/?linkid=846265) para usar el servidor de símbolos en Azure Artifacts.", + "loc.input.label.SymbolsPath": "Ruta de acceso para publicar símbolos", + "loc.input.help.SymbolsPath": "El recurso compartido de archivos que hospeda los símbolos. Este valor se usa en la llamada a \"symstore.exe add\" como parámetro \"/s\".", + "loc.input.label.CompressSymbols": "Comprimir símbolos", + "loc.input.help.CompressSymbols": "Comprima los símbolos al publicar en el recurso compartido de archivos.", + "loc.input.label.SymbolExpirationInDays": "Expiración de símbolos (en días)", + "loc.input.help.SymbolExpirationInDays": "Número de días que deben conservarse los símbolos.", + "loc.input.label.IndexableFileFormats": "Formatos de archivo de símbolos que se van a publicar", + "loc.input.help.IndexableFileFormats": "Qué formatos de depuración se publicarán en el servidor de símbolos", + "loc.input.label.DetailedLog": "Registro detallado", + "loc.input.help.DetailedLog": "Usar registro detallado.", + "loc.input.label.TreatNotIndexedAsWarning": "Advertir si no está indexado", + "loc.input.help.TreatNotIndexedAsWarning": "Indica si se debe generar una advertencia cuando los orígenes no están indexados para un archivo PDB. En caso contrario, los mensajes se registran como salida normal.", + "loc.input.label.UseNetCoreClientTool": "Usar la herramienta cliente de NetCore", + "loc.input.help.UseNetCoreClientTool": "Indique si se debe usar la versión de la herramienta de carga de símbolos compatible con archivos DESAN Y ELF. Esta opción solo importa en agentes de Windows. En agentes que no son de Windows, siempre se usará la versión de la herramienta de carga de símbolos que admite archivos DESAN Y ELF.", + "loc.input.label.SymbolsMaximumWaitTime": "Tiempo máx. de espera: (minutos)", + "loc.input.help.SymbolsMaximumWaitTime": "Número de minutos de espera antes de generarse un error en la tarea.", + "loc.input.label.SymbolsProduct": "Producto", + "loc.input.help.SymbolsProduct": "Especifique el parámetro de producto en symstore.exe. El valor predeterminado es $(Build.DefinitionName)", + "loc.input.label.SymbolsVersion": "Versión", + "loc.input.help.SymbolsVersion": "Especifique el parámetro de versión en symstore.exe. El valor predeterminado es $(Build.BuildNumber)", + "loc.input.label.SymbolsArtifactName": "Nombre del artefacto", + "loc.input.help.SymbolsArtifactName": "Especifique el nombre de artefacto que se debe usar para el artefacto Symbols. De forma predeterminada, es Symbols_$(BuildConfiguration)", + "loc.messages.CleanedUpSemaphoreFile0": "Se limpió correctamente el archivo de semáforo '{0}'.", + "loc.messages.CleanUpSemaphoreFile0Error1": "No se ha podido limpiar el archivo de semáforo existente '{0}'. {1}", + "loc.messages.Error0AccessingSemaphoreFile1Retrying2Seconds": "Error '{0}' al acceder al archivo de semáforo '{1}'. Se volverá a intentar en {2:N0} segundos.", + "loc.messages.Error_UnexpectedErrorSymbolsPublishing": "Error inesperado al intentar publicar símbolos. Código de salida: (%s). Error: (%s)", + "loc.messages.Error_CommandNotRecognized": "No se reconoce el comando %s.", + "loc.messages.Error_SymbolPublishingToolNotFound": "No se encontró la herramienta de publicación de símbolos en %s.", + "loc.messages.FailedToLoadDbghelpDllFrom0ErrorCode1": "No se pudo cargar dbghelp.dll de '{0}' con el código de error '{1}'.", + "loc.messages.FailedToPublishSymbols": "No se han podido publicar los símbolos. %s", + "loc.messages.FailedToRunClientTool": "No se pudo ejecutar la herramienta cliente. %s", + "loc.messages.Found0Files": "Se encontraron {0:N0} archivos.", + "loc.messages.FoundNFiles": "Se encontraron %s archivos.", + "loc.messages.FreeLibraryDbghelpDllError0": "Error al liberar la biblioteca dbghelp.dll. Código de error '{0}'.", + "loc.messages.IndexingNotSupported": "No se admite la indización de origen en este sistema operativo.", + "loc.messages.Info_RetrievingClientToolUri": "Recuperando herramienta cliente de: %s", + "loc.messages.Info_ClientTool": "ClientTool clientToolFilePath: %s", + "loc.messages.NoFilesForIndexing": "No hay archivos seleccionados para indexación.", + "loc.messages.NoFilesForPublishing": "No hay archivos seleccionados para publicación.", + "loc.messages.NoSourcePathsIn0": "No se pueden indexar los orígenes del archivo de símbolos '{0}'. El archivo no contiene ninguna información de la ruta de acceso de origen.", + "loc.messages.OneOrMoreSourceFilesNotIndexedFor0": "No se pueden indexar uno o varios archivos del archivo de símbolos '{0}'.", + "loc.messages.PreJobFailedToExecute": "No se pudo ejecutar PreJob.", + "loc.messages.PublishOptionNotSet": "No se estableció la opción Publicar símbolos, así que se omitirá la publicación.", + "loc.messages.ReachedPublishingMaxWaitTime0Seconds": "No se puede completar la publicación de símbolos. Se ha alcanzado el tiempo máximo de espera de {0:N0} segundos.", + "loc.messages.SemaphoreFile0ExistsRetrying1Seconds": "Ya existe el archivo de semáforo '{0}'. Se reintentará la publicación de símbolos en {1:N0} segundos.", + "loc.messages.SemaphoreFile0Minutes1AttemptingCleanup": "Ya existe el archivo de semáforo '{0}'. Se accedió por última vez al archivo hace '{1:N0}' minutos. Se intentará limpiar el archivo.", + "loc.messages.SkippingIndexing": "Se omitirá la indexación.", + "loc.messages.SourceFolderDeprecated0": "El parámetro de la carpeta de origen está en desuso. Se omitirá el valor '{0}'.", + "loc.messages.SourceInfoNotRetrievedFrom0Message1": "No se ha podido recuperar la información del origen indexado de '{0}'. {1}", + "loc.messages.SpacesInTemp": "Puede que los archivos de origen no estén correctamente indexados. La carpeta temporal contiene espacios.", + "loc.messages.SymbolsPublishedSuccessfully": "Símbolos publicados correctamente. %s", + "loc.messages.SymbolStoreLastIdTxtNotFoundAt0": "No se encontró el archivo lastid.txt del almacén de símbolos en '{0}'.", + "loc.messages.UnableToDetermineWorkspaceFromSourceFolder0": "No se puede determinar el área de trabajo desde la carpeta de origen '{0}'.", + "loc.messages.UnableToIndexSources": "No se pueden indexar los orígenes.", + "loc.messages.UnexpectedDbghelpdllExpected0Actual1": "La biblioteca dbghelp.dll ya está cargada desde una ruta inesperada. Se esperaba '{0}'. Real '{0}'.", + "loc.messages.UnsupportedSourceProvider0": "Proveedor de origen no admitido '{0}' para la indexación de origen.", + "loc.messages.Win32Error0FromMethod1": "Error de Win32 '{0}' del método '{1}'." +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/PublishSymbolsV2/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..f23871299a3a --- /dev/null +++ b/_generated/PublishSymbolsV2/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,74 @@ +{ + "loc.friendlyName": "Indexer des sources et publier des symboles", + "loc.helpMarkDown": "Consultez [les informations supplémentaires ](https://go.microsoft.com/fwlink/?LinkID=613722) sur l'utilisation de cette tâche.", + "loc.description": "Indexer du code source et publier des symboles sur un partage de fichiers ou un serveur de symboles Azure Artifacts", + "loc.instanceNameFormat": "Chemin de publication des symboles", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.SymbolsFolder": "Chemin d'accès du dossier de symboles", + "loc.input.help.SymbolsFolder": "Chemin du dossier de recherche des fichiers de symboles. La valeur par défaut est $(Build.SourcesDirectory). Sinon, spécifiez un chemin associé à une racine. Exemple : $(Build.BinariesDirectory)/MyProject", + "loc.input.label.SearchPattern": "Modèle de recherche", + "loc.input.help.SearchPattern": "Modèle utilisé pour découvrir les fichiers pdb à publier.", + "loc.input.label.IndexSources": "Indexer les sources", + "loc.input.help.IndexSources": "Indique s’il faut injecter des informations sur le serveur source dans les fichiers PDB. Cette option est uniquement prise en charge sur les agents Windows.", + "loc.input.label.PublishSymbols": "Publier les symboles", + "loc.input.help.PublishSymbols": "Indique si les fichiers de symboles doivent être publiés.", + "loc.input.label.SymbolServerType": "Type de serveur de symboles", + "loc.input.help.SymbolServerType": "Choisissez l'emplacement de publication des symboles. Les symboles publiés sur le serveur de symboles Azure Artifacts sont accessibles à tous les utilisateurs ayant accès à l'organisation/la collection. Azure DevOps Server prend en charge uniquement l'option Partage de fichiers. Suivez [ces instructions](https://go.microsoft.com/fwlink/?linkid=846265) pour utiliser le serveur de symboles dans Azure Artifacts.", + "loc.input.label.SymbolsPath": "Chemin d'accès pour publier les symboles", + "loc.input.help.SymbolsPath": "Partage de fichiers qui héberge vos symboles. Cette valeur est utilisée dans l'appel de 'symstore.exe add' sous la forme du paramètre '/s'.", + "loc.input.label.CompressSymbols": "Compresser les symboles", + "loc.input.help.CompressSymbols": "Compressez les symboles au moment de la publication sur un partage de fichiers.", + "loc.input.label.SymbolExpirationInDays": "Expiration des symboles (en jours)", + "loc.input.help.SymbolExpirationInDays": "Nombre de jours pendant lesquels les symboles doivent être conservés.", + "loc.input.label.IndexableFileFormats": "Formats de fichier de symboles à publier", + "loc.input.help.IndexableFileFormats": "Formats de débogage à publier sur le serveur de symboles", + "loc.input.label.DetailedLog": "Journalisation détaillée", + "loc.input.help.DetailedLog": "Utilisez la journalisation détaillée.", + "loc.input.label.TreatNotIndexedAsWarning": "Avertir s'il n'y a pas d'indexation", + "loc.input.help.TreatNotIndexedAsWarning": "Indique si des avertissements s'affichent quand les sources ne sont pas indexées pour un fichier PDB. Sinon, les messages sont consignés comme des sorties standard.", + "loc.input.label.UseNetCoreClientTool": "Utiliser l’outil client NetCore", + "loc.input.help.UseNetCoreClientTool": "Indique s’il faut utiliser la version de l’outil de chargement de symboles qui prend en charge les fichiers DWARF et ELF. Cette option n’est importante que sur les agents Windows. Sur les agents non-Windows, la version de l’outil de chargement de symboles qui prend en charge les fichiers MIGRATE et ELF est toujours utilisée.", + "loc.input.label.SymbolsMaximumWaitTime": "Temps d'attente maximal (min)", + "loc.input.help.SymbolsMaximumWaitTime": "Nombre de minutes d'attente avant l'échec de cette tâche.", + "loc.input.label.SymbolsProduct": "Produit", + "loc.input.help.SymbolsProduct": "Spécifiez le paramètre de produit pour symstore.exe. La valeur par défaut est $(Build.DefinitionName)", + "loc.input.label.SymbolsVersion": "Version", + "loc.input.help.SymbolsVersion": "Spécifiez le paramètre de version pour symstore.exe. La valeur par défaut est $(Build.BuildNumber)", + "loc.input.label.SymbolsArtifactName": "Nom de l'artefact", + "loc.input.help.SymbolsArtifactName": "Spécifiez le nom de l'artefact à utiliser pour l'artefact Symbols. Le nom par défaut est Symbols_$(BuildConfiguration)", + "loc.messages.CleanedUpSemaphoreFile0": "Nettoyage réussi du fichier sémaphore '{0}'.", + "loc.messages.CleanUpSemaphoreFile0Error1": "Impossible de nettoyer le fichier sémaphore existant '{0}'. {1}", + "loc.messages.Error0AccessingSemaphoreFile1Retrying2Seconds": "Erreur '{0}' durant l'accès au fichier sémaphore '{1}'. Nouvelle tentative dans {2:N0} secondes.", + "loc.messages.Error_UnexpectedErrorSymbolsPublishing": "Une erreur inattendue s’est produite lors de la tentative de publication des symboles. Code de sortie(%s) et erreur(%s)", + "loc.messages.Error_CommandNotRecognized": "La commande %s n'a pas été reconnue.", + "loc.messages.Error_SymbolPublishingToolNotFound": "Outil de publication de symboles introuvable à %s.", + "loc.messages.FailedToLoadDbghelpDllFrom0ErrorCode1": "Échec du chargement de dbghelp.dll à partir de {0}. Code d'erreur : '{1}'.", + "loc.messages.FailedToPublishSymbols": "Échec de la publication des symboles. %s", + "loc.messages.FailedToRunClientTool": "Échec de l’exécution de l’outil client. %s", + "loc.messages.Found0Files": "{0:N0} fichiers trouvés.", + "loc.messages.FoundNFiles": "Fichiers %s trouvés.", + "loc.messages.FreeLibraryDbghelpDllError0": "Échec de la libération de la bibliothèque dbghelp.dll. Code d'erreur '{0}'.", + "loc.messages.IndexingNotSupported": "L’indexation source n’est pas prise en charge sur ce système d’exploitation.", + "loc.messages.Info_RetrievingClientToolUri": "Récupération de l’outil client à partir de : %s", + "loc.messages.Info_ClientTool": "ClientTool clientToolFilePath : %s", + "loc.messages.NoFilesForIndexing": "Aucun fichier sélectionné pour l'indexation.", + "loc.messages.NoFilesForPublishing": "Aucun fichier sélectionné pour la publication.", + "loc.messages.NoSourcePathsIn0": "Impossible d'indexer les sources du fichier de symboles '{0}'. Le fichier ne contient pas d'informations sur le chemin source.", + "loc.messages.OneOrMoreSourceFilesNotIndexedFor0": "Impossible d'indexer un ou plusieurs fichiers sources pour le fichier de symboles '{0}'.", + "loc.messages.PreJobFailedToExecute": "Échec de l’exécution de PreJob.", + "loc.messages.PublishOptionNotSet": "L’option Publier les symboles n’a pas été définie, la publication sera ignorée.", + "loc.messages.ReachedPublishingMaxWaitTime0Seconds": "La publication des symboles n'a pas pu être achevée. Le délai d'attente maximal de {0:N0} secondes a été atteint.", + "loc.messages.SemaphoreFile0ExistsRetrying1Seconds": "Le fichier sémaphore '{0}' existe déjà. Nouvelle tentative de publication de symboles dans {1:N0} secondes.", + "loc.messages.SemaphoreFile0Minutes1AttemptingCleanup": "Le fichier sémaphore '{0}' existe déjà. Le dernier accès au fichier a eu lieu depuis plus de '{1:N0}' minutes. Tentative de nettoyage du fichier.", + "loc.messages.SkippingIndexing": "Indexation ignorée.", + "loc.messages.SourceFolderDeprecated0": "Le paramètre du dossier source est déconseillé. Valeur '{0}' ignorée.", + "loc.messages.SourceInfoNotRetrievedFrom0Message1": "Impossible de récupérer les informations sur les sources indexées à partir de '{0}'. {1}", + "loc.messages.SpacesInTemp": "Les fichiers sources ne sont peut-être pas indexés correctement. Le dossier temporaire contient des espaces.", + "loc.messages.SymbolsPublishedSuccessfully": "Les symboles ont été publiés. %s", + "loc.messages.SymbolStoreLastIdTxtNotFoundAt0": "Fichier lastid.txt du magasin de symboles introuvable sur '{0}'.", + "loc.messages.UnableToDetermineWorkspaceFromSourceFolder0": "Impossible de déterminer l'espace de travail à partir du dossier source '{0}'.", + "loc.messages.UnableToIndexSources": "Impossible d'indexer les sources.", + "loc.messages.UnexpectedDbghelpdllExpected0Actual1": "La bibliothèque dbghelp.dll est déjà chargée à partir d'un chemin inattendu. Le chemin attendu est '{0}'. Le chemin réel est '{0}'.", + "loc.messages.UnsupportedSourceProvider0": "Fournisseur de source '{0}' non pris en charge pour l'indexation des sources.", + "loc.messages.Win32Error0FromMethod1": "Erreur Win32 '{0}' rencontrée dans la méthode '{1}'." +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Strings/resources.resjson/it-IT/resources.resjson b/_generated/PublishSymbolsV2/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..60ee10afd052 --- /dev/null +++ b/_generated/PublishSymbolsV2/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,74 @@ +{ + "loc.friendlyName": "Indicizza origini e pubblica simboli", + "loc.helpMarkDown": "Per informazioni sull'uso di questa attività, vedere [Altre informazioni](https://go.microsoft.com/fwlink/?LinkID=613722).", + "loc.description": "Consente di indicizzare il codice sorgente e di pubblicare i simboli in una condivisione file o in server dei simboli di Azure Artifacts", + "loc.instanceNameFormat": "Percorso di pubblicazione simboli", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.SymbolsFolder": "Percorso della cartella dei simboli", + "loc.input.help.SymbolsFolder": "Percorso della cartella in cui vengono cercati i file di simboli. L'impostazione predefinita è $(Build.SourcesDirectory). In caso contrario, specificare un percorso completo, ad esempio: $(Build.BinariesDirectory)/MyProject", + "loc.input.label.SearchPattern": "Criteri di ricerca", + "loc.input.help.SearchPattern": "Criterio usato per individuare i file PDB da pubblicare.", + "loc.input.label.IndexSources": "Indicizza origini", + "loc.input.help.IndexSources": "Indica se inserire informazioni sul server di origine nei file PDB. Questa opzione è supportata solo negli agenti Windows.", + "loc.input.label.PublishSymbols": "Pubblica simboli", + "loc.input.help.PublishSymbols": "Indica se pubblicare i file di simboli.", + "loc.input.label.SymbolServerType": "Tipo di server dei simboli", + "loc.input.help.SymbolServerType": "Consente di scegliere dove pubblicare i simboli. I simboli pubblicati nel server dei simboli di Azure Artifacts sono accessibili a qualsiasi utente con accesso all'organizzazione o alla raccolta. Azure DevOps Server supporta solo l'opzione \"Condivisione file\". Seguire [queste istruzioni](https://go.microsoft.com/fwlink/?linkid=846265) per usare il server dei simboli in Azure Artifacts.", + "loc.input.label.SymbolsPath": "Percorso per la pubblicazione dei simboli", + "loc.input.help.SymbolsPath": "Condivisione file che ospita i simboli. Questo valore verrà usato nella chiamata a `symstore.exe add` come parametro `/s`.", + "loc.input.label.CompressSymbols": "Comprimi simboli", + "loc.input.help.CompressSymbols": "Comprime i simboli durante la pubblicazione nella condivisione file.", + "loc.input.label.SymbolExpirationInDays": "Scadenza simbolo (in giorni)", + "loc.input.help.SymbolExpirationInDays": "Numero di giorni di conservazione dei simboli.", + "loc.input.label.IndexableFileFormats": "Formati di file di simboli da pubblicare", + "loc.input.help.IndexableFileFormats": "I formati di debug da pubblicare nel server dei simboli", + "loc.input.label.DetailedLog": "Registrazione dettagliata", + "loc.input.help.DetailedLog": "Consente di usare la registrazione dettagliata.", + "loc.input.label.TreatNotIndexedAsWarning": "Avvisa se non indicizzate", + "loc.input.help.TreatNotIndexedAsWarning": "Indica se verranno visualizzati avvisi nel caso in cui le origini non sono indicizzate per un file PDB. In caso contrario, i messaggi verranno registrati come output normale.", + "loc.input.label.UseNetCoreClientTool": "Usare lo strumento client NetCore", + "loc.input.help.UseNetCoreClientTool": "Indica se usare la versione dello strumento di caricamento dei simboli che supporta i file DWARF ed ELF. Questa opzione è importante solo per gli agenti Windows. Negli agenti non Windows verrà sempre usata la versione dello strumento di caricamento dei simboli che supporta i file DWARF ed ELF.", + "loc.input.label.SymbolsMaximumWaitTime": "Tempo massimo di attesa (min)", + "loc.input.help.SymbolsMaximumWaitTime": "Numero di minuti da attendere prima che questa attività venga considerata non riuscita.", + "loc.input.label.SymbolsProduct": "Prodotto", + "loc.input.help.SymbolsProduct": "Consente di specificare il parametro del prodotto per symstore.exe. L'impostazione predefinita è $(Build.DefinitionName)", + "loc.input.label.SymbolsVersion": "Versione", + "loc.input.help.SymbolsVersion": "Consente di specificare il parametro della versione per symstore.exe. L'impostazione predefinita è $(Build.BuildNumber)", + "loc.input.label.SymbolsArtifactName": "Nome dell'artefatto", + "loc.input.help.SymbolsArtifactName": "Specificare il nome dell'artefatto da usare per l'elemento Symbols. L'impostazione predefinita è Symbols_$(BuildConfiguration)", + "loc.messages.CleanedUpSemaphoreFile0": "Il file di semaforo '{0}' è stato pulito.", + "loc.messages.CleanUpSemaphoreFile0Error1": "Non è stato possibile pulire il file di semaforo esistente '{0}'. {1}", + "loc.messages.Error0AccessingSemaphoreFile1Retrying2Seconds": "Durante l'accesso al file di semaforo '{1}' si è verificato l'errore '{0}'. Verrà effettuato un nuovo tentativo tra {2:N0} secondi.", + "loc.messages.Error_UnexpectedErrorSymbolsPublishing": "Si è verificato un errore imprevisto durante il tentativo di pubblicare simboli. Codice di uscita: %s. Errore:%s", + "loc.messages.Error_CommandNotRecognized": "Il comando %s non è stato riconosciuto.", + "loc.messages.Error_SymbolPublishingToolNotFound": "Lo strumento di pubblicazione dei simboli non è stato trovato in %s.", + "loc.messages.FailedToLoadDbghelpDllFrom0ErrorCode1": "Non è stato possibile caricare il file dbghelp.dll da '{0}'. Codice errore: '{1}'.", + "loc.messages.FailedToPublishSymbols": "Non è stato possibile pubblicare i simboli. %s", + "loc.messages.FailedToRunClientTool": "Non è stato possibile eseguire lo strumento client. %s", + "loc.messages.Found0Files": "Sono stati trovati {0:N0} file.", + "loc.messages.FoundNFiles": "Sono stati trovati %s file.", + "loc.messages.FreeLibraryDbghelpDllError0": "Non è stato possibile liberare la libreria dbghelp.dll. Codice errore: '{0}'.", + "loc.messages.IndexingNotSupported": "L'indicizzazione di origine non è supportata in questo sistema operativo.", + "loc.messages.Info_RetrievingClientToolUri": "Recupero dello strumento client da: %s", + "loc.messages.Info_ClientTool": "ClientTool clientToolFilePath: %s", + "loc.messages.NoFilesForIndexing": "Non è stato selezionato alcun file per l'indicizzazione.", + "loc.messages.NoFilesForPublishing": "Non è stato selezionato alcun file per la pubblicazione.", + "loc.messages.NoSourcePathsIn0": "Non è possibile indicizzare le origini per il file di simboli '{0}'. Il file non contiene informazioni sui percorsi di origine.", + "loc.messages.OneOrMoreSourceFilesNotIndexedFor0": "Non è possibile indicizzare uno o più file di origine per il file di simboli '{0}'.", + "loc.messages.PreJobFailedToExecute": "Non è stato possibile eseguire il preprocesso.", + "loc.messages.PublishOptionNotSet": "L'opzione Pubblica simboli non è stata impostata, quindi la pubblicazione verrà ignorata.", + "loc.messages.ReachedPublishingMaxWaitTime0Seconds": "Non è stato possibile completare la pubblicazione dei simboli. È stato raggiunto il tempo massimo di attesa pari a {0:N0} secondi.", + "loc.messages.SemaphoreFile0ExistsRetrying1Seconds": "Il file di semaforo '{0}' esiste già. Verrà effettuato un nuovo tentativo di pubblicazione dei simboli tra {1:N0} secondi.", + "loc.messages.SemaphoreFile0Minutes1AttemptingCleanup": "Il file di semaforo {0} esiste già e l'ultimo accesso al file è stato effettuato più di '{1:N0}' minuti fa. Verrà effettuato un tentativo di pulizia del file.", + "loc.messages.SkippingIndexing": "L'indicizzazione verrà ignorata.", + "loc.messages.SourceFolderDeprecated0": "Il parametro Cartella di origine è stato deprecato. Il valore '{0}' verrà ignorato.", + "loc.messages.SourceInfoNotRetrievedFrom0Message1": "Non è stato possibile recuperare le informazioni sull'origine indicizzate da '{0}'. {1}", + "loc.messages.SpacesInTemp": "È possibile che i file di origine non siano indicizzati correttamente. La cartella Temp contiene spazi.", + "loc.messages.SymbolsPublishedSuccessfully": "I simboli sono stati pubblicati. %s", + "loc.messages.SymbolStoreLastIdTxtNotFoundAt0": "Il file lastid.txt dell'archivio simboli non è stato trovato in '{0}'.", + "loc.messages.UnableToDetermineWorkspaceFromSourceFolder0": "Non è possibile determinare l'area di lavoro dalla cartella di origine '{0}'.", + "loc.messages.UnableToIndexSources": "Non è possibile indicizzare le origini.", + "loc.messages.UnexpectedDbghelpdllExpected0Actual1": "La libreria dbghelp.dll è già stata caricata da un percorso imprevisto. Percorso previsto: '{0}'. Percorso effettivo: '{0}'.", + "loc.messages.UnsupportedSourceProvider0": "Il provider di origine '{0}' non è supportato per l'indicizzazione origine.", + "loc.messages.Win32Error0FromMethod1": "È stato rilevato l'errore Win32 '{0}' restituito dal metodo '{1}'." +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/PublishSymbolsV2/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..f1fd02eab3fd --- /dev/null +++ b/_generated/PublishSymbolsV2/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,74 @@ +{ + "loc.friendlyName": "ソースのインデックス作成とシンボルの公開", + "loc.helpMarkDown": "このタスクの使用方法については、[詳細情報](https://go.microsoft.com/fwlink/?LinkID=613722)を参照してください。", + "loc.description": "ソース コードにインデックスを作成し、シンボルをファイル共有または Azure Artifacts シンボル サーバーに公開します", + "loc.instanceNameFormat": "シンボル パスを発行する", + "loc.group.displayName.advanced": "詳細設定", + "loc.input.label.SymbolsFolder": "シンボル フォルダーへのパス", + "loc.input.help.SymbolsFolder": "シンボル ファイルを検索するソース フォルダーへのパス。既定値は $(Build.SourcesDirectory) です。それ以外の場合は、$(Build.BinariesDirectory)/MyProject などのルート指定のパスを指定してください", + "loc.input.label.SearchPattern": "検索パターン", + "loc.input.help.SearchPattern": "発行する PDB ファイルの検出に使用するパターン。", + "loc.input.label.IndexSources": "ソースのインデックスを作成する", + "loc.input.help.IndexSources": "PDB ファイルにソース サーバー情報を挿入するかどうかを示します。このオプションは Windows エージェントでのみサポートされています。", + "loc.input.label.PublishSymbols": "シンボルを発行する", + "loc.input.help.PublishSymbols": "シンボル ファイルを発行するかどうかを示します。", + "loc.input.label.SymbolServerType": "シンボル サーバーの種類", + "loc.input.help.SymbolServerType": "シンボルを公開する場所を選択します。Azure Artifacts シンボル サーバーに公開されたシンボルには、組織/コレクションにアクセスできるユーザーなら誰でもアクセスできます。Azure DevOps Server は、\"ファイル共有\" オプションのみをサポートしています。Azure Artifacts でシンボル サーバーを使用するには、[こちらの手順](https://go.microsoft.com/fwlink/?linkid=846265)に従ってください。", + "loc.input.label.SymbolsPath": "シンボルを発行するためのパス", + "loc.input.help.SymbolsPath": "使用しているシンボルをホストするファイル共有。この値は、`/s` パラメーターとして `symstore.exe add` への呼び出しで使用されます。", + "loc.input.label.CompressSymbols": "シンボルを圧縮する", + "loc.input.help.CompressSymbols": "ファイル共有に公開する際に、シンボルを圧縮します。", + "loc.input.label.SymbolExpirationInDays": "有効期間 (日数)", + "loc.input.help.SymbolExpirationInDays": "シンボルを保持する日数。", + "loc.input.label.IndexableFileFormats": "公開するシンボルのファイル形式", + "loc.input.help.IndexableFileFormats": "シンボル サーバーに発行するデバッグ形式", + "loc.input.label.DetailedLog": "詳細なログ", + "loc.input.help.DetailedLog": "詳細なログを使用します。", + "loc.input.label.TreatNotIndexedAsWarning": "インデックス化されていない場合は警告します", + "loc.input.help.TreatNotIndexedAsWarning": "ソースが PDB ファイルに対してインデックス化されていない場合は警告するかどうか指定します。指定しない場合、メッセージは通常の出力として記録されます。", + "loc.input.label.UseNetCoreClientTool": "NetCore クライアント ツールを使用する", + "loc.input.help.UseNetCoreClientTool": "DWARF および ELF ファイルをサポートするシンボル アップロード ツールのバージョンを使用するかどうかを示します。このオプションは、Windows エージェントでのみ重要です。Windows 以外のエージェントでは、DWARF および ELF ファイルをサポートするシンボル アップロード ツールのバージョンが常に使用されます。", + "loc.input.label.SymbolsMaximumWaitTime": "最大待機時間 (分)", + "loc.input.help.SymbolsMaximumWaitTime": "このタスクを失敗として扱う前に待機する時間 (分)", + "loc.input.label.SymbolsProduct": "製品", + "loc.input.help.SymbolsProduct": "symstore.exe への製品パラメーターを指定します。既定値は $(Build.DefinitionName) です。", + "loc.input.label.SymbolsVersion": "バージョン", + "loc.input.help.SymbolsVersion": "symstore.exe へのバージョン パラメーターを指定します。既定値は $(Build.BuildNumber) です。", + "loc.input.label.SymbolsArtifactName": "成果物名", + "loc.input.help.SymbolsArtifactName": "シンボルの成果物に使用するための、成果物の名前を指定します。既定は Symbols_$(BuildConfiguration) です", + "loc.messages.CleanedUpSemaphoreFile0": "セマフォ ファイル '{0}' を正常にクリーンアップしました。", + "loc.messages.CleanUpSemaphoreFile0Error1": "既存のセマフォ ファイル '{0}' をクリーンアップできませんでした。{1}", + "loc.messages.Error0AccessingSemaphoreFile1Retrying2Seconds": "セマフォ ファイル '{1}' にアクセス中にエラー '{0}' が発生しました。{2:N0} 秒後に再試行します。", + "loc.messages.Error_UnexpectedErrorSymbolsPublishing": "パッケージを公開しようとして予期しないエラーが発生しました。終了コード (%s) とエラー (%s)", + "loc.messages.Error_CommandNotRecognized": "コマンド %s を認識できませんでした。", + "loc.messages.Error_SymbolPublishingToolNotFound": "シンボル発行ツールが %s に見つかりません。", + "loc.messages.FailedToLoadDbghelpDllFrom0ErrorCode1": "{0}' からの dbghelp.dll の読み込みに失敗し、エラー コード '{1}' が返されました。", + "loc.messages.FailedToPublishSymbols": "シンボルを公開できませんでした。%s", + "loc.messages.FailedToRunClientTool": "クライアント ツールを実行できませんでした。%s", + "loc.messages.Found0Files": "{0:N0} ファイルが見つかりました。", + "loc.messages.FoundNFiles": "%s 個ファイルが見つかりました。", + "loc.messages.FreeLibraryDbghelpDllError0": "ライブラリ dbghelp.dll を解放できませんでした。エラー コード '{0}'。", + "loc.messages.IndexingNotSupported": "ソースのインデックス作成は、この OS ではサポートされていません。", + "loc.messages.Info_RetrievingClientToolUri": "クライアント ツールの取得元: %s", + "loc.messages.Info_ClientTool": "ClientTool clientToolFilePath: %s", + "loc.messages.NoFilesForIndexing": "インデックスを作成するファイルが選択されていません。", + "loc.messages.NoFilesForPublishing": "発行するファイルが選択されていません。", + "loc.messages.NoSourcePathsIn0": "シンボル ファイル '{0}' のソースにインデックスを作成することはできません。ファイルにソース パスの情報が含まれていません。", + "loc.messages.OneOrMoreSourceFilesNotIndexedFor0": "シンボル ファイル '{0}' の 1 つ以上のソース ファイルにインデックスを作成できません。", + "loc.messages.PreJobFailedToExecute": "PreJob を実行できませんでした。", + "loc.messages.PublishOptionNotSet": "[シンボルの公開] オプションが設定されなかったため、パブリッシングは無視されます。", + "loc.messages.ReachedPublishingMaxWaitTime0Seconds": "シンボルの発行を完了できませんでした。最大待機時間 {0:N0} 秒に達しました。", + "loc.messages.SemaphoreFile0ExistsRetrying1Seconds": "セマフォ ファイル '{0}' は既に存在しています。{1:N0} 秒後にシンボルの発行を再試行します。", + "loc.messages.SemaphoreFile0Minutes1AttemptingCleanup": "セマフォ ファイル '{0}' は既に存在しています。ファイルへの最終アクセスは '{1:N0}' 分前です。ファイルのクリーンアップを試行中です。", + "loc.messages.SkippingIndexing": "インデックス作成をスキップしています。", + "loc.messages.SourceFolderDeprecated0": "ソース ファルダーのパラメーターは非推奨です。値 '{0}' を無視しています。", + "loc.messages.SourceInfoNotRetrievedFrom0Message1": "インデックス付きのソース情報を '{0}' から取得できませんでした。{1}", + "loc.messages.SpacesInTemp": "ソース ファイルに正しくインデックスが作成されていない可能性があります。一時フォルダーにスペースが含まれています。", + "loc.messages.SymbolsPublishedSuccessfully": "シンボルは正常に公開されました。%s", + "loc.messages.SymbolStoreLastIdTxtNotFoundAt0": "シンボル ストア lastid.txt が '{0}' で見つかりません。", + "loc.messages.UnableToDetermineWorkspaceFromSourceFolder0": "ソース フォルダー '{0}' からのワークスペースを決定できません。", + "loc.messages.UnableToIndexSources": "ソースのインデックス作成ができません。", + "loc.messages.UnexpectedDbghelpdllExpected0Actual1": "ライブラリ dbghelp.dll は予期しないパスから既に読み込まれています。必要なパス '{0}'。実際のパス '{0}'。", + "loc.messages.UnsupportedSourceProvider0": "ソースのインデックス作成のサポートされていないソース プロバイダー '{0}'。", + "loc.messages.Win32Error0FromMethod1": "メソッド '{1}' から Win32 エラー '{0}' が発生しました。" +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/PublishSymbolsV2/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..6f06ff43aa52 --- /dev/null +++ b/_generated/PublishSymbolsV2/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,74 @@ +{ + "loc.friendlyName": "소스 인덱싱 및 기호 게시", + "loc.helpMarkDown": "이 작업을 사용하는 방법에 대한 자세한 내용은 [자세한 정보](https://go.microsoft.com/fwlink/?LinkID=613722)를 참조하세요.", + "loc.description": "소스 코드를 인덱싱하고 파일 공유 또는 Azure Artifacts 기호 서버에 기호를 게시합니다.", + "loc.instanceNameFormat": "기호 경로 게시", + "loc.group.displayName.advanced": "고급", + "loc.input.label.SymbolsFolder": "기호 폴더 경로", + "loc.input.help.SymbolsFolder": "기호 파일을 검색할 폴더의 경로입니다. 기본값은 $(Build.SourcesDirectory)입니다. 그렇지 않으면 루트 경로를 지정하세요(예: $(Build.BinariesDirectory)/MyProject).", + "loc.input.label.SearchPattern": "검색 패턴", + "loc.input.help.SearchPattern": "게시할 pdb 파일을 검색하는 데 사용된 패턴입니다.", + "loc.input.label.IndexSources": "소스 인덱싱", + "loc.input.help.IndexSources": "원본 서버 정보를 PDB 파일에 주입할지 여부를 나타냅니다. 이 옵션은 Windows 에이전트에서만 지원됩니다.", + "loc.input.label.PublishSymbols": "기호 게시", + "loc.input.help.PublishSymbols": "기호 파일을 게시할지 여부를 나타냅니다.", + "loc.input.label.SymbolServerType": "기호 서버 유형", + "loc.input.help.SymbolServerType": "기호를 게시할 위치를 선택합니다. Azure Artifacts 기호 서버에 게시된 기호는 조직/컬렉션에 대한 액세스 권한이 있는 모든 사용자가 액세스할 수 있습니다. Azure DevOps Server는 \"파일 공유\" 옵션만 지원합니다. Azure Artifacts의 기호 서버를 사용하려면 [이 지침](https://go.microsoft.com/fwlink/?linkid=846265)을 따르세요.", + "loc.input.label.SymbolsPath": "기호를 게시할 경로", + "loc.input.help.SymbolsPath": "기호를 호스트하는 파일 공유입니다. 이 값은 `symstore.exe add`에 대한 호출에서 `/s` 매개 변수로 사용됩니다.", + "loc.input.label.CompressSymbols": "기호 압축", + "loc.input.help.CompressSymbols": "파일 공유에 게시할 때 기호를 압축합니다.", + "loc.input.label.SymbolExpirationInDays": "기호 만료(일)", + "loc.input.help.SymbolExpirationInDays": "기호를 보유해야 하는 일 수입니다.", + "loc.input.label.IndexableFileFormats": "게시할 기호 파일 형식", + "loc.input.help.IndexableFileFormats": "기호 서버에 게시할 디버그 형식", + "loc.input.label.DetailedLog": "자세한 정보 로깅", + "loc.input.help.DetailedLog": "자세한 정보 로깅을 사용합니다.", + "loc.input.label.TreatNotIndexedAsWarning": "인덱싱되지 않은 경우 경고", + "loc.input.help.TreatNotIndexedAsWarning": "소스가 PDB 파일에 대해 인덱싱되지 않는 경우 경고할지 여부를 나타냅니다. 경고하지 않는 경우 메시지가 일반 출력으로 기록됩니다.", + "loc.input.label.UseNetCoreClientTool": "NetCore 클라이언트 도구 사용", + "loc.input.help.UseNetCoreClientTool": "DWARF 및 ELF 파일을 지원하는 기호 업로드 도구 버전을 사용할지 여부를 나타냅니다. 이 옵션은 Windows 에이전트에서만 중요합니다. Windows 이외의 에이전트에서는 DWARF 및 ELF 파일을 지원하는 기호 업로드 도구 버전이 항상 사용됩니다.", + "loc.input.label.SymbolsMaximumWaitTime": "최대 대기 시간(분)", + "loc.input.help.SymbolsMaximumWaitTime": "이 작업에 실패하기까지 대기하는 시간(분)입니다.", + "loc.input.label.SymbolsProduct": "제품", + "loc.input.help.SymbolsProduct": "제품 매개 변수를 symstore.exe로 지정하세요. 기본값은 $(Build.DefinitionName)입니다.", + "loc.input.label.SymbolsVersion": "버전", + "loc.input.help.SymbolsVersion": "버전 매개 변수를 symstore.exe로 지정하세요. 기본값은 $(Build.BuildNumber)입니다.", + "loc.input.label.SymbolsArtifactName": "아티팩트 이름", + "loc.input.help.SymbolsArtifactName": "기호 아티팩트에 사용할 아티팩트 이름을 지정하세요. 기본값은 Symbols_$(BuildConfiguration)입니다.", + "loc.messages.CleanedUpSemaphoreFile0": "세마포 파일 '{0}'을(를) 정리했습니다.", + "loc.messages.CleanUpSemaphoreFile0Error1": "기존 세마포 파일 '{0}'을(를) 정리할 수 없습니다. {1}", + "loc.messages.Error0AccessingSemaphoreFile1Retrying2Seconds": "세마포 파일 '{1}'에 액세스하는 동안 오류 '{0}'이(가) 발생했습니다. {2:N0}초 후에 다시 시도합니다.", + "loc.messages.Error_UnexpectedErrorSymbolsPublishing": "기호를 게시하는 동안 예기치 않은 오류가 발생했습니다. 종료 코드(%s) 및 오류(%s)", + "loc.messages.Error_CommandNotRecognized": "명령 %s을(를) 인식할 수 없습니다.", + "loc.messages.Error_SymbolPublishingToolNotFound": "기호 게시 도구를 %s에서 찾을 수 없습니다.", + "loc.messages.FailedToLoadDbghelpDllFrom0ErrorCode1": "'{0}'에서 dbghelp.dll을 로드하지 못했습니다. 오류 코드: '{1}'.", + "loc.messages.FailedToPublishSymbols": "기호를 게시하지 못했습니다. %s", + "loc.messages.FailedToRunClientTool": "클라이언트 도구를 실행하지 못했습니다. %s", + "loc.messages.Found0Files": "{0:N0}개 파일을 찾았습니다.", + "loc.messages.FoundNFiles": "%s개의 파일을 찾았습니다.", + "loc.messages.FreeLibraryDbghelpDllError0": "무료 라이브러리 dbghelp.dll이 실패했습니다. 오류 코드: '{0}'.", + "loc.messages.IndexingNotSupported": "이 OS에서는 원본 인덱싱이 지원되지 않습니다.", + "loc.messages.Info_RetrievingClientToolUri": "클라이언트 도구를 검색하는 중: %s", + "loc.messages.Info_ClientTool": "ClientTool 클라이언트 도구 파일 경로: %s", + "loc.messages.NoFilesForIndexing": "인덱싱할 파일을 선택하지 않았습니다.", + "loc.messages.NoFilesForPublishing": "게시할 파일을 선택하지 않았습니다.", + "loc.messages.NoSourcePathsIn0": "기호 파일 '{0}'에 대한 소스를 인덱싱할 수 없습니다. 파일에 소스 경로 정보가 없습니다.", + "loc.messages.OneOrMoreSourceFilesNotIndexedFor0": "기호 파일 '{0}'에 대한 하나 이상의 소스 파일을 인덱싱할 수 없습니다.", + "loc.messages.PreJobFailedToExecute": "사전 작업을 실행하지 못했습니다.", + "loc.messages.PublishOptionNotSet": "기호 게시 옵션이 설정되지 않았으므로 게시를 무시합니다.", + "loc.messages.ReachedPublishingMaxWaitTime0Seconds": "기호 게시를 완료할 수 없습니다. 최대 대기 시간 {0:N0}초에 도달했습니다.", + "loc.messages.SemaphoreFile0ExistsRetrying1Seconds": "세마포 파일 '{0}'이(가) 이미 있습니다. {1:N0}초 후에 기호 게시를 다시 시도합니다.", + "loc.messages.SemaphoreFile0Minutes1AttemptingCleanup": "세마포 파일 '{0}'이(가) 이미 있습니다. 파일을 '{1:N0}'분 전에 마지막으로 액세스했습니다. 파일 정리를 시도합니다.", + "loc.messages.SkippingIndexing": "인덱싱을 건너뛰고 있습니다.", + "loc.messages.SourceFolderDeprecated0": "소스 폴더 매개 변수를 사용하지 않습니다. 값 '{0}'을(를) 무시합니다.", + "loc.messages.SourceInfoNotRetrievedFrom0Message1": "인덱싱된 소스 정보를 '{0}'에서 검색할 수 없습니다. {1}", + "loc.messages.SpacesInTemp": "소스 파일이 올바르게 인덱싱되지 않은 것 같습니다. 임시 폴더에 공간이 있습니다.", + "loc.messages.SymbolsPublishedSuccessfully": "기호가 게시되었습니다. %s", + "loc.messages.SymbolStoreLastIdTxtNotFoundAt0": "lastid.txt를 저장하는 기호를 '{0}'에서 찾을 수 없습니다.", + "loc.messages.UnableToDetermineWorkspaceFromSourceFolder0": "소스 폴더 '{0}'에서 작업 영역을 결정할 수 없습니다.", + "loc.messages.UnableToIndexSources": "소스를 인덱싱할 수 없습니다.", + "loc.messages.UnexpectedDbghelpdllExpected0Actual1": "라이브러리 dbghelp.dll이 예기치 않은 경로에서 이미 로드되었습니다. 예상된 경로: '{0}'. 실제 경로: '{0}'.", + "loc.messages.UnsupportedSourceProvider0": "소스 인덱싱에 대해 지원되지 않는 원본 공급자 '{0}'입니다.", + "loc.messages.Win32Error0FromMethod1": "메서드 '{1}'에서 Win32 오류 '{0}'이(가) 발생했습니다." +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/PublishSymbolsV2/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..703263660fba --- /dev/null +++ b/_generated/PublishSymbolsV2/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,74 @@ +{ + "loc.friendlyName": "Индексация источников и публикация символов", + "loc.helpMarkDown": "Сведения об использовании этой задачи см. [здесь](https://go.microsoft.com/fwlink/?LinkID=613722).", + "loc.description": "Индексация исходного кода и публикация символов в общей папке или на сервере символов Azure Artifacts", + "loc.instanceNameFormat": "Путь публикации символов", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.SymbolsFolder": "Путь к папке символов", + "loc.input.help.SymbolsFolder": "Путь к папке, в которой ищутся файлы символов. По умолчанию используется папка $(Build.SourcesDirectory). В противном случае можно указать корневой путь, (например, $(Build.BinariesDirectory)/MyProject).", + "loc.input.label.SearchPattern": "Шаблон поиска", + "loc.input.help.SearchPattern": "Шаблон, используемый для обнаружения файлов PDB для публикации.", + "loc.input.label.IndexSources": "Индексация источников", + "loc.input.help.IndexSources": "Указывает, следует ли внедрять сведения об исходном сервере в PDB-файлы. Этот параметр поддерживается только в агентах Windows.", + "loc.input.label.PublishSymbols": "Публикация символов", + "loc.input.help.PublishSymbols": "Указывает, следует ли публиковать файлы символов.", + "loc.input.label.SymbolServerType": "Тип сервера символов", + "loc.input.help.SymbolServerType": "Выбор места для публикации символов. Символы, опубликованные на сервере символов Azure Artifacts, доступны любому пользователю с доступом к организации или коллекции. Azure DevOps Server поддерживает только параметр \"Общая папка\". См. [инструкции](https://go.microsoft.com/fwlink/?linkid=846265) по использованию сервера символов в Azure Artifacts.", + "loc.input.label.SymbolsPath": "Путь для публикации символов", + "loc.input.help.SymbolsPath": "Общая папка, в которой размещаются ваши символы. Это значение будет использоваться для параметра \"/s\" в вызове команды \"symstore.exe add\".", + "loc.input.label.CompressSymbols": "Сжать символы", + "loc.input.help.CompressSymbols": "Сжатие символов при публикации в общей папке.", + "loc.input.label.SymbolExpirationInDays": "Срок действия символа (в днях)", + "loc.input.help.SymbolExpirationInDays": "Число дней, в течение которого следует хранить символы.", + "loc.input.label.IndexableFileFormats": "Форматы файлов символов для публикации", + "loc.input.help.IndexableFileFormats": "Какие форматы отладки нужно опубликовать на сервере символов", + "loc.input.label.DetailedLog": "Подробное ведение журнала", + "loc.input.help.DetailedLog": "Использовать подробное ведение журнала.", + "loc.input.label.TreatNotIndexedAsWarning": "Предупредить, если не проиндексированы", + "loc.input.help.TreatNotIndexedAsWarning": "Выводится предупреждение, если ресурсы не проиндексированы для PDB-файла. В противном случае сообщения записываются в виде нормального вывода.", + "loc.input.label.UseNetCoreClientTool": "Использовать клиентское средство NetCore", + "loc.input.help.UseNetCoreClientTool": "Указывает, следует ли использовать версию средства отправки символов, поддерживающую файлы DWARF и ELF. Этот параметр нужен только для агентов Windows. В агентах не для Windows всегда будет использоваться версия средства отправки символов с поддержкой файлов DWARF и ELF.", + "loc.input.label.SymbolsMaximumWaitTime": "Максимальное время ожидания (в минутах)", + "loc.input.help.SymbolsMaximumWaitTime": "Количество минут, по истечении которого происходит сбой задачи.", + "loc.input.label.SymbolsProduct": "Продукт", + "loc.input.help.SymbolsProduct": "Укажите параметр продукта для symstore.exe. Значение по умолчанию — $(Build.DefinitionName)", + "loc.input.label.SymbolsVersion": "Версия", + "loc.input.help.SymbolsVersion": "Укажите параметр версии для symstore.exe. Значение по умолчанию — $(Build.BuildNumber)", + "loc.input.label.SymbolsArtifactName": "Имя артефакта", + "loc.input.help.SymbolsArtifactName": "Укажите имя артефакта, которое будет использоваться для артефакта символов. Значение по умолчанию: Symbols_$(BuildConfiguration)", + "loc.messages.CleanedUpSemaphoreFile0": "Файл семафора \"{0}\" успешно очищен.", + "loc.messages.CleanUpSemaphoreFile0Error1": "Не удалось очистить существующий файл семафора \"{0}\". {1}", + "loc.messages.Error0AccessingSemaphoreFile1Retrying2Seconds": "Ошибка \"{0}\" при доступе к файлу семафора \"{1}\". Повторная попытка через {2:N0} с.", + "loc.messages.Error_UnexpectedErrorSymbolsPublishing": "Непредвиденная ошибка при попытке опубликовать символы. Код завершения(%s) и ошибка(%s)", + "loc.messages.Error_CommandNotRecognized": "Нераспознанная команда %s.", + "loc.messages.Error_SymbolPublishingToolNotFound": "Средство публикации символов не найдено в %s.", + "loc.messages.FailedToLoadDbghelpDllFrom0ErrorCode1": "Не удалось загрузить dbghelp.dll из \"{0}\". Код ошибки: \"{1}\".", + "loc.messages.FailedToPublishSymbols": "Не удалось опубликовать символы. %s", + "loc.messages.FailedToRunClientTool": "Не удалось запустить клиентское средство. %s", + "loc.messages.Found0Files": "Найдено файлов: {0:N0}.", + "loc.messages.FoundNFiles": "Найдены файлы: %s.", + "loc.messages.FreeLibraryDbghelpDllError0": "Не удалось освободить библиотеку dbghelp.dll. Код ошибки: \"{0}\".", + "loc.messages.IndexingNotSupported": "Индексация исходного кода не поддерживается в этой ОС.", + "loc.messages.Info_RetrievingClientToolUri": "Получение секрета клиента из: %s", + "loc.messages.Info_ClientTool": "ClientTool clientToolFilePath: %s", + "loc.messages.NoFilesForIndexing": "Нет файлов, выбранных для индексации.", + "loc.messages.NoFilesForPublishing": "Нет файлов, выбранных для публикации.", + "loc.messages.NoSourcePathsIn0": "Не удалось проиндексировать источники для файла символов \"{0}\". Файл не содержит информации о пути к источникам.", + "loc.messages.OneOrMoreSourceFilesNotIndexedFor0": "Не удалось проиндексировать один или несколько исходных файлов для файла символов \"{0}\".", + "loc.messages.PreJobFailedToExecute": "Не удалось выполнить PreJob.", + "loc.messages.PublishOptionNotSet": "Не задано значение параметра \"Опубликовать символы\", поэтому публикация игнорируется.", + "loc.messages.ReachedPublishingMaxWaitTime0Seconds": "Не удалось выполнить публикацию символов. Достигнуто максимальное время ожидания в {0:N0} с.", + "loc.messages.SemaphoreFile0ExistsRetrying1Seconds": "Файл семафора \"{0}\" уже существует. Повторная попытка публикации будет выполнена через {1:N0} с.", + "loc.messages.SemaphoreFile0Minutes1AttemptingCleanup": "Файл семафора \"{0}\" уже существует. Последний доступ к файлу осуществлялся более \"{1:N0}\" мин назад. Выполняется попытка очистки файла.", + "loc.messages.SkippingIndexing": "Выполняется пропуск индексации.", + "loc.messages.SourceFolderDeprecated0": "Параметр исходной папки устарел. Выполняется пропуск значения \"{0}\".", + "loc.messages.SourceInfoNotRetrievedFrom0Message1": "Не удалось извлечь сведения об индексированном источнике из \"{0}\". {1}", + "loc.messages.SpacesInTemp": "Возможна неверная индексация исходных файлов. Временная папка содержит пробелы.", + "loc.messages.SymbolsPublishedSuccessfully": "Символы опубликованы. %s", + "loc.messages.SymbolStoreLastIdTxtNotFoundAt0": "Не удалось найти хранилище символов lastid.txt в \"{0}\".", + "loc.messages.UnableToDetermineWorkspaceFromSourceFolder0": "Не удалось определить рабочую область на основе исходной папки \"{0}\".", + "loc.messages.UnableToIndexSources": "Не удалось проиндексировать источники.", + "loc.messages.UnexpectedDbghelpdllExpected0Actual1": "Библиотека dbghelp.dll уже загружена из непредвиденного пути. Ожидается — \"{0}\". Фактический — \"{0}\".", + "loc.messages.UnsupportedSourceProvider0": "Неподдерживаемый поставщик источника \"{0}\" для индексации источника.", + "loc.messages.Win32Error0FromMethod1": "Произошла ошибка Win32 \"{0}\" из метода \"{1}\"." +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/PublishSymbolsV2/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..a0a7b8c78ee1 --- /dev/null +++ b/_generated/PublishSymbolsV2/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,74 @@ +{ + "loc.friendlyName": "为源编制索引并发布符号", + "loc.helpMarkDown": "请参阅[更多信息](https://go.microsoft.com/fwlink/?LinkID=613722),了解如何使用此任务。", + "loc.description": "为你的源代码编制索引并将符号发布到文件共享或 Azure Artifacts 符号服务器", + "loc.instanceNameFormat": "发布符号路径", + "loc.group.displayName.advanced": "高级", + "loc.input.label.SymbolsFolder": "符号文件夹的路径", + "loc.input.help.SymbolsFolder": "在其中搜索符号文件的文件夹的路径。默认为 $(Build.SourcesDirectory)。在其他情况下,指定根路径。例如: $(Build.BinariesDirectory)/MyProject", + "loc.input.label.SearchPattern": "搜索模式", + "loc.input.help.SearchPattern": "用于发现要发布的 pdb 文件的模式。", + "loc.input.label.IndexSources": "编制源索引", + "loc.input.help.IndexSources": "指示是否将源服务器信息注入 PDB 文件。此选项仅在 Windows 代理上受支持。", + "loc.input.label.PublishSymbols": "发布符号", + "loc.input.help.PublishSymbols": "指示是否发布符号文件。", + "loc.input.label.SymbolServerType": "符号服务器类型", + "loc.input.help.SymbolServerType": "选择发布符号的位置。任何具有组织/集合访问权限的用户都可以访问发布到 Azure Artifacts 符号服务器的符号。Azure DevOps Server 仅支持“文件共享”选项。请按照[这些说明](https://go.microsoft.com/fwlink/?linkid=846265)使用 Azure Artifacts 中的符号服务器。", + "loc.input.label.SymbolsPath": "发布符号的路径", + "loc.input.help.SymbolsPath": "承载符号的文件共享。此值将在对 \"symstore.exe add\" 的调用中用作 \"/s\" 参数。", + "loc.input.label.CompressSymbols": "压缩符号", + "loc.input.help.CompressSymbols": "发布到文件共享时,请压缩符号。", + "loc.input.label.SymbolExpirationInDays": "符号过期(以天为单位)", + "loc.input.help.SymbolExpirationInDays": "符号应保留的天数。", + "loc.input.label.IndexableFileFormats": "要发布的符号文件格式", + "loc.input.help.IndexableFileFormats": "要发布到符号服务器的调试格式", + "loc.input.label.DetailedLog": "详细日志记录", + "loc.input.help.DetailedLog": "使用详细日志记录。", + "loc.input.label.TreatNotIndexedAsWarning": "未编制索引时发出警告", + "loc.input.help.TreatNotIndexedAsWarning": "指示是否在没有针对 PDB 文件对源编制索引时发出警告。否则将消息记录为正常输出。", + "loc.input.label.UseNetCoreClientTool": "使用 NetCore 客户端工具", + "loc.input.help.UseNetCoreClientTool": "指示是否使用支持 DWARF 和 ELF 文件的符号上传工具的版本。此选项仅对 Windows 代理非常重要。在非 Windows 代理上,将始终使用支持 DWARF 和 ELF 文件的符号上传工具的版本。", + "loc.input.label.SymbolsMaximumWaitTime": "最长等待时间(分钟)", + "loc.input.help.SymbolsMaximumWaitTime": "使此任务失败之前等待的分钟数。", + "loc.input.label.SymbolsProduct": "产品", + "loc.input.help.SymbolsProduct": "指定 symstore.exe 的产品参数。默认为 $(Build.DefinitionName)", + "loc.input.label.SymbolsVersion": "版本", + "loc.input.help.SymbolsVersion": "指定 symstore.exe 的版本参数。默认为 $(Build.SourcesDirectory)", + "loc.input.label.SymbolsArtifactName": "项目名称", + "loc.input.help.SymbolsArtifactName": "指定用于符号项目的项目名称。默认为 Symbols_$(BuildConfiguration)", + "loc.messages.CleanedUpSemaphoreFile0": "成功清理信号灯文件“{0}”。", + "loc.messages.CleanUpSemaphoreFile0Error1": "无法清理现有信号灯文件“{0}”。{1}", + "loc.messages.Error0AccessingSemaphoreFile1Retrying2Seconds": "访问信号灯文件“{1}”时出现错误“{0}”。将在 {2:N0} 秒内重试。", + "loc.messages.Error_UnexpectedErrorSymbolsPublishing": "尝试发布符号时出现意外错误。退出代码(%s)和错误(%s)", + "loc.messages.Error_CommandNotRecognized": "无法识别命令 %s。", + "loc.messages.Error_SymbolPublishingToolNotFound": "在 %s 找不到符号发布工具。", + "loc.messages.FailedToLoadDbghelpDllFrom0ErrorCode1": "从“{0}”加载 dbghelp.dll 失败,错误代码为“{1}”。", + "loc.messages.FailedToPublishSymbols": "未能发布符号。%s", + "loc.messages.FailedToRunClientTool": "无法运行客户端工具。%s", + "loc.messages.Found0Files": "已找到 {0:N0} 个文件。", + "loc.messages.FoundNFiles": "找到 %s 个文件。", + "loc.messages.FreeLibraryDbghelpDllError0": "未能释放库 dbghelp.dll。错误代码“{0}”。", + "loc.messages.IndexingNotSupported": "此操作系统不支持源索引。", + "loc.messages.Info_RetrievingClientToolUri": "正在从以下位置检索客户端工具: %s", + "loc.messages.Info_ClientTool": "ClientTool clientToolFilePath: %s", + "loc.messages.NoFilesForIndexing": "未选择要编制索引的文件。", + "loc.messages.NoFilesForPublishing": "未选择要发布的文件。", + "loc.messages.NoSourcePathsIn0": "无法针对符号文件\"{0}\"为源编制索引。该文件不包含任何源路径信息。", + "loc.messages.OneOrMoreSourceFilesNotIndexedFor0": "无法针对符号文件“{0}”为一个或多个源文件编制索引。", + "loc.messages.PreJobFailedToExecute": "PreJob 无法执行。", + "loc.messages.PublishOptionNotSet": "未设置“发布符号”选项,因此忽略发布。", + "loc.messages.ReachedPublishingMaxWaitTime0Seconds": "无法完成符号发布。达到最大等待时间 {0:N0} 秒。", + "loc.messages.SemaphoreFile0ExistsRetrying1Seconds": "已存在信号灯文件“{0}”。将在 {1:N0} 秒内重试符号发布。", + "loc.messages.SemaphoreFile0Minutes1AttemptingCleanup": "已存在信号灯文件“{0}”。上次访问该文件的时间是“{1:N0}”分钟前。正在尝试清理该文件。", + "loc.messages.SkippingIndexing": "正在跳过索引。", + "loc.messages.SourceFolderDeprecated0": "已弃用源文件夹参数。将忽略值“{0}”。", + "loc.messages.SourceInfoNotRetrievedFrom0Message1": "无法从“{0}”检索已索引源信息。{1}", + "loc.messages.SpacesInTemp": "可能未正确索引源文件。临时文件夹包含空格。", + "loc.messages.SymbolsPublishedSuccessfully": "已成功发布符号。%s", + "loc.messages.SymbolStoreLastIdTxtNotFoundAt0": "未在“{0}”中找到符号存储区 lastid.txt。", + "loc.messages.UnableToDetermineWorkspaceFromSourceFolder0": "无法从源文件夹“{0}”中确定工作区。", + "loc.messages.UnableToIndexSources": "无法为源编制索引。", + "loc.messages.UnexpectedDbghelpdllExpected0Actual1": "已从异常路径加载库 dbghelp.dll。应为“{0}”。实际为“{0}”。", + "loc.messages.UnsupportedSourceProvider0": "不受源索引编制支持的源提供程序“{0}”。", + "loc.messages.Win32Error0FromMethod1": "在方法“{1}”中遇到 Win32 错误“{0}”。" +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/PublishSymbolsV2/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..dfa88a6a49c1 --- /dev/null +++ b/_generated/PublishSymbolsV2/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,74 @@ +{ + "loc.friendlyName": "索引來源和發佈符號", + "loc.helpMarkDown": "請參閱[詳細資訊](https://go.microsoft.com/fwlink/?LinkID=613722)來了解如何使用此工作。", + "loc.description": "編製原始程式碼的索引,並將符號發佈至檔案共用或 Azure Artifacts 符號伺服器", + "loc.instanceNameFormat": "發行符號路徑", + "loc.group.displayName.advanced": "進階", + "loc.input.label.SymbolsFolder": "符號資料夾的路徑", + "loc.input.help.SymbolsFolder": "搜尋符號檔案所在資料夾的路徑。預設值為 $(Build.SourcesDirectory)。否則請指定根路徑。例如: $(Build.BinariesDirectory)/MyProject", + "loc.input.label.SearchPattern": "搜尋模式", + "loc.input.help.SearchPattern": "探索要發行之 pdb 檔案使用的模式。", + "loc.input.label.IndexSources": "索引來源", + "loc.input.help.IndexSources": "指出是否要將來源伺服器資訊插入 PDB 檔案。只有 Windows 代理程式支援此選項。", + "loc.input.label.PublishSymbols": "發行符號", + "loc.input.help.PublishSymbols": "指出是否發行符號檔。", + "loc.input.label.SymbolServerType": "符號伺服器類型", + "loc.input.help.SymbolServerType": "選擇發佈符號的位置。發佈到 Azure Artifacts 符號伺服器的符號可供具有組織/集合存取權的任何使用者存取。Azure DevOps Server 只支援 [檔案共用] 選項。請遵循 [這些指示](https://go.microsoft.com/fwlink/?linkid=846265) 使用 Azure Artifacts 中的符號伺服器。", + "loc.input.label.SymbolsPath": "發行符號的路徑", + "loc.input.help.SymbolsPath": "裝載符號的檔案共用。此值會用於 `symstore.exe add` 的呼叫中當成 `/s` 參數。", + "loc.input.label.CompressSymbols": "壓縮符號", + "loc.input.help.CompressSymbols": "在發佈至檔案共用時壓縮符號。", + "loc.input.label.SymbolExpirationInDays": "符號到期天數", + "loc.input.help.SymbolExpirationInDays": "符號應保留的天數。", + "loc.input.label.IndexableFileFormats": "要發佈的符號檔案格式", + "loc.input.help.IndexableFileFormats": "要發佈到符號伺服器的偵錯格式", + "loc.input.label.DetailedLog": "詳細資訊記錄", + "loc.input.help.DetailedLog": "使用詳細資訊記錄。", + "loc.input.label.TreatNotIndexedAsWarning": "若未編制索引則警告", + "loc.input.help.TreatNotIndexedAsWarning": "指出是否在未針對 PDB 檔編制來源的索引時提出警告。若不警告,則會將訊息記錄為正常輸出。", + "loc.input.label.UseNetCoreClientTool": "使用 NetCore 用戶端工具", + "loc.input.help.UseNetCoreClientTool": "指出是否要使用支援 DWARF 和 ELF 檔案的符號上傳工具版本。此選項僅適用於 Windows 代理程式。在非 Windows 代理程式上,一律會使用支援 DWARF 和 ELF 檔案的符號上傳工具版本。", + "loc.input.label.SymbolsMaximumWaitTime": "最長等候時間 (分鐘)", + "loc.input.help.SymbolsMaximumWaitTime": "工作失敗前須等待的分鐘數。", + "loc.input.label.SymbolsProduct": "產品", + "loc.input.help.SymbolsProduct": "指定 symstore.exe 的產品參數。預設為 $(Build.DefinitionName)", + "loc.input.label.SymbolsVersion": "版本", + "loc.input.help.SymbolsVersion": "指定 symstore.exe 的版本參數。預設為 $(Build.BuildNumber)", + "loc.input.label.SymbolsArtifactName": "成品名稱", + "loc.input.help.SymbolsArtifactName": "請指定要用於符號成品的成品名稱。預設為 Symbols_$(BuildConfiguration)", + "loc.messages.CleanedUpSemaphoreFile0": "已成功清理現有的旗號檔案 '{0}'。", + "loc.messages.CleanUpSemaphoreFile0Error1": "無法清理現有的旗號檔案 '{0}'。{1}", + "loc.messages.Error0AccessingSemaphoreFile1Retrying2Seconds": "存取旗號檔案 '{1}' 時發生錯誤 '{0}'。將在 {2:N0} 秒內重試。", + "loc.messages.Error_UnexpectedErrorSymbolsPublishing": "嘗試發行符號時發生未預期的錯誤。結束代碼 (%s) 與錯誤 (%s)", + "loc.messages.Error_CommandNotRecognized": "無法辨認命令 %s。", + "loc.messages.Error_SymbolPublishingToolNotFound": "在 %s 找不到符號發行工具。", + "loc.messages.FailedToLoadDbghelpDllFrom0ErrorCode1": "無法從 '{0}' 載入 dbghelp.dll,錯誤碼為 '{1}'。", + "loc.messages.FailedToPublishSymbols": "無法發行符號。%s", + "loc.messages.FailedToRunClientTool": "無法執行用戶端工具。%s", + "loc.messages.Found0Files": "找到 {0:N0} 檔案。", + "loc.messages.FoundNFiles": "已找到 %s 檔案。", + "loc.messages.FreeLibraryDbghelpDllError0": "無法釋放程式庫 dbghelp.dll。錯誤碼 '{0}'。", + "loc.messages.IndexingNotSupported": "此作業系統不支援來源索引。", + "loc.messages.Info_RetrievingClientToolUri": "正在從以下位置擷取用戶端工具: %s", + "loc.messages.Info_ClientTool": "ClientTool clientToolFilePath: %s", + "loc.messages.NoFilesForIndexing": "未選取要編製索引的檔案。", + "loc.messages.NoFilesForPublishing": "未選取要發行的檔案。", + "loc.messages.NoSourcePathsIn0": "無法為符號檔 '{0}' 的來源編製索引。此檔案未包含任何來源路徑資訊。", + "loc.messages.OneOrMoreSourceFilesNotIndexedFor0": "無法為符號檔 '{0}' 的一或多個來源檔案編製索引。", + "loc.messages.PreJobFailedToExecute": "PreJob 無法執行。", + "loc.messages.PublishOptionNotSet": "未設定 [發行符號] 選項,因此略過發行。", + "loc.messages.ReachedPublishingMaxWaitTime0Seconds": "無法完成符號發行。已達最長等待時間 {0:N0} 秒。", + "loc.messages.SemaphoreFile0ExistsRetrying1Seconds": "旗號檔案 '{0}' 已經存在。將在 {1:N0} 秒內重試符號發行。", + "loc.messages.SemaphoreFile0Minutes1AttemptingCleanup": "旗號檔案 '{0}' 已經存在。最近一次存取檔案是在 '{1:N0}' 分鐘前。正在嘗試清理檔案。", + "loc.messages.SkippingIndexing": "正在略過編製索引。", + "loc.messages.SourceFolderDeprecated0": "已取代來源資料夾參數。正在忽略值 '{0}'。", + "loc.messages.SourceInfoNotRetrievedFrom0Message1": "無法從 '{0}' 擷取已編製索引的來源資訊。{1}", + "loc.messages.SpacesInTemp": "可能無法正確編製來源檔案的索引。暫存資料夾包含空格。", + "loc.messages.SymbolsPublishedSuccessfully": "符號已成功發行。%s", + "loc.messages.SymbolStoreLastIdTxtNotFoundAt0": "在 '{0}' 中找不到符號存放區 lastid.txt。", + "loc.messages.UnableToDetermineWorkspaceFromSourceFolder0": "無法從來源資料夾 '{0}' 決定工作區。", + "loc.messages.UnableToIndexSources": "無法編製來源的索引。", + "loc.messages.UnexpectedDbghelpdllExpected0Actual1": "已從未預期的路徑載入程式庫 dbghelp.dll。預期為 '{0}'。實際為 '{0}'。", + "loc.messages.UnsupportedSourceProvider0": "來源索引編製作業不支援來源提供者 '{0}'。", + "loc.messages.Win32Error0FromMethod1": "方法 '{1}' 遇到 Win32 錯誤 '{0}'。" +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/SymbolClientFunctions.ps1 b/_generated/PublishSymbolsV2/SymbolClientFunctions.ps1 new file mode 100644 index 000000000000..1cbfe1b1790a --- /dev/null +++ b/_generated/PublishSymbolsV2/SymbolClientFunctions.ps1 @@ -0,0 +1,115 @@ +[CmdletBinding()] +param() +# ----------------------------------------------------------------------------- +# Methods +# ----------------------------------------------------------------------------- +Import-Module $PSScriptRoot\ps_modules\PowershellHelpers\PowershellHelpers.psm1 + +function Download-SymbolClient([string]$symbolServiceUri, [string]$directory) +{ + $clientFetchUrl = $symbolServiceUri + "/_apis/symbol/client/task" + + "Downloading $clientFetchUrl to $directory" | Write-Verbose + + $symbolAppZip = Join-Path $directory "symbol.app.buildtask.zip" + $action = { (New-Object System.Net.WebClient).DownloadFile($clientFetchUrl, $symbolAppZip) } + Invoke-ActionWithRetries -Action $action -MaxTries 5 + + "Download complete" | Write-Verbose + + return $symbolAppZip +} + +function Get-SymbolClientVersion([string]$symbolServiceUri) +{ + "Getting latest symbol.app.buildtask.zip package" | Write-Verbose + + $versionUrl = $symbolServiceUri + "/_apis/symbol/client/" + try + { + $action = { Invoke-WebRequest -Uri $versionUrl -Method Head -UseDefaultCredentials -UseBasicParsing } + $versionResponse = Invoke-ActionWithRetries -Action $action -MaxTries 5 + } + catch [System.Net.WebException] + { + Write-Host "StatusCode '$($_.Exception.Response.StatusCode)' returned on account $symbolServiceUri" + + if ($_.Exception.Response.StatusCode -eq 404) { + throw "The Azure Artifacts Symbol Server feature is not enabled for this account. See https://go.microsoft.com/fwlink/?linkid=846265 for instructions on how to enable it.`n`n " + } + + throw $_ + } + $versionHeader = $versionResponse.Headers["symbol-client-version"] + + "Most recent version is $versionHeader" | Write-Verbose + + return $versionHeader +} + +function Run-SymbolCommand([string]$assemblyPath, [string]$arguments) +{ + $exe = "$assemblyPath\symbol.exe" + $traceLevel = if ($DetailedLog) { "verbose" } else { "info" } + $arguments += " --tracelevel $traceLevel --globalretrycount 2" + + Invoke-VstsTool -FileName $exe -Arguments $arguments | ForEach-Object { $_.Replace($arguments, $displayArgs) } + + if ($LASTEXITCODE -ne 0) { + throw "$exe exited with exit code $LASTEXITCODE" + } +} + +function Unzip-SymbolClient([string]$clientZip, [string]$destinationDirectory) +{ + "Unzipping $clientZip" | Write-Verbose + + Add-Type -AssemblyName System.IO.Compression.FileSystem + [System.IO.Compression.ZipFile]::ExtractToDirectory($clientZip, $destinationDirectory) + + "Unzipped" | Write-Verbose +} + +function Update-SymbolClient([string]$symbolServiceUri, [string]$symbolClientLocation) +{ + "Checking for most recent symbol.app.buildtask.zip version" | Write-Verbose + + # Check latest package version. + $availableVersion = Get-SymbolClientVersion $symbolServiceUri + + $agent = Get-VstsTaskVariable -Name 'agent.version' + if (!$agent -or (([version]'2.115.0').CompareTo([version]$agent) -ge 1)) { + $symbolPathRoot = Join-Path $env:APPDATA "VSOSymbolClient" + } + else { + $symbolPathRoot = Join-Path (Get-VstsTaskVariable -Name 'Agent.ToolsDirectory') "VSOSymbolClient" + } + $clientPath = Join-Path $symbolPathRoot $availableVersion + $completeMarkerFile = Join-Path $clientPath "symbol.app.buildtask.complete" + $symbolClientZip = Join-Path $clientPath "symbol.app.buildtask.zip" + $modulePath = Join-Path $clientPath "lib\net45" + + if ( ! $(Test-Path $completeMarkerFile -PathType Leaf) ) { + "$completeMarkerFile not found" | Write-Host + + if ( $(Test-Path $clientPath -PathType Container) ) { + "Cleaning $clientPath" | Write-Host + Remove-Item "$clientPath" -recurse | Write-Host + } + + "Creating $clientPath" | Write-Host + New-Item -ItemType directory -Path $clientPath | Write-Host + $symbolClientZip = Download-SymbolClient $symbolServiceUri $clientPath + + Unzip-SymbolClient $symbolClientZip $clientPath | Write-Host + + [IO.File]::WriteAllBytes( $completeMarkerFile, @() ) + + "Update complete" | Write-Host + } + else { + "$completeMarkerFile exists" | Write-Host + } + + return $modulePath +} diff --git a/_generated/PublishSymbolsV2/SymbolsCommon.psm1 b/_generated/PublishSymbolsV2/SymbolsCommon.psm1 new file mode 100644 index 000000000000..b2d40816899b --- /dev/null +++ b/_generated/PublishSymbolsV2/SymbolsCommon.psm1 @@ -0,0 +1,154 @@ +#requires -Module VstsTaskSdk + +# VstsTaskSdk is required above for Assert-VstsPath and Get-VstsTaskVariable +# defined in ToolFunctions.ps1 and prefixed by VstsTaskSdk.psd1 which specifies DefaultCommandPrefix = 'Vsts' + +# Existing symbol binary layout +# V1 agent +# ...\agent\Worker\Tools\Pdbstr\pdbstr.exe +# ...\agent\Worker\Tools\Symstore\dbghelp.dll +# ...\agent\Worker\Tools\Symstore\srcsrv.dll +# ...\agent\Worker\Tools\Symstore\symsrv.dll +# ...\agent\Worker\Tools\Symstore\symstore.exe +# V2 agent +# ...\agent\externals\pdbstr\pdbstr.exe +# ...\agent\externals\symstore\dbghelp.dll +# ...\agent\externals\symstore\srcsrv.dll +# ...\agent\externals\symstore\symsrv.dll +# ...\agent\externals\symstore\symstore.exe +# New symbol binary layout +# V1 & V2 agent +# ...\tasks\PublishSymbols\{Version}\*.dll +# ...\tasks\PublishSymbols\{Version}\*.exe + +# # Ad-hoc test initialization +# node make.js build --task PublishSymbols +# $env:System_Culture = "en-US" +# Import-Module .\_build\Tasks\PublishSymbols\ps_modules\VstsTaskSdk\VstsTaskSdk.psd1 +# Import-Module .\_build\Tasks\PublishSymbols\SymbolsCommon.psm1 +# Get-Command -Module SymbolsCommon +# +# # Ad-hoc test cleanup +# Remove-Module SymbolsCommon +# Remove-Module VstsTaskSdk +# $env:Agent_HomeDirectory = $null +# $env:PublishSymbols_Debug = $null +# $env:PublishSymbols_UseDbgLkg = $null +# $env:System_Culture = $null +# +# # Ad-hoc test cases +# +# # V2 agent, UseDbgLkg true +# $env:Agent_HomeDirectory = "D:\Downloads\vsts-agent-win7-x64-2.117.1" +# $env:PublishSymbols_Debug = "true" +# $env:PublishSymbols_UseDbgLkg = "true" +# Get-DbghelpPath +# Get-PdbstrPath +# Get-SymStorePath +# +# # V2 agent, UseDbgLkg false +# $env:Agent_HomeDirectory = "D:\Downloads\vsts-agent-win7-x64-2.117.1" +# $env:PublishSymbols_Debug = "true" +# $env:PublishSymbols_UseDbgLkg = $null +# Get-DbghelpPath +# Get-PdbstrPath +# Get-SymStorePath +# +# # V1 agent, UseDbgLkg true +# $env:Agent_HomeDirectory = "\\artifactagent1\C$\B" +# $env:PublishSymbols_Debug = "true" +# $env:PublishSymbols_UseDbgLkg = "true" +# Get-DbghelpPath +# Get-PdbstrPath +# Get-SymStorePath +# +# # V1 agent, UseDbgLkg false +# $env:Agent_HomeDirectory = "\\artifactagent1\C$\B" +# $env:PublishSymbols_Debug = "true" +# $env:PublishSymbols_UseDbgLkg = $null +# Get-DbghelpPath +# Get-PdbstrPath +# Get-SymStorePath + +function Get-SymbolBinaryPath +{ + [CmdletBinding()] + param( + # Path relative to task script + [Parameter(Mandatory = $true)] + [string]$DbgLkgPath, + # Path relative to Agent.HomeDirectory + [Parameter(Mandatory = $true)] + [string]$V2AgentPath, + # Path relative to Agent.HomeDirectory + [Parameter(Mandatory = $true)] + [string]$V1AgentPath + ) + + $useDbgLkg = $env:PublishSymbols_UseDbgLkg + if ($env:PublishSymbols_UseDbgLkg -eq $null) + { + # Opt-in to latest symbol binaries by default + $useDbgLkg = $true + } + else + { + # Opt-out if customer specified by variable in their build + $useDbgLkg = [System.Convert]::ToBoolean($env:PublishSymbols_UseDbgLkg) + } + + if($useDbgLkg) + { + # Use the latest symbol binaries as specified by variable "PublishSymbols_UseDbgLkg" in the build definition + $path = [System.IO.Path]::GetFullPath("$PSScriptRoot\$DbgLkgPath") + } + else + { + # Use existing binaries shipped with the agent + $agentRoot = Get-VstsTaskVariable -Name Agent.HomeDirectory -Require + $path = "$agentRoot\$V2AgentPath" + if (-not [System.IO.File]::Exists($path)) + { + $path = "$agentRoot\$V1AgentPath" + } + } + + $debug = [System.Convert]::ToBoolean($env:PublishSymbols_Debug) + if ($debug) + { + Write-Host "Get-SymbolBinaryPath: $path" + } + + Assert-VstsPath -LiteralPath $path -PathType Leaf + return $path +} + +function Get-PdbstrPath { + [CmdletBinding()] + param() + return Get-SymbolBinaryPath ` + -DbgLkgPath "pdbstr.exe" ` + -V2AgentPath "externals\pdbstr\pdbstr.exe" ` + -V1AgentPath "Agent\Worker\Tools\Pdbstr\pdbstr.exe" +} + +function Get-DbghelpPath +{ + [CmdletBinding()] + param() + return Get-SymbolBinaryPath ` + -DbgLkgPath "dbghelp.dll" ` + -V2AgentPath "externals\symstore\dbghelp.dll" ` + -V1AgentPath "Agent\Worker\Tools\Symstore\dbghelp.dll" +} + +function Get-SymStorePath { + [CmdletBinding()] + param() + return Get-SymbolBinaryPath ` + -DbgLkgPath "symstore.exe" ` + -V2AgentPath "externals\symstore\symstore.exe" ` + -V1AgentPath "Agent\Worker\Tools\Symstore\symstore.exe" +} + +Export-ModuleMember -Function @("Get-PdbstrPath", "Get-DbghelpPath", "Get-SymStorePath") \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.LoadsIfNotLoaded.ps1 b/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.LoadsIfNotLoaded.ps1 new file mode 100644 index 000000000000..441803f42de6 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.LoadsIfNotLoaded.ps1 @@ -0,0 +1,27 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\DbghelpFunctions.ps1 +Register-Mock Get-DbghelpPath { "SomeDrive:\AgentHome\...\dbghelp.dll" } +Register-Mock Get-CurrentProcess { + New-Object psobject -Property @{ + Id = $PID + Modules = @( + New-Object psobject -Property @{ + ModuleName = 'SomeModule.dll' + FileName = 'SomeDrive:\SomeDir\SomeModule.dll' + } + ) + } +} +Register-Mock Invoke-LoadLibrary +Register-Mock Write-Warning + +# Act. +Add-DbghelpLibrary + +# Assert. +Assert-WasCalled Invoke-LoadLibrary -- -LiteralPath "SomeDrive:\AgentHome\...\dbghelp.dll" +Assert-WasCalled Write-Warning -Times 0 diff --git a/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.SkipsIfAlreadyLoaded.ps1 b/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.SkipsIfAlreadyLoaded.ps1 new file mode 100644 index 000000000000..7de1dc918667 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.SkipsIfAlreadyLoaded.ps1 @@ -0,0 +1,29 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\DbghelpFunctions.ps1 +Register-Mock Get-DbghelpPath { "SomeDrive:\AgentHome\...\dbghelp.dll" } +Register-Mock Get-CurrentProcess { + New-Object psobject -Property @{ + Id = $PID + Modules = @( + New-Object psobject -Property @{ + ModuleName = 'SomeModule2.dll' + FileName = 'SomeDrive:\SomeDir\SomeModule2.dll' + } + New-Object psobject -Property @{ + ModuleName = 'dbghelp.dll' + FileName = "SomeDrive:\AgentHome\Externals\Symstore\dbghelp.dll" + } + ) + } +} +Register-Mock Invoke-LoadLibrary + +# Act. +Add-DbghelpLibrary + +# Assert. +Assert-WasCalled Invoke-LoadLibrary -Times 0 \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.ThrowsIfDllNotFound.ps1 b/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.ThrowsIfDllNotFound.ps1 new file mode 100644 index 000000000000..d30a9b19abc9 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.ThrowsIfDllNotFound.ps1 @@ -0,0 +1,12 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\DbghelpFunctions.ps1 +Register-Mock Get-DbghelpPath { throw "This error should be thrown." } +Register-Mock Get-CurrentProcess +Register-Mock Invoke-LoadLibrary + +# Act/Assert. +Assert-Throws { Add-DbghelpLibrary } -MessagePattern "This error should be thrown." diff --git a/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.WarnsIfDifferentLocationAlreadyLoaded.ps1 b/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.WarnsIfDifferentLocationAlreadyLoaded.ps1 new file mode 100644 index 000000000000..678faa0d4f84 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.WarnsIfDifferentLocationAlreadyLoaded.ps1 @@ -0,0 +1,33 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\DbghelpFunctions.ps1 +Register-Mock Get-DbghelpPath { "SomeDrive:\AgentHome\...\dbghelp.dll" } +Register-Mock Get-CurrentProcess { + New-Object psobject -Property @{ + Id = $PID + Modules = @( + New-Object psobject -Property @{ + ModuleName = 'dbghelp.dll' + FileName = 'SomeDrive:\SomeDir2\dbghelp.dll' + } + New-Object psobject -Property @{ + ModuleName = 'dbghelp.dll' + FileName = 'SomeDrive:\SomeDir3\dbghelp.dll' + } + ) + } +} +Register-Mock Invoke-LoadLibrary +Register-Mock Write-Warning + +# Act. +Add-DbghelpLibrary + +# Assert. +Assert-WasCalled Invoke-LoadLibrary -Times 0 +Assert-WasCalled Write-Warning -Times 2 +Assert-WasCalled Write-Warning -- "UnexpectedDbghelpdllExpected0Actual1 $([System.Management.Automation.WildcardPattern]::Escape("SomeDrive:\AgentHome\...\dbghelp.dll")) $([System.Management.Automation.WildcardPattern]::Escape("SomeDrive:\SomeDir2\dbghelp.dll"))" +Assert-WasCalled Write-Warning -- "UnexpectedDbghelpdllExpected0Actual1 $([System.Management.Automation.WildcardPattern]::Escape("SomeDrive:\AgentHome\...\dbghelp.dll")) $([System.Management.Automation.WildcardPattern]::Escape("SomeDrive:\SomeDir3\dbghelp.dll"))" diff --git a/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.WarnsIfLoadFails.ps1 b/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.WarnsIfLoadFails.ps1 new file mode 100644 index 000000000000..86a74645729c --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Add-DbghelpLibrary.WarnsIfLoadFails.ps1 @@ -0,0 +1,30 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\DbghelpFunctions.ps1 + +Register-Mock Get-DbghelpPath { "SomeDrive:\AgentHome\...\dbghelp.dll" } + +Register-Mock Get-CurrentProcess { + New-Object psobject -Property @{ + Id = $PID + Modules = @( + New-Object psobject -Property @{ + ModuleName = 'SomeModule.dll' + FileName = 'SomeDrive:\SomeDir\SomeModule.dll' + } + ) + } +} +Register-Mock Invoke-LoadLibrary { [System.IntPtr]::Zero } # Zero indicates error. +Register-Mock Get-LastWin32Error { 123 } +Register-Mock Write-Warning + +# Act. +Add-DbghelpLibrary + +# Assert. +Assert-WasCalled Invoke-LoadLibrary -- -LiteralPath "SomeDrive:\AgentHome\...\dbghelp.dll" +Assert-WasCalled Write-Warning -- "FailedToLoadDbghelpDllFrom0ErrorCode1 SomeDrive:\AgentHome\...\dbghelp.dll 123" diff --git a/_generated/PublishSymbolsV2/Tests/Add-SourceServerStream.InstrumentsPdb.ps1 b/_generated/PublishSymbolsV2/Tests/Add-SourceServerStream.InstrumentsPdb.ps1 new file mode 100644 index 000000000000..3a396c3cf1d7 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Add-SourceServerStream.InstrumentsPdb.ps1 @@ -0,0 +1,21 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\PdbstrFunctions.ps1 +Register-Mock Get-TempFileName { 'SomeDrive:\TempDir\TempFile.txt' } +Register-Mock Copy-Item +Register-Mock Remove-Item +Register-Mock Write-AllText +Register-Mock Invoke-VstsTool + +# Act. +Add-SourceServerStream -PdbstrPath 'Some pdbstr.exe path' -SymbolsFilePath 'SomeDrive:\SomeDir\SomeSymbols.pdb' -StreamContent 'Some stream content' + +# Assert. +Assert-WasCalled Write-AllText -- -Path 'SomeDrive:\TempDir\TempFile.txt' -Content 'Some stream content' +Assert-WasCalled Invoke-VstsTool -- -FileName 'Some pdbstr.exe path' -Arguments "-w -p:""SomeDrive:\SomeDir\SomeSymbols.pdb"" -i:""SomeDrive:\TempDir\TempFile.txt"" -s:srcsrv" -Verbose: $false +Assert-WasCalled Copy-Item -Times 0 +Assert-WasCalled Remove-Item -Times 1 +Assert-WasCalled Remove-Item -- -LiteralPath 'SomeDrive:\TempDir\TempFile.txt' diff --git a/_generated/PublishSymbolsV2/Tests/Add-SourceServerStream.SpeciallyHandlesPdbsWithSpaces.ps1 b/_generated/PublishSymbolsV2/Tests/Add-SourceServerStream.SpeciallyHandlesPdbsWithSpaces.ps1 new file mode 100644 index 000000000000..75c4adccbfcf --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Add-SourceServerStream.SpeciallyHandlesPdbsWithSpaces.ps1 @@ -0,0 +1,26 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\PdbstrFunctions.ps1 +$global:tempFileCount = 0 +Register-Mock Get-TempFileName { "SomeDrive:\TempDir\TempFile$($global:tempFileCount++ ; $global:tempFileCount).txt" } +Register-Mock Copy-Item +Register-Mock Remove-Item +Register-Mock Write-AllText +Register-Mock Invoke-VstsTool + +# Act. +Add-SourceServerStream -PdbstrPath 'Some pdbstr.exe path' -SymbolsFilePath 'SomeDrive:\SomeDir\SomeSymbols With Space.pdb' -StreamContent 'Some stream content' + +# Assert. +Assert-AreEqual 2 $global:tempFileCount +Assert-WasCalled Write-AllText -- -Path 'SomeDrive:\TempDir\TempFile1.txt' -Content 'Some stream content' +Assert-WasCalled Invoke-VstsTool -- -FileName 'Some pdbstr.exe path' -Arguments "-w -p:""SomeDrive:\TempDir\TempFile2.txt"" -i:""SomeDrive:\TempDir\TempFile1.txt"" -s:srcsrv" -Verbose: $false +Assert-WasCalled Copy-Item -Times 2 +Assert-WasCalled Copy-Item -- -LiteralPath 'SomeDrive:\SomeDir\SomeSymbols With Space.pdb' -Destination 'SomeDrive:\TempDir\TempFile2.txt' +Assert-WasCalled Copy-Item -- -LiteralPath 'SomeDrive:\TempDir\TempFile2.txt' -Destination 'SomeDrive:\SomeDir\SomeSymbols With Space.pdb' +Assert-WasCalled Remove-Item -Times 2 +Assert-WasCalled Remove-Item -- -LiteralPath 'SomeDrive:\TempDir\TempFile1.txt' +Assert-WasCalled Remove-Item -- -LiteralPath 'SomeDrive:\TempDir\TempFile2.txt' diff --git a/_generated/PublishSymbolsV2/Tests/Get-ArtifactName.ReturnsCorrectValue.ps1 b/_generated/PublishSymbolsV2/Tests/Get-ArtifactName.ReturnsCorrectValue.ps1 new file mode 100644 index 000000000000..36d893732b60 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Get-ArtifactName.ReturnsCorrectValue.ps1 @@ -0,0 +1,30 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\PublishFunctions.ps1 +$variableSets = @( + @{ ArtifactName = 'Some artifact name' + LastTransactionId = 'Some last transaction ID' + ExpectedRegex = 'Some artifact name' } + @{ ArtifactName = 'Some artifact name' + LastTransactionId = '' + ExpectedRegex = 'Some artifact name' } + @{ ArtifactName = '' + LastTransactionId = 'Some last transaction ID' + ExpectedRegex = 'Some last transaction ID' } + @{ ArtifactName = '' + LastTransactionId = '' + ExpectedRegex = '[0-9a-f]+(-[0-9a-f]+){4}' } # GUID +) +foreach ($variableSet in $variableSets) { + $expectedRegex = $variableSet['ExpectedRegex'] + $variableSet.Remove('ExpectedRegex') + + # Act. + $actual = Get-ArtifactName @variableSet + + # Assert. + Assert-AreEqual $true ($actual -match $expectedRegex) +} diff --git a/_generated/PublishSymbolsV2/Tests/Get-LastTransactionId.GetsId.ps1 b/_generated/PublishSymbolsV2/Tests/Get-LastTransactionId.GetsId.ps1 new file mode 100644 index 000000000000..913e65affea4 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Get-LastTransactionId.GetsId.ps1 @@ -0,0 +1,20 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\PublishFunctions.ps1 +Write-Verbose ($share = [System.IO.Path]::Combine($env:TMP, ([System.IO.Path]::GetRandomFileName()))) +$lastIdPath = "$share\000Admin\lastid.txt" +try { + $null = [System.IO.Directory]::CreateDirectory(([System.IO.Path]::GetDirectoryName($lastIdPath))) + [System.IO.File]::WriteAllText($lastIdPath, " Some last ID ") + + # Act. + $actual = Get-LastTransactionId -Share $share + + # Assert. + Assert-AreEqual 'Some last ID' $actual +} finally { + if (Test-Path -LiteralPath $share) { Remove-Item -LiteralPath $share -Recurse } +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Tests/Get-LastTransactionId.WarnsIfNotFound.ps1 b/_generated/PublishSymbolsV2/Tests/Get-LastTransactionId.WarnsIfNotFound.ps1 new file mode 100644 index 000000000000..55803217a9f0 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Get-LastTransactionId.WarnsIfNotFound.ps1 @@ -0,0 +1,18 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\PublishFunctions.ps1 +Register-Mock Write-Warning +Write-Verbose ($share = [System.IO.Path]::Combine($env:TMP, ([System.IO.Path]::GetRandomFileName()))) +try { + # Act. + $actual = Get-LastTransactionId -Share $share + + # Assert. + Assert-IsNullOrEmpty $actual + Assert-WasCalled Write-Warning -ArgumentsEvaluator { $args[0] -like '*SymbolStoreLastIdTxtNotFoundAt0*' } +} finally { + if (Test-Path -LiteralPath $share) { Remove-Item -LiteralPath $share -Recurse } +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.ReturnsMultipleFiles.ps1 b/_generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.ReturnsMultipleFiles.ps1 new file mode 100644 index 000000000000..56d052da0c4e --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.ReturnsMultipleFiles.ps1 @@ -0,0 +1,29 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\SourceFileFunctions.ps1 +$symbolsFilePath = 'SomeDrive:\SomeSourceDir\SomeProject\SomeLibrary.pdb' +$sourceRootPath = 'SomeDrive:\SomeSourceDir\\\' # The function should handle zero or more trailing slashes properly when + # checking whether the source files are under the source root directory. +$global:sourceFile1 = ' SomeDrive:\SomeSourceDir\SomeProject\SomeFile1.cs ' # Spaces should be trimmed by the function. +$global:sourceFile2 = ' SomeDrive:\SomeSourceDir\SomeProject\SomeFile2.cs ' +Register-Mock Get-DbghelpSourceFilePaths { + $global:sourceFile1 + $global:sourceFile2 + } -- -SymbolsFilePath $symbolsFilePath +Register-Mock Test-Path { $true } +Register-Mock Trace-VstsPath +Register-Mock Write-Host +Register-Mock Write-Warning + +# Act. +$actual = Get-SourceFilePaths -SymbolsFilePath $symbolsFilePath -SourcesRootPath $sourceRootPath -TreatNotIndexedAsWarning + +# Assert. +Assert-AreEqual $global:sourceFile1.Trim(), $global:sourceFile2.Trim() $actual +Assert-WasCalled Write-Host -Time 0 # Write-Host/Write-Warning should only be called for warning +Assert-WasCalled Write-Warning -Time 0 # cases. The warning tests rely on this assumption also. +Assert-WasCalled Test-Path -- -LiteralPath $global:sourceFile1.Trim() -PathType Leaf +Assert-WasCalled Test-Path -- -LiteralPath $global:sourceFile1.Trim() -PathType Leaf diff --git a/_generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.WarnsForNoSourceFiles.ps1 b/_generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.WarnsForNoSourceFiles.ps1 new file mode 100644 index 000000000000..cff11f5b3f39 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.WarnsForNoSourceFiles.ps1 @@ -0,0 +1,25 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\SourceFileFunctions.ps1 +$symbolsFilePath = 'SomeDrive:\SomeSourceDir\SomeProject\SomeLibrary.pdb' +$sourceRootPath = 'SomeDrive:\SomeSourceDir' +Register-Mock Get-DbghelpSourceFilePaths +Register-Mock Test-Path { $true } +foreach ($treatNotIndexedAsWarning in @($true, $false)) { + Unregister-Mock Write-Host + Unregister-Mock Write-Warning + Register-Mock Write-Host + Register-Mock Write-Warning + + # Act. + $actual = Get-SourceFilePaths -SymbolsFilePath $symbolsFilePath -SourcesRootPath $sourceRootPath -TreatNotIndexedAsWarning:$treatNotIndexedAsWarning + + # Assert. + Assert-AreEqual $null $actual + $atLeastOnce = -1 + Assert-WasCalled Write-Host -Time $(if ($treatNotIndexedAsWarning) { 0 } else { $atLeastOnce }) + Assert-WasCalled Write-Warning -Time $(if ($treatNotIndexedAsWarning) { $atLeastOnce } else { 0 }) +} diff --git a/_generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.WarnsForSourceFileNotFound.ps1 b/_generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.WarnsForSourceFileNotFound.ps1 new file mode 100644 index 000000000000..5e95c8217e3f --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.WarnsForSourceFileNotFound.ps1 @@ -0,0 +1,39 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\SourceFileFunctions.ps1 +$symbolsFilePath = 'SomeDrive:\SomeSourceDir\SomeProject\SomeLibrary.pdb' +$sourceRootPath = 'SomeDrive:\SomeSourceDir' +$global:sourceFile1 = 'SomeDrive:\SomeSourceDir\SomeProject\SomeFile1.cs' +$global:sourceFile2 = 'SomeDrive:\SomeSourceDir\SomeProject\SomeFile2.cs' +$global:sourceFile3 = 'SomeDrive:\SomeSourceDir\SomeProject\SomeFile3.cs' +$global:sourceFile4 = 'SomeDrive:\SomeSourceDir\??\SomeProject\SomeFile3.cs' +Register-Mock Get-DbghelpSourceFilePaths { + $global:sourceFile1 + $global:sourceFile2 + $global:sourceFile3 + $global:sourceFile4 + } -- -SymbolsFilePath $symbolsFilePath +Register-Mock Test-Path { $true } -- -LiteralPath $symbolsFilePath -PathType Leaf +Register-Mock Test-Path { $true } -- -LiteralPath $global:sourceFile1 -PathType Leaf +Register-Mock Test-Path { $false } -- -LiteralPath $global:sourceFile2 -PathType Leaf +Register-Mock Test-Path { $true } -- -LiteralPath $global:sourceFile3 -PathType Leaf +Register-Mock Test-Path { throw New-Object System.ArgumentException } -- -LiteralPath $global:sourceFile4 -PathType Leaf +Register-Mock Trace-VstsPath +foreach ($treatNotIndexedAsWarning in @($true, $false)) { + Unregister-Mock Write-Host + Unregister-Mock Write-Warning + Register-Mock Write-Host + Register-Mock Write-Warning + + # Act. + $actual = Get-SourceFilePaths -SymbolsFilePath $symbolsFilePath -SourcesRootPath $sourceRootPath -TreatNotIndexedAsWarning:$treatNotIndexedAsWarning + + # Assert. + Assert-AreEqual ($global:sourceFile1, $global:sourceFile3) $actual + $atLeastOnce = -1 + Assert-WasCalled Write-Host -Time $(if ($treatNotIndexedAsWarning) { 0 } else { $atLeastOnce }) + Assert-WasCalled Write-Warning -Time $(if ($treatNotIndexedAsWarning) { $atLeastOnce } else { 0 }) +} diff --git a/_generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.WarnsForSourceFileNotUnderRoot.ps1 b/_generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.WarnsForSourceFileNotUnderRoot.ps1 new file mode 100644 index 000000000000..7f65d0c073a2 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Get-SourceFilePaths.WarnsForSourceFileNotUnderRoot.ps1 @@ -0,0 +1,35 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\SourceFileFunctions.ps1 +$symbolsFilePath = 'SomeDrive:\SomeSourceDir\SomeProject\SomeLibrary.pdb' +$sourceRootPath = 'SomeDrive:\SomeSourceDir' +$global:sourceFile1 = 'SomeDrive:\SomeSourceDir\SomeProject\SomeFile1.cs' +$global:sourceFile2 = 'SomeDrive:\SomeSourceDirectory\SomeProject\SomeFile2.cs' +$global:sourceFile3 = 'SomeDrive:\SomeSource\SomeProject\SomeFile3.cs' +$global:sourceFile4 = 'SomeDrive:\SomeSourceDir\SomeProject\SomeFile4.cs' +Register-Mock Get-DbghelpSourceFilePaths { + $global:sourceFile1 + $global:sourceFile2 + $global:sourceFile3 + $global:sourceFile4 + } -- -SymbolsFilePath $symbolsFilePath +Register-Mock Test-Path { $true } +Register-Mock Trace-VstsPath +foreach ($treatNotIndexedAsWarning in @($true, $false)) { + Unregister-Mock Write-Host + Unregister-Mock Write-Warning + Register-Mock Write-Host + Register-Mock Write-Warning + + # Act. + $actual = Get-SourceFilePaths -SymbolsFilePath $symbolsFilePath -SourcesRootPath $sourceRootPath -TreatNotIndexedAsWarning:$treatNotIndexedAsWarning + + # Assert. + Assert-AreEqual ($global:sourceFile1, $global:sourceFile4) $actual + $atLeastOnce = -1 + Assert-WasCalled Write-Host -Time $(if ($treatNotIndexedAsWarning) { 0 } else { $atLeastOnce }) + Assert-WasCalled Write-Warning -Time $(if ($treatNotIndexedAsWarning) { $atLeastOnce } else { 0 }) +} diff --git a/_generated/PublishSymbolsV2/Tests/Get-SourceProvider.ReturnsTfsGitProvider.ps1 b/_generated/PublishSymbolsV2/Tests/Get-SourceProvider.ReturnsTfsGitProvider.ps1 new file mode 100644 index 000000000000..049c2cccc112 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Get-SourceProvider.ReturnsTfsGitProvider.ps1 @@ -0,0 +1,24 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\SourceProviderFunctions.ps1 +Register-Mock Get-VstsTaskVariable { 'TfsGit' } -- -Name Build.Repository.Provider -Require +Register-Mock Get-VstsTaskVariable { 'Some build sources directory' } -- -Name Build.SourcesDirectory -Require +Register-Mock Get-VstsTaskVariable { 'Some team project ID' } -- -Name System.TeamProjectId -Require +Register-Mock Get-VstsTaskVariable { 'SomeProtocol://SomeCollection/' } -- -Name System.TeamFoundationCollectionUri -Require +Register-Mock Get-VstsTaskVariable { 'Some repo ID' } -- -Name Build.Repository.Id -Require +Register-Mock Get-VstsTaskVariable { 'Some commit ID' } -- -Name Build.SourceVersion -Require + +# Act. +$actual = Get-SourceProvider + +# Assert. +Assert-IsNotNullOrEmpty $actual +Assert-AreEqual 'TfsGit' $actual.Name +Assert-AreEqual 'Some build sources directory' $actual.SourcesRootPath +Assert-AreEqual 'Some team project ID' $actual.TeamProjectId +Assert-AreEqual 'SomeProtocol://SomeCollection' $actual.CollectionUrl +Assert-AreEqual 'Some repo ID' $actual.RepoId +Assert-AreEqual 'Some commit ID' $actual.CommitId diff --git a/_generated/PublishSymbolsV2/Tests/Get-SourceProvider.WarnsForUnsupportedProvider.ps1 b/_generated/PublishSymbolsV2/Tests/Get-SourceProvider.WarnsForUnsupportedProvider.ps1 new file mode 100644 index 000000000000..92fa41fd74ae --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Get-SourceProvider.WarnsForUnsupportedProvider.ps1 @@ -0,0 +1,17 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\SourceProviderFunctions.ps1 +Register-Mock Get-VstsTaskVariable { 'Some repository provider' } -- -Name Build.Repository.Provider -Require +Register-Mock Get-VstsTaskVariable { 'Some build sources directory' } -- -Name Build.SourcesDirectory -Require +Register-Mock Get-VstsTaskVariable { 'Some team project ID' } -- -Name System.TeamProjectId -Require +Register-Mock Write-Warning + +# Act. +$actual = Get-SourceProvider + +# Assert. +Assert-IsNullOrEmpty $actual +Assert-WasCalled Write-Warning diff --git a/_generated/PublishSymbolsV2/Tests/Get-SymbolBinaryPathCallers.Succeed.ps1 b/_generated/PublishSymbolsV2/Tests/Get-SymbolBinaryPathCallers.Succeed.ps1 new file mode 100644 index 000000000000..0d0ee528ea07 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Get-SymbolBinaryPathCallers.Succeed.ps1 @@ -0,0 +1,88 @@ +[CmdletBinding()] +param() + +# Setup +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 + +# Stub out module not under test, but required to import SymbolsCommon.psm1 +$emptyModule = New-Module -Name VstsTaskSdk -ScriptBlock { $null } +Unregister-Mock Import-Module # Undo mock created by Tests\lib\Initialize-Test.ps1 preventing emptyModule stub + +try +{ + Import-Module $emptyModule + + # Import code under test + Import-Module $PSScriptRoot\..\SymbolsCommon.psm1 + + # Stub out file access under test + $null = [System.IO.Directory]::CreateDirectory("$($env:TEMP)\V1Agent\Agent\Worker\Tools\Pdbstr") + [System.IO.File]::WriteAllText("$($env:TEMP)\V1Agent\Agent\Worker\Tools\Pdbstr\pdbstr.exe", "") + $null = [System.IO.Directory]::CreateDirectory("$($env:TEMP)\V1Agent\Agent\Worker\Tools\Symstore") + [System.IO.File]::WriteAllText("$($env:TEMP)\V1Agent\Agent\Worker\Tools\Symstore\dbghelp.dll", "") + [System.IO.File]::WriteAllText("$($env:TEMP)\V1Agent\Agent\Worker\Tools\Symstore\Symstore.exe", "") + $null = [System.IO.Directory]::CreateDirectory("$($env:TEMP)\V2Agent\externals\pdbstr") + [System.IO.File]::WriteAllText("$($env:TEMP)\V2Agent\externals\pdbstr\pdbstr.exe", "") + $null = [System.IO.Directory]::CreateDirectory("$($env:TEMP)\V2Agent\externals\symstore") + [System.IO.File]::WriteAllText("$($env:TEMP)\V2Agent\externals\symstore\dbghelp.dll", "") + [System.IO.File]::WriteAllText("$($env:TEMP)\V2Agent\externals\symstore\Symstore.exe", "") + $taskRoot = [System.IO.Path]::GetDirectoryName("$PSScriptRoot") # Parent of Tests dir + + # Mock file access not under test + Register-Mock Assert-VstsPath + + # V2 agent, UseDbgLkg default to true + Register-Mock Get-VstsTaskVariable { "$($env:TEMP)\V2Agent" } -- -Name Agent.HomeDirectory -Require + $env:PublishSymbols_Debug = "true" + $env:PublishSymbols_UseDbgLkg = $null + Assert-AreEqual -Expected "$taskRoot\dbghelp.dll" -Actual (Get-DbghelpPath) + Assert-AreEqual -Expected "$taskRoot\pdbstr.exe" -Actual (Get-PdbstrPath) + Assert-AreEqual -Expected "$taskRoot\symstore.exe" -Actual (Get-SymStorePath) + Unregister-Mock Get-VstsTaskVariable + + # V2 agent, UseDbgLkg explicitly true + Register-Mock Get-VstsTaskVariable { "$($env:TEMP)\V2Agent" } -- -Name Agent.HomeDirectory -Require + $env:PublishSymbols_Debug = "true" + $env:PublishSymbols_UseDbgLkg = "true" + Assert-AreEqual -Expected "$taskRoot\dbghelp.dll" -Actual (Get-DbghelpPath) + Assert-AreEqual -Expected "$taskRoot\pdbstr.exe" -Actual (Get-PdbstrPath) + Assert-AreEqual -Expected "$taskRoot\symstore.exe" -Actual (Get-SymStorePath) + Unregister-Mock Get-VstsTaskVariable + + # V2 agent, UseDbgLkg explicitly false (opt-out) + Register-Mock Get-VstsTaskVariable { "$($env:TEMP)\V2Agent" } -- -Name Agent.HomeDirectory -Require + $env:PublishSymbols_Debug = "true" + $env:PublishSymbols_UseDbgLkg = "false" + Assert-AreEqual -Expected "$($env:TEMP)\V2Agent\externals\symstore\dbghelp.dll" -Actual (Get-DbghelpPath) + Assert-AreEqual -Expected "$($env:TEMP)\V2Agent\externals\pdbstr\pdbstr.exe" -Actual (Get-PdbstrPath) + Assert-AreEqual -Expected "$($env:TEMP)\V2Agent\externals\symstore\symstore.exe" -Actual (Get-SymStorePath) + Unregister-Mock Get-VstsTaskVariable + + # V1 agent, UseDbgLkg true + Register-Mock Get-VstsTaskVariable { "$($env:TEMP)\V1Agent" } -- -Name Agent.HomeDirectory -Require + $env:PublishSymbols_Debug = "true" + $env:PublishSymbols_UseDbgLkg = "true" + Assert-AreEqual -Expected "$taskRoot\dbghelp.dll" -Actual (Get-DbghelpPath) + Assert-AreEqual -Expected "$taskRoot\pdbstr.exe" -Actual (Get-PdbstrPath) + Assert-AreEqual -Expected "$taskRoot\symstore.exe" -Actual (Get-SymStorePath) + Unregister-Mock Get-VstsTaskVariable + + # V1 agent, UseDbgLkg explicitly false + Register-Mock Get-VstsTaskVariable { "$($env:TEMP)\V1Agent" } -- -Name Agent.HomeDirectory -Require + $env:PublishSymbols_Debug = "true" + $env:PublishSymbols_UseDbgLkg = "false" + Assert-AreEqual -Expected "$($env:TEMP)\V1Agent\Agent\Worker\Tools\Symstore\dbghelp.dll" -Actual (Get-DbghelpPath) + Assert-AreEqual -Expected "$($env:TEMP)\V1Agent\Agent\Worker\Tools\Pdbstr\pdbstr.exe" -Actual (Get-PdbstrPath) + Assert-AreEqual -Expected "$($env:TEMP)\V1Agent\Agent\Worker\Tools\Symstore\symstore.exe" -Actual (Get-SymStorePath) + Unregister-Mock Get-VstsTaskVariable + + # Assert the build contains this dependency from the archivePackage + Assert-WasCalled Assert-VstsPath +} +finally +{ + # Cleanup before running other tests + Remove-Module VstsTaskSdk + $env:PublishSymbols_Debug = $null + $env:PublishSymbols_UseDbgLkg = $null +} diff --git a/_generated/PublishSymbolsV2/Tests/Get-SymbolClientVersion.SucceedsWithRetry.ps1 b/_generated/PublishSymbolsV2/Tests/Get-SymbolClientVersion.SucceedsWithRetry.ps1 new file mode 100644 index 000000000000..c1d311046308 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Get-SymbolClientVersion.SucceedsWithRetry.ps1 @@ -0,0 +1,34 @@ +[CmdletBinding()] +param() + +# Setup +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\SymbolClientFunctions.ps1 +Microsoft.PowerShell.Core\Import-Module $PSScriptRoot\..\ps_modules\PowershellHelpers + +# Test 1 - Get-MsiAccessToken returns correct access token if token fetching api returns 200 +$global:attempt = 1; +Register-Mock Invoke-WebRequest { + if($global:attempt -le 3) + { + $global:attempt++ + throw "Error" + } + return @{ + StatusCode = 200 + Headers = @{"symbol-client-version"= "1.0.0"} + } +} + +$result = Get-SymbolClientVersion "https://example.com" + +Assert-WasCalled Invoke-WebRequest -Times 4 +Assert-AreEqual $result "1.0.0" + +# Test 2 - Get-MsiAccessToken throws error if token fetching api throws error +Unregister-Mock Invoke-WebRequest +Register-Mock Invoke-WebRequest { + throw "error" +} + +Assert-Throws { Get-SymbolClientVersion "https://example.com" } \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Tests/Get-ValidValue.ReturnsWithinRange.ps1 b/_generated/PublishSymbolsV2/Tests/Get-ValidValue.ReturnsWithinRange.ps1 new file mode 100644 index 000000000000..39100044d49a --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Get-ValidValue.ReturnsWithinRange.ps1 @@ -0,0 +1,30 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\CommonFunctions.ps1 +$variableSets = @( + @{ Current = [timespan]::FromHours(1) + Minimum = [timespan]::FromHours(10) + Maximum = [timespan]::FromHours(20) + Expected = [timespan]::FromHours(10) } + @{ Current = [timespan]::FromHours(15) + Minimum = [timespan]::FromHours(10) + Maximum = [timespan]::FromHours(20) + Expected = [timespan]::FromHours(15) } + @{ Current = [timespan]::FromHours(30) + Minimum = [timespan]::FromHours(10) + Maximum = [timespan]::FromHours(20) + Expected = [timespan]::FromHours(20) } +) +foreach ($variableSet in $variableSets) { + $expected = $variableSet['Expected'] + $variableSet.Remove('Expected') + + # Act. + $actual = Get-ValidValue @variableSet + + # Assert. + Assert-AreEqual $expected $actual +} diff --git a/_generated/PublishSymbolsV2/Tests/Invoke-IndexSources.MultipleFiles.ps1 b/_generated/PublishSymbolsV2/Tests/Invoke-IndexSources.MultipleFiles.ps1 new file mode 100644 index 000000000000..21d61f88f49f --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Invoke-IndexSources.MultipleFiles.ps1 @@ -0,0 +1,57 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\IndexFunctions.ps1 +foreach ($treatNotIndexedAsWarning in @($false, $true)) { + Unregister-Mock Push-Location + Unregister-Mock Add-DbghelpLibrary + Unregister-Mock Get-PdbstrPath + Unregister-Mock Get-SourceProvider + Unregister-Mock Get-SourceFilePaths + Unregister-Mock New-SrcSrvIniContent + Unregister-Mock Add-SourceServerStream + Unregister-Mock Remove-DbghelpLibrary + $pdbstrExePath = "SomeDrive:\AgentHome\...\pdbstr.exe" + Register-Mock Get-PdbstrPath { $pdbstrExePath } + Register-Mock Push-Location + $script:libraryHandle = -1234 + Register-Mock Add-DbghelpLibrary { $script:libraryHandle } + $script:sourcesRoot = 'SomeDrive:\SomeSourcesRoot' + $script:provider = New-Object psobject -Property @{ SourcesRootPath = $sourcesRoot } + Register-Mock Get-SourceProvider { $script:provider } + Register-Mock Add-SourceServerStream + Register-Mock Remove-DbghelpLibrary + + # Arrange mocks for the first symbols file. + $symbolsFile1 = 'SomeDrive:\SomeDir\SomeLibrary1.pdb' + $sourceFile1 = "$sourcesRoot\SourceFile1.cs" + $sourceFile2 = "$sourcesRoot\SourceFile2.cs" + Register-Mock Get-SourceFilePaths { + $sourceFile1 + $sourceFile2 + } -- -SymbolsFilePath $symbolsFile1 -SourcesRootPath $sourcesRoot -TreatNotIndexedAsWarning: $treatNotIndexedAsWarning + $iniContent1 = 'Some INI content 1' + Register-Mock New-SrcSrvIniContent { $iniContent1 } -- -Provider $provider -SourceFilePaths $sourceFile1, $sourceFile2 + + # Arrange mocks for the second symbols file. + $symbolsFile2 = 'SomeDrive:\SomeDir\SomeLibrary2.pdb' + $sourceFile3 = "$sourcesRoot\SourceFile3.cs" + $sourceFile4 = "$sourcesRoot\SourceFile4.cs" + Register-Mock Get-SourceFilePaths { + $sourceFile3 + $sourceFile4 + } -- -SymbolsFilePath $symbolsFile2 -SourcesRootPath $sourcesRoot -TreatNotIndexedAsWarning: $treatNotIndexedAsWarning + $iniContent2 = 'Some INI content 2' + Register-Mock New-SrcSrvIniContent { $iniContent2 } -- -Provider $provider -SourceFilePaths $sourceFile3, $sourceFile4 + + # Act. + Invoke-IndexSources -SymbolsFilePaths $symbolsFile1, $symbolsFile2 -TreatNotIndexedAsWarning:$treatNotIndexedAsWarning + + # Assert. + Assert-WasCalled Push-Location $env:TEMP + Assert-WasCalled Add-SourceServerStream -- -PdbStrPath $pdbstrExePath -SymbolsFilePath $symbolsFile1 -StreamContent $iniContent1 + Assert-WasCalled Add-SourceServerStream -- -PdbStrPath $pdbstrExePath -SymbolsFilePath $symbolsFile2 -StreamContent $iniContent2 + Assert-WasCalled Remove-DbghelpLibrary -- -HModule $libraryHandle +} diff --git a/_generated/PublishSymbolsV2/Tests/Invoke-IndexSources.ReturnIfSourceProviderIsNull.ps1 b/_generated/PublishSymbolsV2/Tests/Invoke-IndexSources.ReturnIfSourceProviderIsNull.ps1 new file mode 100644 index 000000000000..fa5b2e811885 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Invoke-IndexSources.ReturnIfSourceProviderIsNull.ps1 @@ -0,0 +1,24 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\IndexFunctions.ps1 +Register-Mock Get-PdbstrPath { "SomeDrive:\AgentHome\...\pdbstr.exe" } +Register-Mock Push-Location +$script:libraryHandle = -1234 +Register-Mock Add-DbghelpLibrary { $script:libraryHandle } +$script:sourcesRoot = 'SomeDrive:\SomeSourcesRoot' +Register-Mock Get-SourceProvider +Register-Mock Get-SourceFilePaths +Register-Mock New-SrcSrvIniContent +Register-Mock Add-SourceServerStream +Register-Mock Remove-DbghelpLibrary + +# Act. +Invoke-IndexSources -SymbolsFilePaths 'SomeDrive:\SomeDir\SomeLibrary1.pdb' -TreatNotIndexedAsWarning + +# Assert. +Assert-WasCalled Push-Location $env:TEMP +Assert-WasCalled Get-SourceFilePaths -Times 0 +Assert-WasCalled Remove-DbghelpLibrary -- -HModule $libraryHandle diff --git a/_generated/PublishSymbolsV2/Tests/Invoke-IndexSources.WarnsIfNoSymbolsFiles.ps1 b/_generated/PublishSymbolsV2/Tests/Invoke-IndexSources.WarnsIfNoSymbolsFiles.ps1 new file mode 100644 index 000000000000..4a6b94480e65 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Invoke-IndexSources.WarnsIfNoSymbolsFiles.ps1 @@ -0,0 +1,14 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\IndexFunctions.ps1 +Register-Mock Write-Warning + +# Act. +Invoke-IndexSources -SymbolsFilePaths @() -TreatNotIndexedAsWarning:$false + +# Assert. +Assert-WasCalled Write-Warning -Times 1 +Assert-WasCalled Write-Warning -- 'NoFilesForIndexing' diff --git a/_generated/PublishSymbolsV2/Tests/Invoke-IndexSources.WarnsIfTmpContainsSpace.ps1 b/_generated/PublishSymbolsV2/Tests/Invoke-IndexSources.WarnsIfTmpContainsSpace.ps1 new file mode 100644 index 000000000000..696702250b7d --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Invoke-IndexSources.WarnsIfTmpContainsSpace.ps1 @@ -0,0 +1,25 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\IndexFunctions.ps1 +$env:TMP = "$env:TMP _" +Register-Mock Write-Warning +Register-Mock Get-PdbstrPath { "SomeDrive:\AgentHome\...\pdbstr.exe" } +Register-Mock Push-Location +Register-Mock Add-DbghelpLibrary { -1234 } +$script:sourcesRoot = 'SomeDrive:\SomeSourcesRoot' +$script:provider = New-Object psobject -Property @{ SourcesRootPath = $sourcesRoot } +Register-Mock Get-SourceProvider { $script:provider } +Register-Mock Get-SourceFilePaths +Register-Mock New-SrcSrvIniContent +Register-Mock Add-SourceServerStream +Register-Mock Remove-DbghelpLibrary + +# Act. +Invoke-IndexSources -SymbolsFilePaths 'SomeDrive:\SomeDir\SomeAssembly.pdb' -TreatNotIndexedAsWarning:$false + +# Assert. +Assert-WasCalled Get-SourceFilePaths +Assert-WasCalled Write-Warning -ArgumentsEvaluator { $args[0] -like 'SpacesInTemp' } diff --git a/_generated/PublishSymbolsV2/Tests/Invoke-PublishSymbols.Publishes.ps1 b/_generated/PublishSymbolsV2/Tests/Invoke-PublishSymbols.Publishes.ps1 new file mode 100644 index 000000000000..8761133751c1 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Invoke-PublishSymbols.Publishes.ps1 @@ -0,0 +1,47 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\CommonFunctions.ps1 +. $PSScriptRoot\..\PublishHelpers\PublishFunctions.ps1 +Write-Verbose ($share = [System.IO.Path]::Combine($env:TMP, ([System.IO.Path]::GetRandomFileName()))) +$pdbFiles = 'Some PDB file 1', 'Some PDB file 2' +$product = 'Some product' +$version = 'Some version' +$maximumWaitTime = [timespan]::FromSeconds(2) +$semaphoreMessage = 'Some semaphore message' +$artifactName = 'Some artifact name' +$responseFile = "$share\responseFile.txt" +Register-Mock New-ResponseFile { [System.IO.File]::WriteAllText($responseFile, 'Some response file content') ; $responseFile } +$semaphore = New-Object psobject +Register-Mock Lock-Semaphore { $semaphore } +Register-Mock Get-SymStorePath { 'Some path to symstore.exe' } +Register-Mock Invoke-VstsTool +Register-Mock Get-LastTransactionId { 'Some last transaction ID' } +Register-Mock Unlock-Semaphore +Register-Mock Get-ArtifactName { 'Some different artifact name' } +Register-Mock Write-VstsAssociateArtifact +try { + $null = [System.IO.Directory]::CreateDirectory($share) + + # Act. + Invoke-PublishSymbols -PdbFiles $pdbFiles -Share $share -Product $product -Version $version -MaximumWaitTime $maximumWaitTime -SemaphoreMessage $semaphoreMessage -ArtifactName $artifactName + + # Assert. + Assert-WasCalled New-ResponseFile -- -PdbFiles $pdbFiles + Assert-WasCalled Lock-Semaphore -Share $share -MaximumWaitTime ([timespan]::FromMinutes(1)) -SemaphoreMessage $semaphoreMessage + Assert-WasCalled Invoke-VstsTool -- -FileName 'Some path to symstore.exe' -Arguments "add /f ""@$responseFile"" /s ""$share"" /t ""$product"" /v ""$version""" -WorkingDirectory ([System.IO.Path]::GetTempPath()) + Assert-WasCalled Get-LastTransactionId -- -Share $share + Assert-WasCalled Unlock-Semaphore -- $semaphore + Assert-WasCalled Get-ArtifactName -- -ArtifactName $artifactName -LastTransactionId 'Some last transaction ID' + Assert-WasCalled Write-VstsAssociateArtifact -ParametersEvaluator { + $Name -eq 'Some different artifact name' -and + $Path -eq $share -and + $Type -eq 'SymbolStore' -and + $Properties['TransactionId'] -eq 'Some last transaction ID' + } + Assert-AreEqual $false (Test-Path -LiteralPath $responseFile) +} finally { + if (Test-Path -LiteralPath $share) { Remove-Item -LiteralPath $share -Recurse } +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Tests/Invoke-PublishSymbols.ReturnsIfNoFiles.ps1 b/_generated/PublishSymbolsV2/Tests/Invoke-PublishSymbols.ReturnsIfNoFiles.ps1 new file mode 100644 index 000000000000..6905e669129d --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Invoke-PublishSymbols.ReturnsIfNoFiles.ps1 @@ -0,0 +1,28 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\CommonFunctions.ps1 +. $PSScriptRoot\..\PublishHelpers\PublishFunctions.ps1 +Write-Verbose ($share = [System.IO.Path]::Combine($env:TMP, ([System.IO.Path]::GetRandomFileName()))) +$pdbFiles = @( ) +$product = 'Some product' +$version = 'Some version' +$maximumWaitTime = [timespan]::FromSeconds(2) +$semaphoreMessage = 'Some semaphore message' +$artifactName = 'Some artifact name' +Register-Mock Write-Warning +Register-Mock New-ResponseFile { throw 'Should not reach here.' } +Register-Mock Write-VstsAssociateArtifact +try { + $null = [System.IO.Directory]::CreateDirectory($share) + + # Act. + Invoke-PublishSymbols -PdbFiles $pdbFiles -Share $share -Product $product -Version $version -MaximumWaitTime $maximumWaitTime -SemaphoreMessage $semaphoreMessage -ArtifactName $artifactName + + # Assert. + Assert-WasCalled Write-Warning -ArgumentsEvaluator { $args[0] -like '*NoFilesForPublishing*' } +} finally { + if (Test-Path -LiteralPath $share) { Remove-Item -LiteralPath $share -Recurse } +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Tests/Invoke-UnpublishSymbols.Unpublishes.ps1 b/_generated/PublishSymbolsV2/Tests/Invoke-UnpublishSymbols.Unpublishes.ps1 new file mode 100644 index 000000000000..5452dbd41ac1 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Invoke-UnpublishSymbols.Unpublishes.ps1 @@ -0,0 +1,29 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\CommonFunctions.ps1 +. $PSScriptRoot\..\PublishHelpers\UnpublishFunctions.ps1 +Write-Verbose ($share = [System.IO.Path]::Combine($env:TMP, ([System.IO.Path]::GetRandomFileName()))) +$transactionId = 'Some transaction ID' +$maximumWaitTime = [timespan]::FromSeconds(2) +$semaphoreMessage = 'Some semaphore message' +$semaphore = New-Object psobject +Register-Mock Lock-Semaphore { $semaphore } +Register-Mock Get-SymStorePath { 'Some path to symstore.exe' } +Register-Mock Invoke-VstsTool +Register-Mock Unlock-Semaphore +try { + $null = [System.IO.Directory]::CreateDirectory($share) + + # Act. + Invoke-UnpublishSymbols -Share $share -TransactionId $transactionId -MaximumWaitTime $maximumWaitTime -SemaphoreMessage $semaphoreMessage + + # Assert. + Assert-WasCalled Lock-Semaphore -Share $share -MaximumWaitTime ([timespan]::FromMinutes(1)) -SemaphoreMessage $semaphoreMessage + Assert-WasCalled Invoke-VstsTool -- -FileName 'Some path to symstore.exe' -Arguments "del /i ""$transactionId"" /s ""$share""" -WorkingDirectory ([System.IO.Path]::GetTempPath()) -RequireExitCodeZero + Assert-WasCalled Unlock-Semaphore -- $semaphore +} finally { + if (Test-Path -LiteralPath $share) { Remove-Item -LiteralPath $share -Recurse } +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Tests/L0.ts b/_generated/PublishSymbolsV2/Tests/L0.ts new file mode 100644 index 000000000000..0fae7ce9ee7d --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/L0.ts @@ -0,0 +1,162 @@ +/// +/// +/// + +import Q = require('q'); +import assert = require('assert'); +import path = require('path'); +var psm = require('../../../Tests/lib/psRunner'); +var psr = null; + +describe('PublishSymbols Suite', function () { + this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000); + + before((done) => { + if (psm.testSupported()) { + psr = new psm.PSRunner(); + psr.start(); + } + + done(); + }); + + after(function () { + if (psr) { + psr.kill(); + } + }); + + if (psm.testSupported()) { + it('(Add-DbghelpLibrary) loads if not loaded', (done) => { + psr.run(path.join(__dirname, 'Add-DbghelpLibrary.LoadsIfNotLoaded.ps1'), done); + }) + it('(Add-DbghelpLibrary) skips if already loaded', (done) => { + psr.run(path.join(__dirname, 'Add-DbghelpLibrary.SkipsIfAlreadyLoaded.ps1'), done); + }) + it('(Add-DbghelpLibrary) throws if dll not found', (done) => { + psr.run(path.join(__dirname, 'Add-DbghelpLibrary.ThrowsIfDllNotFound.ps1'), done); + }) + it('(Add-DbghelpLibrary) warns if different location already loaded', (done) => { + psr.run(path.join(__dirname, 'Add-DbghelpLibrary.WarnsIfDifferentLocationAlreadyLoaded.ps1'), done); + }) + it('(Add-DbghelpLibrary) warns if load fails', (done) => { + psr.run(path.join(__dirname, 'Add-DbghelpLibrary.WarnsIfLoadFails.ps1'), done); + }) + it('(Add-SourceServerStream) instruments pdb', (done) => { + psr.run(path.join(__dirname, 'Add-SourceServerStream.InstrumentsPdb.ps1'), done); + }) + it('(Add-SourceServerStream) specially handles pdbs with spaces', (done) => { + psr.run(path.join(__dirname, 'Add-SourceServerStream.SpeciallyHandlesPdbsWithSpaces.ps1'), done); + }) + it('(Get-ArtifactName) returns correct value', (done) => { + psr.run(path.join(__dirname, 'Get-ArtifactName.ReturnsCorrectValue.ps1'), done); + }) + it('(Get-SymbolBinaryPathCallers) succeed', (done) => { + psr.run(path.join(__dirname, 'Get-SymbolBinaryPathCallers.Succeed.ps1'), done); + }) + it('(Get-LastTransactionId) gets id', (done) => { + psr.run(path.join(__dirname, 'Get-LastTransactionId.GetsId.ps1'), done); + }) + it('(Get-LastTransactionId) warns if not found', (done) => { + psr.run(path.join(__dirname, 'Get-LastTransactionId.WarnsIfNotFound.ps1'), done); + }) + it('(Get-SourceFilePaths) returns multiple files', (done) => { + psr.run(path.join(__dirname, 'Get-SourceFilePaths.ReturnsMultipleFiles.ps1'), done); + }) + it('(Get-SourceFilePaths) warns for no source files', (done) => { + psr.run(path.join(__dirname, 'Get-SourceFilePaths.WarnsForNoSourceFiles.ps1'), done); + }) + it('(Get-SourceFilePaths) warns for source file not found', (done) => { + psr.run(path.join(__dirname, 'Get-SourceFilePaths.WarnsForSourceFileNotFound.ps1'), done); + }) + it('(Get-SourceFilePaths) warns for source file not under root', (done) => { + psr.run(path.join(__dirname, 'Get-SourceFilePaths.WarnsForSourceFileNotUnderRoot.ps1'), done); + }) + it('(Get-SourceProvider) returns tfs git provider', (done) => { + psr.run(path.join(__dirname, 'Get-SourceProvider.ReturnsTfsGitProvider.ps1'), done); + }) + it('(Get-SourceProvider) warns for unsupported provider', (done) => { + psr.run(path.join(__dirname, 'Get-SourceProvider.WarnsForUnsupportedProvider.ps1'), done); + }) + it('(Get-SymbolClientVersion) succeeds on retry', (done) => { + psr.run(path.join(__dirname, 'Get-SymbolClientVersion.SucceedsWithRetry.ps1'), done); + }) + it('(Get-ValidValue) returns within range', (done) => { + psr.run(path.join(__dirname, 'Get-ValidValue.ReturnsWithinRange.ps1'), done); + }) + // Commenting out to unblock CI + // it('(Invoke-IndexSources) multiple files', (done) => { + // psr.run(path.join(__dirname, 'Invoke-IndexSources.MultipleFiles.ps1'), done); + // }) + it('(Invoke-IndexSources) return if source provider is null', (done) => { + psr.run(path.join(__dirname, 'Invoke-IndexSources.ReturnIfSourceProviderIsNull.ps1'), done); + }) + it('(Invoke-IndexSources) warns if no symbols files', (done) => { + psr.run(path.join(__dirname, 'Invoke-IndexSources.WarnsIfNoSymbolsFiles.ps1'), done); + }) + // it('(Invoke-IndexSources) warns if tmp contains space', (done) => { + // psr.run(path.join(__dirname, 'Invoke-IndexSources.WarnsIfTmpContainsSpace.ps1'), done); + // }) + it('(Invoke-PublishSymbols) publishes', (done) => { + psr.run(path.join(__dirname, 'Invoke-PublishSymbols.Publishes.ps1'), done); + }) + it('(Invoke-PublishSymbols) returns if no files', (done) => { + psr.run(path.join(__dirname, 'Invoke-PublishSymbols.ReturnsIfNoFiles.ps1'), done); + }) + it('(Invoke-UnpublishSymbols) unpublishes', (done) => { + psr.run(path.join(__dirname, 'Invoke-UnpublishSymbols.Unpublishes.ps1'), done); + }) + it('(Lock-Semaphore) cleans up expired semaphore', (done) => { + psr.run(path.join(__dirname, 'Lock-Semaphore.CleansUpExpiredSemaphore.ps1'), done); + }) + it('(Lock-Semaphore) creates semaphore', (done) => { + psr.run(path.join(__dirname, 'Lock-Semaphore.CreatesSemaphore.ps1'), done); + }) + it('(Lock-Semaphore) reaches max wait time', (done) => { + psr.run(path.join(__dirname, 'Lock-Semaphore.ReachesMaxWaitTime.ps1'), done); + }) + it('(Lock-Semaphore) retries on exception', (done) => { + psr.run(path.join(__dirname, 'Lock-Semaphore.RetriesOnException.ps1'), done); + }) + it('(New-ResponseFile) creates file', (done) => { + psr.run(path.join(__dirname, 'New-ResponseFile.CreatesFile.ps1'), done); + }) + it('(New-SrcSrvIniContent) returns tfs git content', (done) => { + psr.run(path.join(__dirname, 'New-SrcSrvIniContent.ReturnsTfsGitContent.ps1'), done); + }) + it('(New-SrcSrvIniContent) returns tfvc content', (done) => { + psr.run(path.join(__dirname, 'New-SrcSrvIniContent.ReturnsTfvcContent.ps1'), done); + }) + it('(New-TfsGitSrcSrvIniContent) formats content', (done) => { + psr.run(path.join(__dirname, 'New-TfsGitSrcSrvIniContent.FormatsContent.ps1'), done); + }) + // Commenting it out to unblock ci + // it('(New-TfvcSrcSrvIniContent) formats content', (done) => { + // psr.run(path.join(__dirname, 'New-TfvcSrcSrvIniContent.FormatsContent.ps1'), done); + // }) + it('passes arguments', (done) => { + psr.run(path.join(__dirname, 'PassesArguments.ps1'), done); + }) + it('passes delete arguments', (done) => { + psr.run(path.join(__dirname, 'PassesDeleteArguments.ps1'), done); + }) + it('(Remove-SemaphoreFile_Safe) performs cleanup', (done) => { + psr.run(path.join(__dirname, 'Remove-SemaphoreFile_Safe.PerformsCleanup.ps1'), done); + }) + it('sets fallback max wait time', (done) => { + psr.run(path.join(__dirname, 'SetsFallbackMaxWaitTime.ps1'), done); + }) + it('skips indexing', (done) => { + psr.run(path.join(__dirname, 'SkipsIndexing.ps1'), done); + }) + it('skips publishing', (done) => { + psr.run(path.join(__dirname, 'SkipsPublishing.ps1'), done); + }) + it('(Test-SemaphoreMaximumAge) is correct', (done) => { + psr.run(path.join(__dirname, 'Test-SemaphoreMaximumAge.IsCorrect.ps1'), done); + }) + it('(Unlock-Semaphore) performs cleanup', (done) => { + psr.run(path.join(__dirname, 'Unlock-Semaphore.PerformsCleanup.ps1'), done); + }) + } +}); diff --git a/_generated/PublishSymbolsV2/Tests/L0NetCore.ts b/_generated/PublishSymbolsV2/Tests/L0NetCore.ts new file mode 100644 index 000000000000..be19e6205859 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/L0NetCore.ts @@ -0,0 +1,26 @@ +import * as path from 'path'; +import * as assert from 'assert'; +import * as ttm from 'azure-pipelines-task-lib/mock-test'; + +describe('Publishing Symbol Suite', function () { + before(() => { + }); + + after(() => { + }); + + it('(Publishing symbols) from current organization with NetCore version', async function (done: MochaDone) { + this.timeout(1000); + let tp = path.join(__dirname, './PublishSymbolsInternal.js') + assert("should have no errors", tp); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + await tr.runAsync(); + assert(tr.ran(`mock/location/symbol.exe publish --service https://example.artifacts.visualstudio.com --name testpublishsymbol/testpublishsymbolbuild/2021.11.30/1/8fd4c05c-e13b-4dc1-8f0f-7e1c661db3b5 --directory c:\\temp --expirationInDays 365 --patAuthEnvVar SYMBOL_PAT_AUTH_TOKEN --fileListFileName ${path.join("c:\\agent\\_temp", "ListOfSymbols-8fd4c05c-e13b-4dc1-8f0f-7e1c661db3b5.txt")} --tracelevel verbose --globalretrycount 2`), 'it should have run client tool symbol.exe'); + assert(tr.stdOutContained('Symbol.exe output'), "should have symbol output"); + assert(tr.succeeded, 'should have succeeded'); + assert.strictEqual(tr.errorIssues.length, 0, "should have no errors"); + assert(tr.invokedToolCount > 0, 'should have run client tool once'); + done(); + }); +}); \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Tests/Lock-Semaphore.CleansUpExpiredSemaphore.ps1 b/_generated/PublishSymbolsV2/Tests/Lock-Semaphore.CleansUpExpiredSemaphore.ps1 new file mode 100644 index 000000000000..2c2a56342f56 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Lock-Semaphore.CleansUpExpiredSemaphore.ps1 @@ -0,0 +1,35 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\SemaphoreFunctions.ps1 +Register-Mock Write-Warning +Write-Verbose ($share = [System.IO.Path]::Combine($env:TMP, ([System.IO.Path]::GetRandomFileName()))) +$semaphorePath = "$share\_lockfile.sem" +try { + $null = [System.IO.Directory]::CreateDirectory($share) + [System.IO.File]::WriteAllText($semaphorePath, 'Some already existing semaphore file') + [System.IO.File]::SetCreationTime($semaphorePath, ([datetime]::Now.AddHours(-25))) + + # Act. + $semaphore = Lock-Semaphore -Share $share -MaximumWaitTime ([timespan]::FromSeconds(1)) -SemaphoreMessage "Some new semaphore message" + + # Assert. + Assert-AreEqual "$($semaphore.Path)" $semaphorePath + Assert-Throws { + [System.IO.File]::Open( + $semaphorePath, + ([System.IO.FileMode]::Open), + ([System.IO.FileAccess]::Read), + ([System.IO.FileShare]::ReadWrite)) + } -MessagePattern *file*being*used*another*process* + $semaphore.Stream.Dispose() + Assert-AreEqual "Some new semaphore message" ([System.IO.File]::ReadAllText($semaphorePath)) + Assert-WasCalled Write-Warning -Times 2 + Assert-WasCalled Write-Warning -ArgumentsEvaluator { $args[0] -like '*SemaphoreFile0Minutes1AttemptingCleanup*' } + Assert-WasCalled Write-Warning -ArgumentsEvaluator { $args[0] -like '*CleanedUpSemaphoreFile0*' } +} finally { + if ($semaphore.Stream) { $semaphore.Stream.Dispose() } + if (Test-Path -LiteralPath $share) { Remove-Item -LiteralPath $share -Recurse } +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Tests/Lock-Semaphore.CreatesSemaphore.ps1 b/_generated/PublishSymbolsV2/Tests/Lock-Semaphore.CreatesSemaphore.ps1 new file mode 100644 index 000000000000..057a8e54db44 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Lock-Semaphore.CreatesSemaphore.ps1 @@ -0,0 +1,33 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\SemaphoreFunctions.ps1 +foreach ($createDirectory in @( $true, $false )) { + Write-Verbose ($share = [System.IO.Path]::Combine($env:TMP, ([System.IO.Path]::GetRandomFileName()))) + $semaphorePath = "$share\_lockfile.sem" + try { + if ($createDirectory) { + $null = [System.IO.Directory]::CreateDirectory($share) + } + + # Act. + $semaphore = Lock-Semaphore -Share $share -MaximumWaitTime ([timespan]::FromMilliseconds(1)) -SemaphoreMessage "Some semaphore message" + + # Assert. + Assert-AreEqual "$($semaphore.Path)" $semaphorePath + Assert-Throws { + [System.IO.File]::Open( + $semaphorePath, + ([System.IO.FileMode]::Open), + ([System.IO.FileAccess]::Read), + ([System.IO.FileShare]::ReadWrite)) + } -MessagePattern *file*being*used*another*process* + $semaphore.Stream.Dispose() + Assert-AreEqual "Some semaphore message" ([System.IO.File]::ReadAllText($semaphorePath)) + } finally { + if ($semaphore.Stream) { $semaphore.Stream.Dispose() } + if (Test-Path -LiteralPath $share) { Remove-Item -LiteralPath $share -Recurse } + } +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Tests/Lock-Semaphore.ReachesMaxWaitTime.ps1 b/_generated/PublishSymbolsV2/Tests/Lock-Semaphore.ReachesMaxWaitTime.ps1 new file mode 100644 index 000000000000..41968f7a8780 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Lock-Semaphore.ReachesMaxWaitTime.ps1 @@ -0,0 +1,27 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\SemaphoreFunctions.ps1 +Register-Mock Write-Warning +Register-Mock Start-Sleep +$maximumWaitTime = $script:sleepInterval + [timespan]::FromSeconds(1) +Write-Verbose ($share = [System.IO.Path]::Combine($env:TMP, ([System.IO.Path]::GetRandomFileName()))) +$semaphorePath = "$share\_lockfile.sem" +try { + $null = [System.IO.Directory]::CreateDirectory($share) + [System.IO.File]::WriteAllText($semaphorePath, 'Some already existing semaphore file') + + # Act. + Assert-Throws { + Lock-Semaphore -Share $share -MaximumWaitTime $maximumWaitTime -SemaphoreMessage 'Some new semaphore message' + } -MessagePattern *ReachedPublishingMaxWaitTime0Seconds* + + # Assert + Assert-WasCalled Write-Warning -Times 2 -ArgumentsEvaluator { $args[0] -like '*SemaphoreFile0ExistsRetrying1Seconds*' } + Assert-WasCalled Start-Sleep -Times 2 -- -Seconds $script:sleepInterval.TotalSeconds + Assert-AreEqual 'Some already existing semaphore file' ([System.IO.File]::ReadAllText($semaphorePath)) +} finally { + if (Test-Path -LiteralPath $share) { Remove-Item -LiteralPath $share -Recurse } +} diff --git a/_generated/PublishSymbolsV2/Tests/Lock-Semaphore.RetriesOnException.ps1 b/_generated/PublishSymbolsV2/Tests/Lock-Semaphore.RetriesOnException.ps1 new file mode 100644 index 000000000000..5d1b819924b0 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Lock-Semaphore.RetriesOnException.ps1 @@ -0,0 +1,33 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\SemaphoreFunctions.ps1 +Register-Mock Test-Path { Unregister-Mock Test-Path ; throw (New-Object System.IO.IOException('Some IO exception message'))} +Register-Mock Write-Warning +Register-Mock Start-Sleep +Write-Verbose ($share = [System.IO.Path]::Combine($env:TMP, ([System.IO.Path]::GetRandomFileName()))) +$semaphorePath = "$share\_lockfile.sem" +try { + # Act. + $semaphore = Lock-Semaphore -Share $share -MaximumWaitTime ($script:sleepInterval + [timespan]::FromSeconds(1)) -SemaphoreMessage "Some semaphore message" + + # Assert. + Assert-AreEqual "$($semaphore.Path)" $semaphorePath + Assert-Throws { + [System.IO.File]::Open( + $semaphorePath, + ([System.IO.FileMode]::Open), + ([System.IO.FileAccess]::Read), + ([System.IO.FileShare]::ReadWrite)) + } -MessagePattern *file*being*used*another*process* + $semaphore.Stream.Dispose() + Assert-AreEqual "Some semaphore message" ([System.IO.File]::ReadAllText($semaphorePath)) + Assert-WasCalled Write-Warning -Times 1 + Assert-WasCalled Write-Warning -ArgumentsEvaluator { $args[0] -like '*Error0AccessingSemaphoreFile1Retrying2Seconds*' } + Assert-WasCalled Start-Sleep -Times 1 -- -Seconds $script:sleepInterval.TotalSeconds +} finally { + if ($semaphore.Stream) { $semaphore.Stream.Dispose() } + if (Test-Path -LiteralPath $share) { Remove-Item -LiteralPath $share -Recurse } +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Tests/New-ResponseFile.CreatesFile.ps1 b/_generated/PublishSymbolsV2/Tests/New-ResponseFile.CreatesFile.ps1 new file mode 100644 index 000000000000..cf73c1201ab0 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/New-ResponseFile.CreatesFile.ps1 @@ -0,0 +1,18 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\PublishFunctions.ps1 +$pdbPaths = 'Some PDB path 1', 'Some PDB path 2' +$file = '' +try { + # Act. + $file = New-ResponseFile -PdbFiles $pdbPaths + Write-Verbose "File: $file" + + # Assert + Assert-AreEqual $pdbPaths ([System.IO.File]::ReadAllLines($file)) +} finally { + if ($file -and (Test-Path -LiteralPath $file)) { Remove-Item -LiteralPath $file } +} diff --git a/_generated/PublishSymbolsV2/Tests/New-SrcSrvIniContent.ReturnsTfsGitContent.ps1 b/_generated/PublishSymbolsV2/Tests/New-SrcSrvIniContent.ReturnsTfsGitContent.ps1 new file mode 100644 index 000000000000..d375d8c30ec3 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/New-SrcSrvIniContent.ReturnsTfsGitContent.ps1 @@ -0,0 +1,15 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\SrcSrvIniContentFunctions.ps1 +$provider = New-Object psobject -Property @{ Name = 'TfsGit' } +$sourceFiles = 'SomeDrive:\SomeDir\SomeFile1.cs', 'SomeDrive:\SomeDir\SomeFile2.cs' +Register-Mock New-TfsGitSrcSrvIniContent { 'Some content 1', 'Some content 2' } -- -Provider $provider -SourceFilePaths $sourceFiles + +# Act. +$actual = New-SrcSrvIniContent -Provider $provider -SourceFilePaths $sourceFiles + +# Assert. +Assert-AreEqual "Some content 1`r`nSome content 2`r`n" $actual diff --git a/_generated/PublishSymbolsV2/Tests/New-SrcSrvIniContent.ReturnsTfvcContent.ps1 b/_generated/PublishSymbolsV2/Tests/New-SrcSrvIniContent.ReturnsTfvcContent.ps1 new file mode 100644 index 000000000000..fec2fef139a1 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/New-SrcSrvIniContent.ReturnsTfvcContent.ps1 @@ -0,0 +1,15 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\SrcSrvIniContentFunctions.ps1 +$provider = New-Object psobject -Property @{ Name = 'TfsVersionControl' } +$sourceFiles = 'SomeDrive:\SomeDir\SomeFile1.cs', 'SomeDrive:\SomeDir\SomeFile2.cs' +Register-Mock New-TfvcSrcSrvIniContent { 'Some content 1', 'Some content 2' } -- -Provider $provider -SourceFilePaths $sourceFiles + +# Act. +$actual = New-SrcSrvIniContent -Provider $provider -SourceFilePaths $sourceFiles + +# Assert. +Assert-AreEqual "Some content 1`r`nSome content 2`r`n" $actual diff --git a/_generated/PublishSymbolsV2/Tests/New-TfsGitSrcSrvIniContent.FormatsContent.ps1 b/_generated/PublishSymbolsV2/Tests/New-TfsGitSrcSrvIniContent.FormatsContent.ps1 new file mode 100644 index 000000000000..7406f0971a5a --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/New-TfsGitSrcSrvIniContent.FormatsContent.ps1 @@ -0,0 +1,54 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\SrcSrvIniContentFunctions.ps1 +$provider = New-Object psobject -Property @{ + CollectionUrl = 'Some collection URL' + CommitId = 'Some commit ID' + RepoId = 'Some repo ID' + TeamProjectId = 'Some team project ID' + SourcesRootPath = 'SomeDrive:\SomeRoot\\\' # Function should handle trimming trailing slashes. + } +$sourceFiles = @( + 'SomeDrive:\SomeRoot\SomeSolution\SomeProject\SomeSource.cs' + 'SomeDrive:\SomeRoot\AnotherSolution\AnotherProject\AnotherSource.cs' +) +$script:now = Get-Date +Register-Mock Get-Date { $script:now } + +# Act. +$actual = New-TfsGitSrcSrvIniContent -Provider $provider -SourceFilePaths $sourceFiles + +# Assert. +$expected = @( + 'SRCSRV: ini ------------------------------------------------' + 'VERSION=3' + 'INDEXVERSION=2' + 'VERCTRL=Team Foundation Server' + [string]::Format( + [System.Globalization.CultureInfo]::InvariantCulture, + 'DATETIME={0:ddd MMM dd HH:mm:ss yyyy}', + ($now)) + 'INDEXER=TFSTB' + 'SRCSRV: variables ------------------------------------------' + "TFS_EXTRACT_TARGET=%targ%\%var5%\%fnvar%(%var6%)%fnbksl%(%var7%)" + "TFS_EXTRACT_CMD=tf.exe git view /collection:%fnvar%(%var2%) /teamproject:""%fnvar%(%var3%)"" /repository:""%fnvar%(%var4%)"" /commitId:%fnvar%(%var5%) /path:""%var7%"" /output:%SRCSRVTRG% %fnvar%(%var8%)" + "TFS_COLLECTION=Some collection URL" + "TFS_TEAM_PROJECT=Some team project ID" + "TFS_REPO=Some repo ID" + "TFS_COMMIT=Some commit ID" + "TFS_SHORT_COMMIT=Some com" + "TFS_APPLY_FILTERS=/applyfilters" + 'SRCSRVVERCTRL=git' + 'SRCSRVERRDESC=access' + 'SRCSRVERRVAR=var2' + 'SRCSRVTRG=%TFS_EXTRACT_TARGET%' + 'SRCSRVCMD=%TFS_EXTRACT_CMD%' + 'SRCSRV: source files ---------------------------------------' + "SomeDrive:\SomeRoot\SomeSolution\SomeProject\SomeSource.cs*TFS_COLLECTION*TFS_TEAM_PROJECT*TFS_REPO*TFS_COMMIT*TFS_SHORT_COMMIT*/SomeSolution/SomeProject/SomeSource.cs*TFS_APPLY_FILTERS" + "SomeDrive:\SomeRoot\AnotherSolution\AnotherProject\AnotherSource.cs*TFS_COLLECTION*TFS_TEAM_PROJECT*TFS_REPO*TFS_COMMIT*TFS_SHORT_COMMIT*/AnotherSolution/AnotherProject/AnotherSource.cs*TFS_APPLY_FILTERS" + 'SRCSRV: end ------------------------------------------------' +) +Assert-AreEqual $expected $actual diff --git a/_generated/PublishSymbolsV2/Tests/New-TfvcSrcSrvIniContent.FormatsContent.ps1 b/_generated/PublishSymbolsV2/Tests/New-TfvcSrcSrvIniContent.FormatsContent.ps1 new file mode 100644 index 000000000000..c136110e9e57 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/New-TfvcSrcSrvIniContent.FormatsContent.ps1 @@ -0,0 +1,85 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\IndexHelpers\SrcSrvIniContentFunctions.ps1 +$provider = New-Object psobject -Property @{ + PublicCollectionUrl = 'Some public collection URL' + SourcesRootPath = 'SomeDrive:\SomeRoot\\\' # Function should handle trimming trailing slashes. + Workspace = New-Object psobject + } +$sourceFiles = @( + 'SomeDrive:\SomeRoot\SomeSolution\SomeProject\SomeSource.cs' + 'SomeDrive:\SomeRoot\AnotherSolution\AnotherProject\AnotherSource.cs' +) +$script:now = Get-Date +Register-Mock Get-Date { $script:now } +Register-Mock New-ItemSpec { 'Some item spec 1' } -- -LocalPath 'SomeDrive:\SomeRoot\SomeSolution\SomeProject\SomeSource.cs' +Register-Mock New-ItemSpec { 'Some item spec 2' } -- -LocalPath 'SomeDrive:\SomeRoot\AnotherSolution\AnotherProject\AnotherSource.cs' +$provider.Workspace | + Add-Member -MemberType ScriptMethod -Name GetLocalVersions -Value { + $expected = @( + ,('Some item spec 1', 'Some item spec 2') + $false + ) + Assert-AreEqual $expected $args + $jaggedArray = [System.Array]::CreateInstance([object[]], 2) + $jaggedArray[0] = [System.Array]::CreateInstance([object], 1) + $jaggedArray[0][0] = New-Object psobject -Property @{ + Item = 'LocalVersion:\SomeRoot\SomeSolution\SomeProject\SomeSource.cs' + Version = 1 + } + $jaggedArray[1] = [System.Array]::CreateInstance([object], 1) + $jaggedArray[1][0] = New-Object psobject -Property @{ + Item = 'LocalVersion:\SomeRoot\AnotherSolution\AnotherProject\AnotherSource.cs' + Version = 2 + } + $jaggedArray + } +$provider.Workspace | + Add-Member -MemberType ScriptMethod -Name GetServerItemForLocalItem -Value { + Assert-AreEqual 1 $args.Count + switch ($args[0]) { + 'LocalVersion:\SomeRoot\SomeSolution\SomeProject\SomeSource.cs' { + '$/SomeTeamProject/SomeSolution/SomeProject/SomeSource.cs' + break + } + 'LocalVersion:\SomeRoot\AnotherSolution\AnotherProject\AnotherSource.cs' { + '$/AnotherTeamProject/AnotherSolution/AnotherProject/AnotherSource.cs' + break + } + default { throw "Unexpected argument: $($args[0])" } + } + } + + +# Act. +$actual = New-TfvcSrcSrvIniContent -Provider $provider -SourceFilePaths $sourceFiles + +# Assert. +$expected = @( + 'SRCSRV: ini ------------------------------------------------' + 'VERSION=3' + 'INDEXVERSION=2' + 'VERCTRL=Team Foundation Server' + [string]::Format( + [System.Globalization.CultureInfo]::InvariantCulture, + 'DATETIME={0:ddd MMM dd HH:mm:ss yyyy}', + $script:now) + 'INDEXER=TFSTB' + 'SRCSRV: variables ------------------------------------------' + 'TFS_EXTRACT_CMD=tf.exe view /version:%var4% /noprompt "$%var3%" /server:%fnvar%(%var2%) /console > %SRCSRVTRG%' + 'TFS_EXTRACT_TARGET=%targ%\%var2%%fnbksl%(%var3%)\%var4%\%fnfile%(%var5%)' + 'SRCSRVVERCTRL=tfs' + 'SRCSRVERRDESC=access' + 'SRCSRVERRVAR=var2' + "VSTFSSERVER=Some public collection URL" + 'SRCSRVTRG=%TFS_EXTRACT_TARGET%' + 'SRCSRVCMD=%TFS_EXTRACT_CMD%' + 'SRCSRV: source files ---------------------------------------' + "LocalVersion:\SomeRoot\SomeSolution\SomeProject\SomeSource.cs*VSTFSSERVER*/SomeTeamProject/SomeSolution/SomeProject/SomeSource.cs*1*SomeSource.cs" + "LocalVersion:\SomeRoot\AnotherSolution\AnotherProject\AnotherSource.cs*VSTFSSERVER*/AnotherTeamProject/AnotherSolution/AnotherProject/AnotherSource.cs*2*AnotherSource.cs" + 'SRCSRV: end ------------------------------------------------' +) +Assert-AreEqual $expected $actual diff --git a/_generated/PublishSymbolsV2/Tests/PassesArguments.ps1 b/_generated/PublishSymbolsV2/Tests/PassesArguments.ps1 new file mode 100644 index 000000000000..117ba34de37c --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/PassesArguments.ps1 @@ -0,0 +1,44 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +$now = Get-Date +$env:Build_BuildUri = 'Some build URI' +$env:Build_BuildNumber = 'Some build number' +$env:Build_Repository_Name = 'Some build repository name' +$env:Build_Repository_Uri = 'Some build repository URI' +$env:System_TeamProject = 'Some team project' +$env:System_TeamFoundationCollectionUri = 'Some team foundation collection URI' +Register-Mock Get-Date { $now } +Register-Mock Get-VstsTaskVariable +Register-Mock Find-VstsMatch { 'file-1.pdb', 'file-2.pdb', 'file-3.dll' } +Register-Mock Invoke-IndexSources +Register-Mock Invoke-PublishSymbols +Register-Mock Invoke-UnpublishSymbols +foreach ($treatNotIndexedAsWarning in @($true, $false)) { + Unregister-Mock Get-VstsInput + Register-Mock Get-VstsInput { '123' } -- -Name 'SymbolsMaximumWaitTime' -Default '0' -AsInt + Register-Mock Get-VstsInput { 'Some input symbols path' } -- -Name 'SymbolsPath' + Register-Mock Get-VstsInput { 'FileShare' } -ParametersEvaluator { $Name -eq 'SymbolServerType' } + Register-Mock Get-VstsInput { $true } -ParametersEvaluator { $Name -eq 'IndexSources' } + Register-Mock Get-VstsInput { $false } -ParametersEvaluator { $Name -eq 'CompressSymbols' } + Register-Mock Get-VstsInput { $true } -ParametersEvaluator { $Name -eq 'PublishSymbols' } + Register-Mock Get-VstsInput { 'Some input search pattern' } -ParametersEvaluator { $Name -eq 'SearchPattern' } + Register-Mock Get-VstsInput { 'Some input symbols product' } -ParametersEvaluator { $Name -eq 'SymbolsProduct' } + Register-Mock Get-VstsInput { 'Some input symbols version' } -ParametersEvaluator { $Name -eq 'SymbolsVersion' } + Register-Mock Get-VstsInput { 'Some input symbols folder' } -ParametersEvaluator { $Name -eq 'SymbolsFolder' } + Register-Mock Get-VstsInput { 'Some symbols artifact name' } -- -Name 'SymbolsArtifactName' + Register-Mock Get-VstsInput { $treatNotIndexedAsWarning } -ParametersEvaluator { $Name -eq 'TreatNotIndexedAsWarning' } + $env:PublishSymbols_Debug = $null + + # Act. + & $PSScriptRoot\..\PublishSymbols.ps1 + + # Assert. + Assert-WasCalled Invoke-UnpublishSymbols -Times 0 + Assert-WasCalled Find-VstsMatch -- -DefaultRoot 'Some input symbols folder' -Pattern 'Some input search pattern' + Assert-WasCalled Invoke-IndexSources -- -SymbolsFilePaths ('file-1.pdb', 'file-2.pdb') -TreatNotIndexedAsWarning: $treatNotIndexedAsWarning + $semaphoreMessage = "Machine: $env:ComputerName, BuildUri: Some build URI, BuildNumber: Some build number, RepositoryName: Some build repository name, RepositoryUri: Some build repository URI, Team Project: Some team project, CollectionUri: Some team foundation collection URI at $($now.ToUniversalTime()) UTC" + Assert-WasCalled Invoke-PublishSymbols -- -PdbFiles ('file-1.pdb', 'file-2.pdb', 'file-3.dll') -Share 'Some input symbols path' -Product 'Some input symbols product' -Version 'Some input symbols version' -MaximumWaitTime ([timespan]::FromMinutes(123)) -ArtifactName 'Some symbols artifact name' -SemaphoreMessage $semaphoreMessage -CompressSymbols:$false +} diff --git a/_generated/PublishSymbolsV2/Tests/PassesDeleteArguments.ps1 b/_generated/PublishSymbolsV2/Tests/PassesDeleteArguments.ps1 new file mode 100644 index 000000000000..7c2fa1f6ccbb --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/PassesDeleteArguments.ps1 @@ -0,0 +1,34 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +$now = Get-Date +$env:Build_BuildUri = 'Some build URI' +$env:Build_BuildNumber = 'Some build number' +$env:Build_Repository_Name = 'Some build repository name' +$env:Build_Repository_Uri = 'Some build repository URI' +$env:System_TeamProject = 'Some team project' +$env:System_TeamFoundationCollectionUri = 'Some team foundation collection URI' +Register-Mock Get-Date { $now } +Register-Mock Get-VstsTaskVariable +Register-Mock Find-VstsMatch { 'Some PDB file 1', 'Some PDB file 2' } +Register-Mock Invoke-IndexSources +Register-Mock Invoke-PublishSymbols +Register-Mock Invoke-UnpublishSymbols +Register-Mock Get-VstsInput { 'FileShare' } -ParametersEvaluator { $Name -eq 'SymbolServerType' } +Register-Mock Get-VstsInput { $true } -ParametersEvaluator { $Name -eq 'IndexSources' } +Register-Mock Get-VstsInput { '123' } -- -Name 'SymbolsMaximumWaitTime' -Default '0' -AsInt +Register-Mock Get-VstsInput { $true } -- -Name 'Delete' -AsBool +Register-Mock Get-VstsInput { 'Some input symbols path' } -- -Name 'SymbolsPath' -Require +Register-Mock Get-VstsInput { 'Some transaction ID' } -- -Name 'TransactionId' -Require +$env:PublishSymbols_Debug = $null + +# Act. +& $PSScriptRoot\..\PublishSymbols.ps1 + +# Assert. +Assert-WasCalled Invoke-IndexSources -Times 0 +Assert-WasCalled Invoke-PublishSymbols -Times 0 +$semaphoreMessage = "Unpublish: True, Machine: $env:ComputerName, BuildUri: Some build URI, BuildNumber: Some build number, RepositoryName: Some build repository name, RepositoryUri: Some build repository URI, Team Project: Some team project, CollectionUri: Some team foundation collection URI at $($now.ToUniversalTime()) UTC" +Assert-WasCalled Invoke-UnpublishSymbols -- -Share 'Some input symbols path' -TransactionId 'Some transaction ID' -MaximumWaitTime ([timespan]::FromMinutes(123)) -SemaphoreMessage $semaphoreMessage diff --git a/_generated/PublishSymbolsV2/Tests/PublishSymbolsInternal.ts b/_generated/PublishSymbolsV2/Tests/PublishSymbolsInternal.ts new file mode 100644 index 000000000000..97ccb644bf5a --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/PublishSymbolsInternal.ts @@ -0,0 +1,22 @@ +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import { ClientToolMockHelper } from './PublishSymbolsMockHelper'; + +let taskPath = path.join(__dirname, '..', 'clienttoolmain.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('PublishSymbols', 'true'); +tmr.setInput('DetailedLog', 'true'); +tmr.setInput('SymbolsFolder', 'c:\\temp'); +tmr.setInput('SearchPattern', 'pattern/to/files/*') +tmr.setInput('SymbolExpirationInDays', '365') +tmr.setVariableName('SYMBOLTOOL_FILE_PATH', 'mock/location/symbol.exe'); +let umh: ClientToolMockHelper = new ClientToolMockHelper(tmr); + +umh.mockClientToolCommand("publish", "testpublishsymbol/testpublishsymbolbuild/2021.11.30/1/8fd4c05c-e13b-4dc1-8f0f-7e1c661db3b5", "c:\\temp", '365', path.join("c:\\agent\\_temp", "ListOfSymbols-8fd4c05c-e13b-4dc1-8f0f-7e1c661db3b5.txt"), { + "code": 0, + "stdout": "Symbol.exe output", + "stderr": "" +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Tests/PublishSymbolsMockHelper.ts b/_generated/PublishSymbolsV2/Tests/PublishSymbolsMockHelper.ts new file mode 100644 index 000000000000..362a5ae63e89 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/PublishSymbolsMockHelper.ts @@ -0,0 +1,76 @@ +import { TaskLibAnswers, TaskLibAnswerExecResult } from 'azure-pipelines-task-lib/mock-answer'; +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import * as clientMock from 'azure-pipelines-tasks-packaging-common/Tests/ClientToolMockHelper'; + +export class ClientToolMockHelper { + private static ClientToolCmd: string = 'mock/location/symbol.exe'; + + public answers: TaskLibAnswers = { + checkPath: {}, + exec: {}, + exist: {}, + findMatch: { "pattern/to/files/*": ["c:\\temp\\file.pdb"] }, + rmRF: {}, + which: {} + }; + + constructor(private tmr: tmrm.TaskMockRunner) { + process.env['AGENT_HOMEDIRECTORY'] = "c:\\agent\\home\\directory"; + process.env['AGENT_TEMPDIRECTORY'] = "c:\\agent\\_temp"; + process.env['AGENT_VERSION'] = '2.120.0'; + process.env['ENDPOINT_AUTH_SYSTEMVSSCONNECTION'] = "{\"parameters\":{\"AccessToken\":\"token\"},\"scheme\":\"OAuth\"}"; + process.env['ENDPOINT_URL_SYSTEMVSSCONNECTION'] = "https://example.visualstudio.com/defaultcollection"; + process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "c:\\agent\\home\\directory"; + process.env['SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'] = "https://example.visualstudio.com/defaultcollection"; + process.env['SYSTEM_SERVERTYPE'] = "hosted"; + process.env['SYMBOL_PAT_AUTH_TOKEN'] = "token"; + process.env['ARTIFACTSERVICES_SYMBOL_ACCOUNTNAME'] = 'example'; + process.env['ARTIFACTSERVICES_SYMBOL_PAT'] = 'token'; + process.env['SYSTEM_TEAMPROJECT'] = 'testpublishsymbol'; + process.env['BUILD_DEFINITIONNAME'] = 'testpublishsymbolbuild'; + process.env['BUILD_BUILDNUMBER'] = '2021.11.30'; + process.env['BUILD_BUILDID'] = '1'; + process.env['BUILD_UNIQUEID'] = '8fd4c05c-e13b-4dc1-8f0f-7e1c661db3b5'; + + this.tmr.setAnswers(this.answers); + + clientMock.registerClientToolUtilitiesMock(tmr, ClientToolMockHelper.ClientToolCmd); + clientMock.registerClientToolRunnerMock(tmr); + this.registerOtherMock(tmr); + } + + public mockClientToolCommand(command: string, name: string, directory: string, expirationInDays: string, fileListFileName: string, result: TaskLibAnswerExecResult, service?: string) { + if (!service) { + service = "https://example.artifacts.visualstudio.com"; + } + this.answers.exec[`${ClientToolMockHelper.ClientToolCmd} ${command} --service ${service} --name ${name} --directory ${directory} --expirationInDays ${expirationInDays} --patAuthEnvVar SYMBOL_PAT_AUTH_TOKEN --fileListFileName ${fileListFileName} --tracelevel verbose --globalretrycount 2`] = result; + } + + private registerOtherMock(tmr: tmrm.TaskMockRunner) { + class MockStats { + isFile = () => { + return true; + }; + }; + const fsAnswers = { + writeFileSync: function (filePath, contents) { + }, + existsSync: function (filePath, contents) { + return true; + }, + readFileSync: function (filePath) { + return 'contents'; + }, + statSync: function (filePath) { + let s: MockStats = new MockStats(); + return s; + }, + chmodSync: function (filePath, string) { + }, + unlinkSync: function (filePath) { + } + }; + + tmr.registerMock('fs', fsAnswers); + } +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/Tests/Remove-SemaphoreFile_Safe.PerformsCleanup.ps1 b/_generated/PublishSymbolsV2/Tests/Remove-SemaphoreFile_Safe.PerformsCleanup.ps1 new file mode 100644 index 000000000000..8271694478e9 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Remove-SemaphoreFile_Safe.PerformsCleanup.ps1 @@ -0,0 +1,37 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\SemaphoreFunctions.ps1 +$variableSets = @( ) +try { + $variableSets += @{ + TempFile = [System.IO.Path]::GetTempFileName() + ExpectedWarning = '*CleanedUpSemaphoreFile0*' + } + $variableSets += @{ + TempFile = [System.IO.Path]::Combine($env:TMP, ([System.Guid]::NewGuid()), 'NoSuchFile.txt') + ExpectedWarning = '*CleanUpSemaphoreFile0Error1*' + } + foreach ($variableSet in $variableSets) { + Unregister-Mock Write-Warning + Register-Mock Write-Warning + + # Act. + Remove-SemaphoreFile_Safe -SemaphoreFile $variableSet.TempFile + + # Assert. + Assert-WasCalled Write-Warning -Times 2 + Assert-WasCalled Write-Warning -ArgumentsEvaluator { $args[0] -like '*SemaphoreFile0Minutes1AttemptingCleanup*' } + Assert-WasCalled Write-Warning -ArgumentsEvaluator { $args[0] -like $variableSet.ExpectedWarning } + Assert-IsNullOrEmpty (Get-Item -LiteralPath $variableSet.TempFile -ErrorAction Ignore) + } +} finally { + foreach ($variableSet in $variableSets) { + if (Test-Path -LiteralPath $variableSet.TempFile) { + Write-Verbose "Removing file: $($variableSet.TempFile)" + Remove-Item -LiteralPath $variableSet.TempFile + } + } +} diff --git a/_generated/PublishSymbolsV2/Tests/SetsFallbackMaxWaitTime.ps1 b/_generated/PublishSymbolsV2/Tests/SetsFallbackMaxWaitTime.ps1 new file mode 100644 index 000000000000..3947820488e8 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/SetsFallbackMaxWaitTime.ps1 @@ -0,0 +1,29 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +$now = Get-Date +Register-Mock Get-Date { $now } +Register-Mock Find-VstsMatch { 'Some PDB file 1', 'Some PDB file 2' } +Register-Mock Invoke-IndexSources +Register-Mock Invoke-PublishSymbols +Register-Mock Get-VstsTaskVariable +Register-Mock Get-VstsInput { 'FileShare' } -ParametersEvaluator { $Name -eq 'SymbolServerType' } +Register-Mock Get-VstsInput { $true } -ParametersEvaluator { $Name -eq 'IndexSources' } +Register-Mock Get-VstsInput { $true } -ParametersEvaluator { $Name -eq 'PublishSymbols' } +Register-Mock Get-VstsInput { '-1' } -- -Name 'SymbolsMaximumWaitTime' -Default '0' -AsInt +Register-Mock Get-VstsInput { 'Some input symbols path' } -- -Name 'SymbolsPath' +Register-Mock Get-VstsInput { 'Some input search pattern' } -ParametersEvaluator { $Name -eq 'SearchPattern' } +Register-Mock Get-VstsInput { 'Some input symbols product' } -ParametersEvaluator { $Name -eq 'SymbolsProduct' } +Register-Mock Get-VstsInput { 'Some input symbols version' } -ParametersEvaluator { $Name -eq 'SymbolsVersion' } +Register-Mock Get-VstsInput { 'Some input symbols folder' } -ParametersEvaluator { $Name -eq 'SymbolsFolder' } +Register-Mock Get-VstsInput { 'Some symbols artifact name' } -- -Name 'SymbolsArtifactName' +Register-Mock Get-VstsInput { $true } -ParametersEvaluator { $Name -eq 'TreatNotIndexedAsWarning' } +$env:PublishSymbols_Debug = $null + +# Act. +& $PSScriptRoot\..\PublishSymbols.ps1 + +# Assert. +Assert-WasCalled Invoke-PublishSymbols -ParametersEvaluator { $MaximumWaitTime -eq ([timespan]::FromHours(2)) } diff --git a/_generated/PublishSymbolsV2/Tests/SkipsIndexing.ps1 b/_generated/PublishSymbolsV2/Tests/SkipsIndexing.ps1 new file mode 100644 index 000000000000..3636282394df --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/SkipsIndexing.ps1 @@ -0,0 +1,42 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +$now = Get-Date +$env:Build_BuildUri = 'Some build URI' +$env:Build_BuildNumber = 'Some build number' +$env:Build_Repository_Name = 'Some build repository name' +$env:Build_Repository_Uri = 'Some build repository URI' +$env:System_TeamProject = 'Some team project' +$env:System_TeamFoundationCollectionUri = 'Some team foundation collection URI' +Register-Mock Get-Date { $now } +Register-Mock Get-VstsTaskVariable +Register-Mock Find-VstsMatch { 'Some PDB file 1', 'Some PDB file 2' } +Register-Mock Invoke-IndexSources +Register-Mock Invoke-PublishSymbols +foreach ($treatNotIndexedAsWarning in @($true, $false)) { + Unregister-Mock Get-VstsInput + Register-Mock Get-VstsInput { '123' } -- -Name 'SymbolsMaximumWaitTime' -Default '0' -AsInt + Register-Mock Get-VstsInput { 'FileShare' } -ParametersEvaluator { $Name -eq 'SymbolServerType' } + Register-Mock Get-VstsInput { 'Some input symbols path' } -- -Name 'SymbolsPath' + Register-Mock Get-VstsInput { 'Some input search pattern' } -ParametersEvaluator { $Name -eq 'SearchPattern' } + Register-Mock Get-VstsInput { 'Some input symbols product' } -ParametersEvaluator { $Name -eq 'SymbolsProduct' } + Register-Mock Get-VstsInput { 'Some input symbols version' } -ParametersEvaluator { $Name -eq 'SymbolsVersion' } + Register-Mock Get-VstsInput { 'Some input symbols folder' } -ParametersEvaluator { $Name -eq 'SymbolsFolder' } + Register-Mock Get-VstsInput { 'Some symbols artifact name' } -- -Name 'SymbolsArtifactName' + Register-Mock Get-VstsInput { $treatNotIndexedAsWarning } -ParametersEvaluator { $Name -eq 'TreatNotIndexedAsWarning' } + Register-Mock Get-VstsInput { $false } -- -Name 'IndexSources' -AsBool + Register-Mock Get-VstsInput { $false } -- -Name 'CompressSymbols' -AsBool + Register-Mock Get-VstsInput { $true } -ParametersEvaluator { $Name -eq 'PublishSymbols' } + $env:PublishSymbols_Debug = $null + + # Act. + & $PSScriptRoot\..\PublishSymbols.ps1 + + # Assert. + Assert-WasCalled Find-VstsMatch -- -DefaultRoot 'Some input symbols folder' -Pattern 'Some input search pattern' + Assert-WasCalled Invoke-IndexSources -Times 0 + $semaphoreMessage = "Machine: $env:ComputerName, BuildUri: Some build URI, BuildNumber: Some build number, RepositoryName: Some build repository name, RepositoryUri: Some build repository URI, Team Project: Some team project, CollectionUri: Some team foundation collection URI at $($now.ToUniversalTime()) UTC" + Assert-WasCalled Invoke-PublishSymbols -- -PdbFiles ('Some PDB file 1', 'Some PDB file 2') -Share 'Some input symbols path' -Product 'Some input symbols product' -Version 'Some input symbols version' -MaximumWaitTime ([timespan]::FromMinutes(123)) -ArtifactName 'Some symbols artifact name' -SemaphoreMessage $semaphoreMessage -CompressSymbols:$false +} diff --git a/_generated/PublishSymbolsV2/Tests/SkipsPublishing.ps1 b/_generated/PublishSymbolsV2/Tests/SkipsPublishing.ps1 new file mode 100644 index 000000000000..db1f3c295cf5 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/SkipsPublishing.ps1 @@ -0,0 +1,39 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +$now = Get-Date +$env:Build_BuildUri = 'Some build URI' +$env:Build_BuildNumber = 'Some build number' +$env:Build_Repository_Name = 'Some build repository name' +$env:Build_Repository_Uri = 'Some build repository URI' +$env:System_TeamProject = 'Some team project' +$env:System_TeamFoundationCollectionUri = 'Some team foundation collection URI' +Register-Mock Get-Date { $now } +Register-Mock Get-VstsTaskVariable +Register-Mock Find-VstsMatch { 'file-1.pdb', 'file-2.pdb', 'file-3.dll' } +Register-Mock Invoke-IndexSources +Register-Mock Invoke-PublishSymbols +foreach ($treatNotIndexedAsWarning in @($true, $false)) { + Unregister-Mock Get-VstsInput + Register-Mock Get-VstsInput { '123' } -- -Name 'SymbolsMaximumWaitTime' -Default '0' -AsInt + Register-Mock Get-VstsInput { '' } -- -Name 'SymbolsPath' # Empty to skip publishing. + Register-Mock Get-VstsInput { 'FileShare' } -ParametersEvaluator { $Name -eq 'SymbolServerType' } + Register-Mock Get-VstsInput { $true } -ParametersEvaluator { $Name -eq 'IndexSources' } + Register-Mock Get-VstsInput { 'Some input search pattern' } -ParametersEvaluator { $Name -eq 'SearchPattern' } + Register-Mock Get-VstsInput { 'Some input symbols product' } -ParametersEvaluator { $Name -eq 'SymbolsProduct' } + Register-Mock Get-VstsInput { 'Some input symbols version' } -ParametersEvaluator { $Name -eq 'SymbolsVersion' } + Register-Mock Get-VstsInput { 'Some input symbols folder' } -ParametersEvaluator { $Name -eq 'SymbolsFolder' } + Register-Mock Get-VstsInput { 'Some symbols artifact name' } -- -Name 'SymbolsArtifactName' + Register-Mock Get-VstsInput { $treatNotIndexedAsWarning } -ParametersEvaluator { $Name -eq 'TreatNotIndexedAsWarning' } + $env:PublishSymbols_Debug = $null + + # Act. + & $PSScriptRoot\..\PublishSymbols.ps1 + + # Assert. + Assert-WasCalled Find-VstsMatch -- -DefaultRoot 'Some input symbols folder' -Pattern 'Some input search pattern' + Assert-WasCalled Invoke-IndexSources -- -SymbolsFilePaths ('file-1.pdb', 'file-2.pdb') -TreatNotIndexedAsWarning: $treatNotIndexedAsWarning + Assert-WasCalled Invoke-PublishSymbols -Times 0 +} diff --git a/_generated/PublishSymbolsV2/Tests/Test-SemaphoreMaximumAge.IsCorrect.ps1 b/_generated/PublishSymbolsV2/Tests/Test-SemaphoreMaximumAge.IsCorrect.ps1 new file mode 100644 index 000000000000..7140b73988b4 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Test-SemaphoreMaximumAge.IsCorrect.ps1 @@ -0,0 +1,33 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\SemaphoreFunctions.ps1 +$variableSets = @( ) +try { + $variableSets += @{ + TempFile = [System.IO.Path]::GetTempFileName() + CreationTime = [datetime]::Now.AddHours(-25) + Expected = $true + } + $variableSets += @{ + TempFile = [System.IO.Path]::GetTempFileName() + CreationTime = [datetime]::Now.AddHours(-23) + Expected = $false + } + foreach ($variableSet in $variableSets) { + [System.IO.File]::SetCreationTime($variableSet.TempFile, $variableSet.CreationTime) + + # Act. + $actual = Test-SemaphoreMaximumAge -SemaphoreFile $variableSet.TempFile + + # Assert. + Assert-AreEqual $variableSet.Expected $actual + } +} finally { + foreach ($variableSet in $variableSets) { + Write-Verbose "Removing file: $($variableSet.TempFile)" + Remove-Item -LiteralPath $variableSet.TempFile + } +} diff --git a/_generated/PublishSymbolsV2/Tests/Unlock-Semaphore.PerformsCleanup.ps1 b/_generated/PublishSymbolsV2/Tests/Unlock-Semaphore.PerformsCleanup.ps1 new file mode 100644 index 000000000000..d0169560a128 --- /dev/null +++ b/_generated/PublishSymbolsV2/Tests/Unlock-Semaphore.PerformsCleanup.ps1 @@ -0,0 +1,26 @@ +[CmdletBinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\PublishHelpers\SemaphoreFunctions.ps1 +$script:disposeWasCalled = $false +Write-Verbose ($tempFile = [System.IO.Path]::GetTempFileName()) +try { + $semaphore = @{ + Stream = New-Object psobject + Path = $tempFile + } + Add-Member -InputObject $semaphore.Stream -Name Dispose -MemberType ScriptMethod -Value { $script:disposeWasCalled = $true } + + # Act. + Unlock-Semaphore -Semaphore $semaphore + + # Assert. + Assert-AreEqual $true $script:disposeWasCalled + Assert-IsNullOrEmpty (Get-Item -LiteralPath $tempFile -ErrorAction Ignore) +} finally { + if (Test-Path -LiteralPath $tempFile) { + Remove-Item -LiteralPath $tempFile + } +} diff --git a/_generated/PublishSymbolsV2/clienttoolmain.ts b/_generated/PublishSymbolsV2/clienttoolmain.ts new file mode 100644 index 000000000000..6a5ad5cced49 --- /dev/null +++ b/_generated/PublishSymbolsV2/clienttoolmain.ts @@ -0,0 +1,47 @@ +import * as path from "path"; +import * as telemetry from "azure-pipelines-tasks-utility-common/telemetry"; +import * as tl from "azure-pipelines-task-lib"; +import * as publishSymbols from "./PublishSymbols"; + +tl.setResourcePath(path.join(__dirname, "task.json")); +const clientToolFilePath = tl.getTaskVariable('SYMBOLTOOL_FILE_PATH'); + +async function main(): Promise { + try { + const indexSymbolsSet = tl.getBoolInput("IndexSources", false); + if (indexSymbolsSet) { + console.log(tl.loc("IndexingNotSupported")); + } + + const needsToPublishSymbols = tl.getBoolInput("PublishSymbols", true); + + if (needsToPublishSymbols) { + publishSymbols.run(clientToolFilePath); + } + else { + tl.setResult(tl.TaskResult.Succeeded, tl.loc("PublishOptionNotSet")); + } + } + catch (error) { + tl.setResult(tl.TaskResult.Failed, tl.loc("FailedToRunClientTool", error.message)); + return; + } finally { + logTelemetry(clientToolFilePath); + } +} + +function logTelemetry(params: any) { + try { + let clientToolTelemetry = { + "command": "publish", + "clientToolPath": clientToolFilePath, + "System.TeamFoundationCollectionUri": tl.getVariable("System.TeamFoundationCollectionUri"), + "verbose": tl.getBoolInput("DetailedLog"), + }; + telemetry.emitTelemetry("Symbol", "PublishSymbolsV2", clientToolTelemetry); + } catch (err) { + tl.debug(`Unable to log PublishSymbolsV2 task telemetry.Err: (${err} )`); + } +} + +main(); \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/icon.png b/_generated/PublishSymbolsV2/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ed6e93c12e51434a7f863d7c78e733699bf2c319 GIT binary patch literal 666 zcmV;L0%iS)P)3|1{0i28W_K20TPUm>rf%K1wkczO?t@-@VLhvcfWV{|nFH;1`!6Q|JXFR&8WSg} zj)7~1E2^kz8n)Z*MIA|!psH#qg{V6D?-{7dfz^vZcy=Gxg7=k1K$0YAng&hNVkcHb zAnXzm?RLAnA)L)-B#I)5qDZsZEbd;N+dE&5TVWV}<~Xhwm(qBN1%N1u&}cMpPs+|x z^c1HfW}p=W!B?K=Um1ph&1M7FbpZg3F(`@xS(b4)9MEhwZ{{WLQ&lx#qDDjr!*IuO zTu;|^n5LQf(ZOJV>2#VKi7R1!ssre99M>}pBhxqln5GHCFzz-UM;lG0XP}hrAL0t09yTHqw_8vpOV literal 0 HcmV?d00001 diff --git a/_generated/PublishSymbolsV2/icon.svg b/_generated/PublishSymbolsV2/icon.svg new file mode 100644 index 000000000000..1348bf9d2fe0 --- /dev/null +++ b/_generated/PublishSymbolsV2/icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/_generated/PublishSymbolsV2/make.json b/_generated/PublishSymbolsV2/make.json new file mode 100644 index 000000000000..31e000f348fb --- /dev/null +++ b/_generated/PublishSymbolsV2/make.json @@ -0,0 +1,108 @@ +{ + "common": [ + { + "module": "../Common/PowershellHelpers", + "type": "ps" + }, + { + "module": "../Common/TlsHelper_", + "type": "ps" + } + ], + "externals": { + "nugetv2": [ + { + "name": "Microsoft.TeamFoundationServer.Client", + "version": "15.101.0-preview", + "repository": "https://www.nuget.org/api/v2/", + "cp": [ + { + "source": "lib/net45/Microsoft.TeamFoundation.Core.WebApi.dll" + }, + { + "source": "lib/net45//Microsoft.TeamFoundation.Core.WebApi.resources.dll", + "dest": "/" + } + ] + }, + { + "name": "Microsoft.TeamFoundationServer.ExtendedClient", + "version": "15.101.1-preview", + "repository": "https://www.nuget.org/api/v2/", + "cp": [ + { + "source": [ + "lib/net45/Microsoft.TeamFoundation.Client.dll", + "lib/net45/Microsoft.TeamFoundation.VersionControl.Client.dll", + "lib/net45/Microsoft.TeamFoundation.VersionControl.Common.dll" + ] + }, + { + "source": [ + "lib/net45//Microsoft.TeamFoundation.Client.resources.dll", + "lib/net45//Microsoft.TeamFoundation.VersionControl.Common.resources.dll" + ], + "dest": "/" + } + ] + }, + { + "name": "Microsoft.VisualStudio.Services.Client", + "version": "15.101.0-preview", + "repository": "https://www.nuget.org/api/v2/", + "cp": [ + { + "source": [ + "lib/net45/Microsoft.TeamFoundation.Common.dll", + "lib/net45/Microsoft.VisualStudio.Services.Common.dll", + "lib/net45/Microsoft.VisualStudio.Services.WebApi.dll" + ] + }, + { + "source": [ + "lib/net45//Microsoft.TeamFoundation.Common.resources.dll", + "lib/net45//Microsoft.VisualStudio.Services.Common.resources.dll", + "lib/net45//Microsoft.VisualStudio.Services.WebApi.resources.dll" + ], + "dest": "/" + } + ] + }, + { + "name": "VstsTaskSdk", + "version": "0.9.0", + "repository": "https://www.powershellgallery.com/api/v2/", + "cp": [ + { + "source": [ + "*.ps1", + "*.psd1", + "*.psm1", + "*.dll", + "lib.json", + "Strings" + ], + "dest": "ps_modules/VstsTaskSdk/", + "options": "-R" + } + ] + } + ], + "archivePackages": [ + { + "archiveName": "symbol.zip", + "url": "https://vstsagenttools.blob.core.windows.net/tools/symstore/2/symbol.zip", + "dest": "./" + } + ] + }, + "cp": [ + { + "source": [ + "IndexHelpers", + "PublishHelpers" + ], + "options": "-R" + } + ] +} diff --git a/_generated/PublishSymbolsV2/package-lock.json b/_generated/PublishSymbolsV2/package-lock.json new file mode 100644 index 000000000000..29d673d0cef7 --- /dev/null +++ b/_generated/PublishSymbolsV2/package-lock.json @@ -0,0 +1,1277 @@ +{ + "name": "publishsymbolsv2", + "version": "2.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/ini": { + "version": "1.3.30", + "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.30.tgz", + "integrity": "sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ==" + }, + "@types/ltx": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@types/ltx/-/ltx-2.8.0.tgz", + "integrity": "sha512-qHnPVD0FFquypl7Yy8qqvDjhnX3c7toUYjjALK+bug7MfR2WCRTIjw+GUMfehRi/Mbhj5rLAQerPTnTCUzSCWg==", + "requires": { + "@types/node": "*" + } + }, + "@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" + }, + "@types/node": { + "version": "16.18.57", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.57.tgz", + "integrity": "sha512-piPoDozdPaX1hNWFJQzzgWqE40gh986VvVx/QO9RU4qYRE55ld7iepDVgZ3ccGUw0R4wge0Oy1dd+3xOQNkkUQ==" + }, + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" + }, + "@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" + }, + "@types/uuid": { + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.11.tgz", + "integrity": "sha512-CJNkbEu4IdVuBMRVaNC2GjASgJK7ziqDlVXWuJ1pvhOLADl7nzxhTKjHRdOmo2SuXuygcWBmzgYgn9foTX0UiA==" + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + } + } + }, + "azure-devops-node-api": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-10.2.2.tgz", + "integrity": "sha512-4TVv2X7oNStT0vLaEfExmy3J4/CzfuXolEcQl/BRUmvGySqKStTG2O55/hUQ0kM7UJlZBLgniM0SBq4d/WkKow==", + "requires": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "azure-pipelines-task-lib": { + "version": "5.0.1-preview.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-5.0.1-preview.0.tgz", + "integrity": "sha512-/1R7HbRfY3ntupW3UWeU/Xoi95by8JjoHDOFL7AdwuiitIg2cKX/Hi1nbY1xNOwp+vZyMLrVo73IMYeE4pMdEw==", + "requires": { + "adm-zip": "^0.5.10", + "minimatch": "3.0.5", + "nodejs-file-downloader": "^4.11.1", + "q": "^1.5.1", + "semver": "^5.1.0", + "shelljs": "^0.8.5", + "uuid": "^3.0.1" + }, + "dependencies": { + "adm-zip": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", + "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==" + } + } + }, + "azure-pipelines-tasks-packaging-common": { + "version": "3.236.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-packaging-common/-/azure-pipelines-tasks-packaging-common-3.236.0.tgz", + "integrity": "sha512-ndG/0JZ5vkAmNC+sEqgYoxB2/4EQQ7I0g9QDGBBwa0kRzxf28vEUf6FijsSUUM6RsVoVnNVqQKwnSwCE+0Krng==", + "requires": { + "@types/ini": "1.3.30", + "@types/ltx": "2.8.0", + "@types/mocha": "^5.2.6", + "@types/node": "^16.11.39", + "@types/q": "1.5.2", + "adm-zip": "^0.4.11", + "azure-devops-node-api": "10.2.2", + "azure-pipelines-task-lib": "^4.9.0", + "azure-pipelines-tool-lib": "^2.0.7", + "ini": "^1.3.8", + "ip-address": "^5.8.9", + "ltx": "^2.6.2", + "mocha": "^8.4.0", + "q": "^1.5.0", + "semver": "^5.5.0", + "typed-rest-client": "1.8.4" + }, + "dependencies": { + "azure-pipelines-task-lib": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.10.0.tgz", + "integrity": "sha512-/j5nwVEPYx/WV/5H66BuMK3ubrKYFgbFc0yPmEwfXvDwNbgXeIHtcXXZGHiCVq2q+JmHcFYav9sfOrCq2O2Bdg==", + "requires": { + "adm-zip": "^0.5.10", + "deasync": "^0.1.28", + "minimatch": "3.0.5", + "nodejs-file-downloader": "^4.11.1", + "q": "^1.5.1", + "semver": "^5.1.0", + "shelljs": "^0.8.5", + "uuid": "^3.0.1" + }, + "dependencies": { + "adm-zip": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.11.tgz", + "integrity": "sha512-bSG/kcTQRVyCZ3aOWt3nu/KGIxkfSNi7MXzgKr/MHfKbqPakFESQvaujpUaAG8OQuSroxYMY5vLMpdE6+oND2Q==" + } + } + }, + "azure-pipelines-tool-lib": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.7.tgz", + "integrity": "sha512-1FN67ypNwNhgZllYSm4/pAQdffSfEZJhwW8YeNvm/cKDTS6t6bukTBIkt04c1CsaQe7Ot+eDOVMn41wX1ketXw==", + "requires": { + "@types/semver": "^5.3.0", + "@types/uuid": "^3.4.5", + "azure-pipelines-task-lib": "^4.1.0", + "semver": "^5.7.0", + "semver-compare": "^1.0.0", + "typed-rest-client": "^1.8.6", + "uuid": "^3.3.2" + }, + "dependencies": { + "typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "requires": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + } + } + } + } + }, + "azure-pipelines-tasks-utility-common": { + "version": "3.225.1", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.225.1.tgz", + "integrity": "sha512-4wtVKuvx2PcQI0W8xkMdS/S+tf9Qu7wMJl4HSTLE1gjQ2x9o/6QbhMogz6O1+8ofxvTqmI4scA7GHKccDAwQpQ==", + "requires": { + "@types/node": "^16.11.39", + "azure-pipelines-task-lib": "^4.4.0", + "azure-pipelines-tool-lib": "^2.0.0-preview", + "js-yaml": "3.13.1", + "semver": "^5.4.1" + }, + "dependencies": { + "adm-zip": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", + "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==" + }, + "azure-pipelines-task-lib": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.7.0.tgz", + "integrity": "sha512-5MctDC1Bt7eFi9tQTXlikuWRDc2MenCNruMsEwcKuXqBj1ZY+fA/D+E1DbE0Qi2u8kl1p6szT0we8k6RHSOe/w==", + "requires": { + "adm-zip": "^0.5.10", + "deasync": "^0.1.28", + "minimatch": "3.0.5", + "nodejs-file-downloader": "^4.11.1", + "q": "^1.5.1", + "semver": "^5.1.0", + "shelljs": "^0.8.5", + "uuid": "^3.0.1" + } + } + } + }, + "azure-pipelines-tool-lib": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.4.tgz", + "integrity": "sha512-LgAelZKJe3k/t3NsKSKzjeRviphns0w0p5tgwz8uHN70I9m2TToiOKl+fogrdXcM6+jiLBk5KTqrcRBqPpv/XA==", + "requires": { + "@types/semver": "^5.3.0", + "@types/uuid": "^3.4.5", + "azure-pipelines-task-lib": "^4.1.0", + "semver": "^5.7.0", + "semver-compare": "^1.0.0", + "typed-rest-client": "^1.8.6", + "uuid": "^3.3.2" + }, + "dependencies": { + "adm-zip": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", + "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==" + }, + "azure-pipelines-task-lib": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.7.0.tgz", + "integrity": "sha512-5MctDC1Bt7eFi9tQTXlikuWRDc2MenCNruMsEwcKuXqBj1ZY+fA/D+E1DbE0Qi2u8kl1p6szT0we8k6RHSOe/w==", + "requires": { + "adm-zip": "^0.5.10", + "deasync": "^0.1.28", + "minimatch": "3.0.5", + "nodejs-file-downloader": "^4.11.1", + "q": "^1.5.1", + "semver": "^5.1.0", + "shelljs": "^0.8.5", + "uuid": "^3.0.1" + } + }, + "typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "requires": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + } + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "deasync": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.29.tgz", + "integrity": "sha512-EBtfUhVX23CE9GR6m+F8WPeImEE4hR/FW9RkK0PMl9V1t283s0elqsTD8EZjaKX28SY1BW2rYfCgNsAYdpamUw==", + "requires": { + "bindings": "^1.5.0", + "node-addon-api": "^1.7.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, + "follow-redirects": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + }, + "has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "requires": { + "function-bind": "^1.1.2" + }, + "dependencies": { + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + } + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "ip-address": { + "version": "5.9.4", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-5.9.4.tgz", + "integrity": "sha512-dHkI3/YNJq4b/qQaz+c8LuarD3pY24JqZWfjB8aZx1gtpc2MDILu9L9jpZe1sHpzo/yWFweQVn+U//FhazUxmw==", + "requires": { + "jsbn": "1.1.0", + "lodash": "^4.17.15", + "sprintf-js": "1.1.2" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "requires": { + "hasown": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "requires": { + "chalk": "^4.0.0" + } + }, + "ltx": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/ltx/-/ltx-2.10.0.tgz", + "integrity": "sha512-RB4zR6Mrp/0wTNS9WxMvpgfht/7u/8QAC9DpPD19opL/4OASPa28uoliFqeDkLUU8pQ4aeAfATBZmz1aSAHkMw==", + "requires": { + "inherits": "^2.0.4" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mocha": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" + }, + "node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" + }, + "nodejs-file-downloader": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", + "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", + "requires": { + "follow-redirects": "^1.15.1", + "https-proxy-agent": "^5.0.0", + "mime-types": "^2.1.27", + "sanitize-filename": "^1.6.3" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + }, + "qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "requires": { + "resolve": "^1.1.6" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "requires": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "requires": { + "utf8-byte-length": "^1.0.1" + } + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" + }, + "typed-rest-client": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", + "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==", + "requires": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "typescript": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", + "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", + "dev": true + }, + "underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, + "utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + } + } +} diff --git a/_generated/PublishSymbolsV2/package.json b/_generated/PublishSymbolsV2/package.json new file mode 100644 index 000000000000..f21c61c782d7 --- /dev/null +++ b/_generated/PublishSymbolsV2/package.json @@ -0,0 +1,28 @@ +{ + "name": "publishsymbolsv2", + "version": "2.0.0", + "description": "Index sources and publish symbols.", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/azure-pipelines-tasks.git" + }, + "category": "Tool", + "author": "Microsoft Corporation", + "license": "MIT", + "bugs": { + "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues" + }, + "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme", + "dependencies": { + "@types/node": "^16.11.39", + "azure-pipelines-task-lib": "^5.0.1-preview.0", + "azure-pipelines-tasks-packaging-common": "^3.236.0", + "azure-pipelines-tasks-utility-common": "^3.225.0" + }, + "devDependencies": { + "typescript": "4.0.2" + } +} diff --git a/_generated/PublishSymbolsV2/task.json b/_generated/PublishSymbolsV2/task.json new file mode 100644 index 000000000000..a9ffb8568e84 --- /dev/null +++ b/_generated/PublishSymbolsV2/task.json @@ -0,0 +1,246 @@ +{ + "id": "0675668A-7BBA-4CCB-901D-5AD6554CA653", + "name": "PublishSymbols", + "friendlyName": "Index sources and publish symbols", + "description": "Index your source code and publish symbols to a file share or Azure Artifacts symbol server", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/index-sources-publish-symbols", + "helpMarkDown": "See [more information](https://go.microsoft.com/fwlink/?LinkID=613722) on how to use this task.", + "category": "Build", + "visibility": [ + "Build" + ], + "author": "Microsoft Corporation", + "preview": false, + "version": { + "Major": 2, + "Minor": 237, + "Patch": 0 + }, + "minimumAgentVersion": "2.144.0", + "groups": [ + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": true + } + ], + "inputs": [ + { + "name": "SymbolsFolder", + "type": "string", + "label": "Path to symbols folder", + "defaultValue": "$(Build.SourcesDirectory)", + "required": false, + "helpMarkDown": "The path to the folder that is searched for symbol files. The default is $(Build.SourcesDirectory). Otherwise specify a rooted path, for example: $(Build.BinariesDirectory)/MyProject" + }, + { + "name": "SearchPattern", + "type": "multiLine", + "label": "Search pattern", + "defaultValue": "**/bin/**/*.pdb", + "required": true, + "helpMarkDown": "The pattern used to discover the pdb files to publish." + }, + { + "name": "IndexSources", + "type": "boolean", + "label": "Index sources", + "defaultValue": "true", + "required": false, + "helpMarkDown": "Indicates whether to inject source server information into the PDB files. This option is only supported on Windows agents." + }, + { + "name": "PublishSymbols", + "type": "boolean", + "label": "Publish symbols", + "defaultValue": "true", + "required": false, + "helpMarkDown": "Indicates whether to publish the symbol files." + }, + { + "name": "SymbolServerType", + "type": "pickList", + "label": "Symbol server type", + "required": true, + "defaultValue": " ", + "helpMarkDown": "Choose where to publish symbols. Symbols published to the Azure Artifacts symbol server are accessible by any user with access to the organization/collection. Azure DevOps Server only supports the \"File share\" option. Follow [these instructions](https://go.microsoft.com/fwlink/?linkid=846265) to use Symbol Server in Azure Artifacts.", + "options": { + " ": "Select one", + "TeamServices": "Symbol Server in this organization/collection (requires Azure Artifacts)", + "FileShare": "File share" + }, + "visibleRule": "PublishSymbols = true" + }, + { + "name": "SymbolsPath", + "type": "string", + "label": "Path to publish symbols", + "defaultValue": "", + "required": false, + "helpMarkDown": "The file share that hosts your symbols. This value will be used in the call to `symstore.exe add` as the `/s` parameter.", + "visibleRule": "PublishSymbols = true && SymbolServerType = FileShare" + }, + { + "name": "CompressSymbols", + "type": "boolean", + "label": "Compress symbols", + "defaultValue": "false", + "required": true, + "helpMarkDown": "Compress symbols when publishing to file share.", + "visibleRule": "SymbolServerType = FileShare" + }, + { + "name": "SymbolExpirationInDays", + "type": "string", + "label": "Symbol Expiration (in days)", + "defaultValue": "36530", + "required": false, + "helpMarkDown": "The number of days that symbols should be retained.", + "visibleRule": "PublishSymbols = true && SymbolServerType = TeamServices" + }, + { + "name": "IndexableFileFormats", + "type": "pickList", + "label": "Symbol file formats to publish", + "defaultValue": "Default", + "helpMarkDown": "Which debug formats to publish to the symbol server", + "options": { + "Default": "The Default set of symbols to upload", + "Pdb": "Only Pdb based symbols Windows pdb's and managed Portable pdb's.", + "SourceMap": "Only JavaScript based SourceMap symbols (*.js.map)", + "All": "All supported symbol formats" + }, + "groupName": "advanced", + "visibleRule": "PublishSymbols = true && SymbolServerType = TeamServices" + }, + { + "name": "DetailedLog", + "type": "boolean", + "label": "Verbose logging", + "defaultValue": "true", + "required": false, + "helpMarkDown": "Use verbose logging.", + "groupName": "advanced" + }, + { + "name": "TreatNotIndexedAsWarning", + "type": "boolean", + "label": "Warn if not indexed", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Indicates whether to warn if sources are not indexed for a PDB file. Otherwise the messages are logged as normal output.", + "groupName": "advanced" + }, + { + "name": "UseNetCoreClientTool", + "type": "boolean", + "label": "Use NetCore client tool", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Indicates whether to use version of the symbol upload tool that supports DWARF and ELF files. This option only matters on Windows agents. On non-Windows agents, the version of the symbol upload tool that supports DWARF and ELF files will always be used.", + "groupName": "advanced" + }, + { + "name": "SymbolsMaximumWaitTime", + "type": "string", + "label": "Max wait time (min)", + "defaultValue": "", + "required": false, + "helpMarkDown": "The number of minutes to wait before failing this task.", + "groupName": "advanced" + }, + { + "name": "SymbolsProduct", + "type": "string", + "label": "Product", + "defaultValue": "", + "required": false, + "helpMarkDown": "Specify the product parameter to symstore.exe. The default is $(Build.DefinitionName)", + "groupName": "advanced" + }, + { + "name": "SymbolsVersion", + "type": "string", + "label": "Version", + "defaultValue": "", + "required": false, + "helpMarkDown": "Specify the version parameter to symstore.exe. The default is $(Build.BuildNumber)", + "groupName": "advanced" + }, + { + "name": "SymbolsArtifactName", + "type": "string", + "label": "Artifact name", + "defaultValue": "Symbols_$(BuildConfiguration)", + "required": false, + "helpMarkDown": "Specify the artifact name to use for the Symbols artifact. The default is Symbols_$(BuildConfiguration)", + "groupName": "advanced" + } + ], + "instanceNameFormat": "Publish symbols path", + "prejobexecution": { + "Node10": { + "target": "PreJobExecutionPublishSymbols.js" + }, + "Node16": { + "target": "PreJobExecutionPublishSymbols.js", + "argumentFormat": "" + } + }, + "execution": { + "PowerShell3": { + "target": "PublishSymbols.ps1", + "platforms": [ + "windows" + ] + }, + "Node10": { + "target": "clienttoolmain.js" + }, + "Node16": { + "target": "clienttoolmain.js", + "argumentFormat": "" + } + }, + "messages": { + "CleanedUpSemaphoreFile0": "Successfully cleaned up semaphore file '{0}'.", + "CleanUpSemaphoreFile0Error1": "Could not clean up existing semaphore file '{0}'. {1}", + "Error0AccessingSemaphoreFile1Retrying2Seconds": "Error '{0}' accessing semaphore file '{1}'. Retrying in {2:N0} seconds.", + "Error_UnexpectedErrorSymbolsPublishing": "An unexpected error occurred while trying to publish symbols. Exit code(%s) and error(%s)", + "Error_CommandNotRecognized": "The command %s was not recognized.", + "Error_SymbolPublishingToolNotFound": "Symbol publishing tool not found at %s.", + "FailedToLoadDbghelpDllFrom0ErrorCode1": "Failed to load dbghelp.dll from '{0}' with error code '{1}'.", + "FailedToPublishSymbols": "Failed to publish symbols. %s", + "FailedToRunClientTool": "Failed to run client tool. %s", + "Found0Files": "Found {0:N0} files.", + "FoundNFiles": "Found %s files.", + "FreeLibraryDbghelpDllError0": "Failed to free library dbghelp.dll. Error code '{0}'.", + "IndexingNotSupported": "Source indexing is not supported on this OS.", + "Info_RetrievingClientToolUri": "Retrieving client tool from: %s", + "Info_ClientTool": "ClientTool clientToolFilePath: %s", + "NoFilesForIndexing": "No files selected for indexing.", + "NoFilesForPublishing": "No files selected for publishing.", + "NoSourcePathsIn0": "Unable to index sources for symbols file '{0}'. The file does not contain any source path information.", + "OneOrMoreSourceFilesNotIndexedFor0": "Unable to index one or more source files for symbols file '{0}'.", + "PreJobFailedToExecute": "PreJob Failed To Execute.", + "PublishOptionNotSet": "The Publish Symbols option was not set so ignoring publishing.", + "ReachedPublishingMaxWaitTime0Seconds": "Symbol publishing could not be completed. Reached maximum wait time {0:N0} seconds.", + "SemaphoreFile0ExistsRetrying1Seconds": "Semaphore file '{0}' already exists. Retrying symbol publishing in {1:N0} seconds.", + "SemaphoreFile0Minutes1AttemptingCleanup": "Semaphore file '{0}' already exists. File was last accessed over '{1:N0}' minutes ago. Attempting to clean up the file.", + "SkippingIndexing": "Skipping indexing.", + "SourceFolderDeprecated0": "The source folder parameter has been deprecated. Ignoring the value '{0}'.", + "SourceInfoNotRetrievedFrom0Message1": "Indexed source information could not be retrieved from '{0}'. {1}", + "SpacesInTemp": "Source files may not be indexed properly. Temp folder contains spaces.", + "SymbolsPublishedSuccessfully": "Symbols published successfully. %s", + "SymbolStoreLastIdTxtNotFoundAt0": "Symbol store lastid.txt not found at '{0}'.", + "UnableToDetermineWorkspaceFromSourceFolder0": "Unable to determine the workspace from the source folder '{0}'.", + "UnableToIndexSources": "Unable to index sources.", + "UnexpectedDbghelpdllExpected0Actual1": "Library dbghelp.dll is already loaded from an unexpected path. Expected '{0}'. Actual '{0}'.", + "UnsupportedSourceProvider0": "Unsupported source provider '{0}' for source indexing.", + "Win32Error0FromMethod1": "Encountered Win32 error '{0}' from method '{1}'." + }, + "_buildConfigMapping": { + "Default": "2.237.0", + "Node20_229_14": "2.237.1" + } +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/task.loc.json b/_generated/PublishSymbolsV2/task.loc.json new file mode 100644 index 000000000000..b35bf92754e9 --- /dev/null +++ b/_generated/PublishSymbolsV2/task.loc.json @@ -0,0 +1,246 @@ +{ + "id": "0675668A-7BBA-4CCB-901D-5AD6554CA653", + "name": "PublishSymbols", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/index-sources-publish-symbols", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Build", + "visibility": [ + "Build" + ], + "author": "Microsoft Corporation", + "preview": false, + "version": { + "Major": 2, + "Minor": 237, + "Patch": 0 + }, + "minimumAgentVersion": "2.144.0", + "groups": [ + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": true + } + ], + "inputs": [ + { + "name": "SymbolsFolder", + "type": "string", + "label": "ms-resource:loc.input.label.SymbolsFolder", + "defaultValue": "$(Build.SourcesDirectory)", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.SymbolsFolder" + }, + { + "name": "SearchPattern", + "type": "multiLine", + "label": "ms-resource:loc.input.label.SearchPattern", + "defaultValue": "**/bin/**/*.pdb", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.SearchPattern" + }, + { + "name": "IndexSources", + "type": "boolean", + "label": "ms-resource:loc.input.label.IndexSources", + "defaultValue": "true", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.IndexSources" + }, + { + "name": "PublishSymbols", + "type": "boolean", + "label": "ms-resource:loc.input.label.PublishSymbols", + "defaultValue": "true", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.PublishSymbols" + }, + { + "name": "SymbolServerType", + "type": "pickList", + "label": "ms-resource:loc.input.label.SymbolServerType", + "required": true, + "defaultValue": " ", + "helpMarkDown": "ms-resource:loc.input.help.SymbolServerType", + "options": { + " ": "Select one", + "TeamServices": "Symbol Server in this organization/collection (requires Azure Artifacts)", + "FileShare": "File share" + }, + "visibleRule": "PublishSymbols = true" + }, + { + "name": "SymbolsPath", + "type": "string", + "label": "ms-resource:loc.input.label.SymbolsPath", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.SymbolsPath", + "visibleRule": "PublishSymbols = true && SymbolServerType = FileShare" + }, + { + "name": "CompressSymbols", + "type": "boolean", + "label": "ms-resource:loc.input.label.CompressSymbols", + "defaultValue": "false", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.CompressSymbols", + "visibleRule": "SymbolServerType = FileShare" + }, + { + "name": "SymbolExpirationInDays", + "type": "string", + "label": "ms-resource:loc.input.label.SymbolExpirationInDays", + "defaultValue": "36530", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.SymbolExpirationInDays", + "visibleRule": "PublishSymbols = true && SymbolServerType = TeamServices" + }, + { + "name": "IndexableFileFormats", + "type": "pickList", + "label": "ms-resource:loc.input.label.IndexableFileFormats", + "defaultValue": "Default", + "helpMarkDown": "ms-resource:loc.input.help.IndexableFileFormats", + "options": { + "Default": "The Default set of symbols to upload", + "Pdb": "Only Pdb based symbols Windows pdb's and managed Portable pdb's.", + "SourceMap": "Only JavaScript based SourceMap symbols (*.js.map)", + "All": "All supported symbol formats" + }, + "groupName": "advanced", + "visibleRule": "PublishSymbols = true && SymbolServerType = TeamServices" + }, + { + "name": "DetailedLog", + "type": "boolean", + "label": "ms-resource:loc.input.label.DetailedLog", + "defaultValue": "true", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.DetailedLog", + "groupName": "advanced" + }, + { + "name": "TreatNotIndexedAsWarning", + "type": "boolean", + "label": "ms-resource:loc.input.label.TreatNotIndexedAsWarning", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.TreatNotIndexedAsWarning", + "groupName": "advanced" + }, + { + "name": "UseNetCoreClientTool", + "type": "boolean", + "label": "ms-resource:loc.input.label.UseNetCoreClientTool", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.UseNetCoreClientTool", + "groupName": "advanced" + }, + { + "name": "SymbolsMaximumWaitTime", + "type": "string", + "label": "ms-resource:loc.input.label.SymbolsMaximumWaitTime", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.SymbolsMaximumWaitTime", + "groupName": "advanced" + }, + { + "name": "SymbolsProduct", + "type": "string", + "label": "ms-resource:loc.input.label.SymbolsProduct", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.SymbolsProduct", + "groupName": "advanced" + }, + { + "name": "SymbolsVersion", + "type": "string", + "label": "ms-resource:loc.input.label.SymbolsVersion", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.SymbolsVersion", + "groupName": "advanced" + }, + { + "name": "SymbolsArtifactName", + "type": "string", + "label": "ms-resource:loc.input.label.SymbolsArtifactName", + "defaultValue": "Symbols_$(BuildConfiguration)", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.SymbolsArtifactName", + "groupName": "advanced" + } + ], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "prejobexecution": { + "Node10": { + "target": "PreJobExecutionPublishSymbols.js" + }, + "Node16": { + "target": "PreJobExecutionPublishSymbols.js", + "argumentFormat": "" + } + }, + "execution": { + "PowerShell3": { + "target": "PublishSymbols.ps1", + "platforms": [ + "windows" + ] + }, + "Node10": { + "target": "clienttoolmain.js" + }, + "Node16": { + "target": "clienttoolmain.js", + "argumentFormat": "" + } + }, + "messages": { + "CleanedUpSemaphoreFile0": "ms-resource:loc.messages.CleanedUpSemaphoreFile0", + "CleanUpSemaphoreFile0Error1": "ms-resource:loc.messages.CleanUpSemaphoreFile0Error1", + "Error0AccessingSemaphoreFile1Retrying2Seconds": "ms-resource:loc.messages.Error0AccessingSemaphoreFile1Retrying2Seconds", + "Error_UnexpectedErrorSymbolsPublishing": "ms-resource:loc.messages.Error_UnexpectedErrorSymbolsPublishing", + "Error_CommandNotRecognized": "ms-resource:loc.messages.Error_CommandNotRecognized", + "Error_SymbolPublishingToolNotFound": "ms-resource:loc.messages.Error_SymbolPublishingToolNotFound", + "FailedToLoadDbghelpDllFrom0ErrorCode1": "ms-resource:loc.messages.FailedToLoadDbghelpDllFrom0ErrorCode1", + "FailedToPublishSymbols": "ms-resource:loc.messages.FailedToPublishSymbols", + "FailedToRunClientTool": "ms-resource:loc.messages.FailedToRunClientTool", + "Found0Files": "ms-resource:loc.messages.Found0Files", + "FoundNFiles": "ms-resource:loc.messages.FoundNFiles", + "FreeLibraryDbghelpDllError0": "ms-resource:loc.messages.FreeLibraryDbghelpDllError0", + "IndexingNotSupported": "ms-resource:loc.messages.IndexingNotSupported", + "Info_RetrievingClientToolUri": "ms-resource:loc.messages.Info_RetrievingClientToolUri", + "Info_ClientTool": "ms-resource:loc.messages.Info_ClientTool", + "NoFilesForIndexing": "ms-resource:loc.messages.NoFilesForIndexing", + "NoFilesForPublishing": "ms-resource:loc.messages.NoFilesForPublishing", + "NoSourcePathsIn0": "ms-resource:loc.messages.NoSourcePathsIn0", + "OneOrMoreSourceFilesNotIndexedFor0": "ms-resource:loc.messages.OneOrMoreSourceFilesNotIndexedFor0", + "PreJobFailedToExecute": "ms-resource:loc.messages.PreJobFailedToExecute", + "PublishOptionNotSet": "ms-resource:loc.messages.PublishOptionNotSet", + "ReachedPublishingMaxWaitTime0Seconds": "ms-resource:loc.messages.ReachedPublishingMaxWaitTime0Seconds", + "SemaphoreFile0ExistsRetrying1Seconds": "ms-resource:loc.messages.SemaphoreFile0ExistsRetrying1Seconds", + "SemaphoreFile0Minutes1AttemptingCleanup": "ms-resource:loc.messages.SemaphoreFile0Minutes1AttemptingCleanup", + "SkippingIndexing": "ms-resource:loc.messages.SkippingIndexing", + "SourceFolderDeprecated0": "ms-resource:loc.messages.SourceFolderDeprecated0", + "SourceInfoNotRetrievedFrom0Message1": "ms-resource:loc.messages.SourceInfoNotRetrievedFrom0Message1", + "SpacesInTemp": "ms-resource:loc.messages.SpacesInTemp", + "SymbolsPublishedSuccessfully": "ms-resource:loc.messages.SymbolsPublishedSuccessfully", + "SymbolStoreLastIdTxtNotFoundAt0": "ms-resource:loc.messages.SymbolStoreLastIdTxtNotFoundAt0", + "UnableToDetermineWorkspaceFromSourceFolder0": "ms-resource:loc.messages.UnableToDetermineWorkspaceFromSourceFolder0", + "UnableToIndexSources": "ms-resource:loc.messages.UnableToIndexSources", + "UnexpectedDbghelpdllExpected0Actual1": "ms-resource:loc.messages.UnexpectedDbghelpdllExpected0Actual1", + "UnsupportedSourceProvider0": "ms-resource:loc.messages.UnsupportedSourceProvider0", + "Win32Error0FromMethod1": "ms-resource:loc.messages.Win32Error0FromMethod1" + }, + "_buildConfigMapping": { + "Default": "2.237.0", + "Node20_229_14": "2.237.1" + } +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2/tsconfig.json b/_generated/PublishSymbolsV2/tsconfig.json new file mode 100644 index 000000000000..37ddce233292 --- /dev/null +++ b/_generated/PublishSymbolsV2/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "sourceMap":true, + "skipLibCheck": true + }, + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/_generated/PublishSymbolsV2_Node20/package-lock.json b/_generated/PublishSymbolsV2_Node20/package-lock.json index 3132a20c4521..919200b0597d 100644 --- a/_generated/PublishSymbolsV2_Node20/package-lock.json +++ b/_generated/PublishSymbolsV2_Node20/package-lock.json @@ -22,11 +22,6 @@ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" }, - "@types/mockery": { - "version": "1.4.29", - "resolved": "https://registry.npmjs.org/@types/mockery/-/mockery-1.4.29.tgz", - "integrity": "sha512-SwFMxO68Z6ERGFpPYBdmgfS5LloELzY16h/PMAhnxMog91JcHI5AJjW0HN56cGUPhV0nDb8xNWsJkhuDzr4lAQ==" - }, "@types/node": { "version": "20.8.10", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", @@ -50,6 +45,11 @@ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.11.tgz", "integrity": "sha512-CJNkbEu4IdVuBMRVaNC2GjASgJK7ziqDlVXWuJ1pvhOLADl7nzxhTKjHRdOmo2SuXuygcWBmzgYgn9foTX0UiA==" }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + }, "adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -63,6 +63,33 @@ "debug": "4" } }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -109,37 +136,37 @@ } }, "azure-pipelines-tasks-packaging-common": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-packaging-common/-/azure-pipelines-tasks-packaging-common-3.229.0.tgz", - "integrity": "sha512-AoDdqgo9dBLrL7xgGorbVgV5+VSwwxrp01tVaawVBkmW9iTIh1k5SdpbeHHWg8TzbTHWXQsBZeHjdVYGVU72hQ==", + "version": "3.236.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-packaging-common/-/azure-pipelines-tasks-packaging-common-3.236.0.tgz", + "integrity": "sha512-ndG/0JZ5vkAmNC+sEqgYoxB2/4EQQ7I0g9QDGBBwa0kRzxf28vEUf6FijsSUUM6RsVoVnNVqQKwnSwCE+0Krng==", "requires": { "@types/ini": "1.3.30", "@types/ltx": "2.8.0", "@types/mocha": "^5.2.6", - "@types/mockery": "1.4.29", "@types/node": "^16.11.39", "@types/q": "1.5.2", "adm-zip": "^0.4.11", "azure-devops-node-api": "10.2.2", - "azure-pipelines-task-lib": "^4.0.0-preview", - "azure-pipelines-tool-lib": "^2.0.0-preview", + "azure-pipelines-task-lib": "^4.9.0", + "azure-pipelines-tool-lib": "^2.0.7", "ini": "^1.3.8", "ip-address": "^5.8.9", "ltx": "^2.6.2", + "mocha": "^8.4.0", "q": "^1.5.0", "semver": "^5.5.0", "typed-rest-client": "1.8.4" }, "dependencies": { "@types/node": { - "version": "16.18.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.60.tgz", - "integrity": "sha512-ZUGPWx5vKfN+G2/yN7pcSNLkIkXEvlwNaJEd4e0ppX7W2S8XAkdc/37hM4OUNJB9sa0p12AOvGvxL4JCPiz9DA==" + "version": "16.18.89", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.89.tgz", + "integrity": "sha512-QlrE8QI5z62nfnkiUZysUsAaxWaTMoGqFVcB3PvK1WxJ0c699bacErV4Fabe9Hki6ZnaHalgzihLbTl2d34XfQ==" }, "azure-pipelines-task-lib": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.7.0.tgz", - "integrity": "sha512-5MctDC1Bt7eFi9tQTXlikuWRDc2MenCNruMsEwcKuXqBj1ZY+fA/D+E1DbE0Qi2u8kl1p6szT0we8k6RHSOe/w==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.10.0.tgz", + "integrity": "sha512-/j5nwVEPYx/WV/5H66BuMK3ubrKYFgbFc0yPmEwfXvDwNbgXeIHtcXXZGHiCVq2q+JmHcFYav9sfOrCq2O2Bdg==", "requires": { "adm-zip": "^0.5.10", "deasync": "^0.1.28", @@ -152,9 +179,35 @@ }, "dependencies": { "adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==" + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.11.tgz", + "integrity": "sha512-bSG/kcTQRVyCZ3aOWt3nu/KGIxkfSNi7MXzgKr/MHfKbqPakFESQvaujpUaAG8OQuSroxYMY5vLMpdE6+oND2Q==" + } + } + }, + "azure-pipelines-tool-lib": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.7.tgz", + "integrity": "sha512-1FN67ypNwNhgZllYSm4/pAQdffSfEZJhwW8YeNvm/cKDTS6t6bukTBIkt04c1CsaQe7Ot+eDOVMn41wX1ketXw==", + "requires": { + "@types/semver": "^5.3.0", + "@types/uuid": "^3.4.5", + "azure-pipelines-task-lib": "^4.1.0", + "semver": "^5.7.0", + "semver-compare": "^1.0.0", + "typed-rest-client": "^1.8.6", + "uuid": "^3.3.2" + }, + "dependencies": { + "typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "requires": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } } } } @@ -250,6 +303,11 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -267,6 +325,19 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -276,6 +347,98 @@ "get-intrinsic": "^1.0.2" } }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -298,6 +461,31 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -308,6 +496,28 @@ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, "follow-redirects": { "version": "1.15.4", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", @@ -318,11 +528,22 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, "get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", @@ -357,11 +578,29 @@ } } }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + }, "has": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==" }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, "has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", @@ -387,6 +626,11 @@ } } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -430,6 +674,14 @@ "sprintf-js": "1.1.2" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -438,6 +690,39 @@ "hasown": "^2.0.0" } }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", @@ -452,11 +737,27 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "requires": { + "chalk": "^4.0.0" + } + }, "ltx": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/ltx/-/ltx-2.10.0.tgz", @@ -486,11 +787,104 @@ "brace-expansion": "^1.1.7" } }, + "mocha": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" + }, "node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", @@ -507,6 +901,11 @@ "sanitize-filename": "^1.6.3" } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -520,6 +919,27 @@ "wrappy": "1" } }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -530,6 +950,11 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -543,6 +968,22 @@ "side-channel": "^1.0.4" } }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -551,6 +992,11 @@ "resolve": "^1.1.6" } }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, "resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -561,6 +1007,11 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, "sanitize-filename": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", @@ -579,6 +1030,14 @@ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "requires": { + "randombytes": "^2.1.0" + } + }, "shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", @@ -604,11 +1063,49 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, "truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -658,10 +1155,141 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/_generated/PublishSymbolsV2_Node20/package.json b/_generated/PublishSymbolsV2_Node20/package.json index f5f4d14765a7..585f889ebda7 100644 --- a/_generated/PublishSymbolsV2_Node20/package.json +++ b/_generated/PublishSymbolsV2_Node20/package.json @@ -19,7 +19,7 @@ "dependencies": { "@types/node": "^20.3.1", "azure-pipelines-task-lib": "^5.0.1-preview.0", - "azure-pipelines-tasks-packaging-common": "^3.229.0", + "azure-pipelines-tasks-packaging-common": "^3.236.0", "azure-pipelines-tasks-utility-common": "^3.225.0" }, "devDependencies": { diff --git a/_generated/PublishSymbolsV2_Node20/task.json b/_generated/PublishSymbolsV2_Node20/task.json index df7444e6caf0..d7e8e627d471 100644 --- a/_generated/PublishSymbolsV2_Node20/task.json +++ b/_generated/PublishSymbolsV2_Node20/task.json @@ -13,7 +13,7 @@ "preview": false, "version": { "Major": 2, - "Minor": 234, + "Minor": 237, "Patch": 1 }, "minimumAgentVersion": "2.144.0", @@ -248,7 +248,7 @@ "Win32Error0FromMethod1": "Encountered Win32 error '{0}' from method '{1}'." }, "_buildConfigMapping": { - "Default": "2.234.0", - "Node20_229_14": "2.234.1" + "Default": "2.237.0", + "Node20_229_14": "2.237.1" } } \ No newline at end of file diff --git a/_generated/PublishSymbolsV2_Node20/task.loc.json b/_generated/PublishSymbolsV2_Node20/task.loc.json index c3aa5d84251f..9a5c9ba27a7b 100644 --- a/_generated/PublishSymbolsV2_Node20/task.loc.json +++ b/_generated/PublishSymbolsV2_Node20/task.loc.json @@ -13,7 +13,7 @@ "preview": false, "version": { "Major": 2, - "Minor": 234, + "Minor": 237, "Patch": 1 }, "minimumAgentVersion": "2.144.0", @@ -248,7 +248,7 @@ "Win32Error0FromMethod1": "ms-resource:loc.messages.Win32Error0FromMethod1" }, "_buildConfigMapping": { - "Default": "2.234.0", - "Node20_229_14": "2.234.1" + "Default": "2.237.0", + "Node20_229_14": "2.237.1" } } \ No newline at end of file