@microsoft/teamsfx-core 2.0.9-rc-hotfix.2 → 2.0.10-alpha.288b4cdfa.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (705) hide show
  1. package/build/client/teamsDevPortalClient.d.ts +127 -0
  2. package/build/client/teamsDevPortalClient.d.ts.map +1 -0
  3. package/build/client/teamsDevPortalClient.js +934 -0
  4. package/build/client/teamsDevPortalClient.js.map +1 -0
  5. package/build/common/azureUtils.d.ts +3 -0
  6. package/build/common/azureUtils.d.ts.map +1 -0
  7. package/build/common/azureUtils.js +50 -0
  8. package/build/common/azureUtils.js.map +1 -0
  9. package/build/common/constants.d.ts +11 -1
  10. package/build/common/constants.d.ts.map +1 -1
  11. package/build/common/constants.js +44 -3
  12. package/build/common/constants.js.map +1 -1
  13. package/build/common/featureFlags.d.ts +4 -5
  14. package/build/common/featureFlags.d.ts.map +1 -1
  15. package/build/common/featureFlags.js +2 -10
  16. package/build/common/featureFlags.js.map +1 -1
  17. package/build/common/globalState.js +3 -3
  18. package/build/{core → common}/globalVars.d.ts +2 -1
  19. package/build/common/globalVars.d.ts.map +1 -0
  20. package/build/{core → common}/globalVars.js +11 -1
  21. package/build/common/globalVars.js.map +1 -0
  22. package/build/common/localizeUtils.js +1 -1
  23. package/build/common/localizeUtils.js.map +1 -1
  24. package/build/common/projectSettingsHelper.d.ts +5 -0
  25. package/build/common/projectSettingsHelper.d.ts.map +1 -1
  26. package/build/common/projectSettingsHelper.js +31 -1
  27. package/build/common/projectSettingsHelper.js.map +1 -1
  28. package/build/common/requestUtils.d.ts +4 -0
  29. package/build/common/requestUtils.d.ts.map +1 -0
  30. package/build/common/requestUtils.js +52 -0
  31. package/build/common/requestUtils.js.map +1 -0
  32. package/build/common/samples.d.ts +6 -1
  33. package/build/common/samples.d.ts.map +1 -1
  34. package/build/common/samples.js +4 -4
  35. package/build/common/samples.js.map +1 -1
  36. package/build/common/stringUtils.d.ts +8 -0
  37. package/build/common/stringUtils.d.ts.map +1 -1
  38. package/build/common/stringUtils.js +63 -1
  39. package/build/common/stringUtils.js.map +1 -1
  40. package/build/common/telemetry.d.ts +30 -11
  41. package/build/common/telemetry.d.ts.map +1 -1
  42. package/build/common/telemetry.js +79 -74
  43. package/build/common/telemetry.js.map +1 -1
  44. package/build/common/templates-config.json +2 -2
  45. package/build/common/tools.d.ts +1 -31
  46. package/build/common/tools.d.ts.map +1 -1
  47. package/build/common/tools.js +6 -245
  48. package/build/common/tools.js.map +1 -1
  49. package/build/common/utils.d.ts +1 -3
  50. package/build/common/utils.d.ts.map +1 -1
  51. package/build/common/utils.js +5 -14
  52. package/build/common/utils.js.map +1 -1
  53. package/build/common/wrappedAxiosClient.js +5 -5
  54. package/build/common/wrappedAxiosClient.js.map +1 -1
  55. package/build/component/configManager/lifecycle.js +1 -1
  56. package/build/component/configManager/lifecycle.js.map +1 -1
  57. package/build/component/configManager/parser.js +1 -1
  58. package/build/component/configManager/parser.js.map +1 -1
  59. package/build/component/configManager/validator.js +1 -1
  60. package/build/component/configManager/validator.js.map +1 -1
  61. package/build/component/constants.d.ts +3 -223
  62. package/build/component/constants.d.ts.map +1 -1
  63. package/build/component/constants.js +4 -247
  64. package/build/component/constants.js.map +1 -1
  65. package/build/component/coordinator/index.d.ts.map +1 -1
  66. package/build/component/coordinator/index.js +74 -72
  67. package/build/component/coordinator/index.js.map +1 -1
  68. package/build/component/deps-checker/checkerFactory.d.ts.map +1 -0
  69. package/build/component/deps-checker/checkerFactory.js.map +1 -0
  70. package/build/{common → component}/deps-checker/constant/helpLink.d.ts +0 -3
  71. package/build/component/deps-checker/constant/helpLink.d.ts.map +1 -0
  72. package/build/{common → component}/deps-checker/constant/helpLink.js +1 -6
  73. package/build/component/deps-checker/constant/helpLink.js.map +1 -0
  74. package/build/component/deps-checker/constant/index.d.ts.map +1 -0
  75. package/build/component/deps-checker/constant/index.js.map +1 -0
  76. package/build/component/deps-checker/constant/message.d.ts.map +1 -0
  77. package/build/{common → component}/deps-checker/constant/message.js +1 -1
  78. package/build/component/deps-checker/constant/message.js.map +1 -0
  79. package/build/component/deps-checker/constant/telemetry.d.ts.map +1 -0
  80. package/build/component/deps-checker/constant/telemetry.js.map +1 -0
  81. package/build/component/deps-checker/coreDepsLoggerAdapter.d.ts.map +1 -0
  82. package/build/component/deps-checker/coreDepsLoggerAdapter.js.map +1 -0
  83. package/build/component/deps-checker/coreDepsTelemetryAdapter.d.ts.map +1 -0
  84. package/build/{common → component}/deps-checker/coreDepsTelemetryAdapter.js +4 -4
  85. package/build/component/deps-checker/coreDepsTelemetryAdapter.js.map +1 -0
  86. package/build/component/deps-checker/depsChecker.d.ts.map +1 -0
  87. package/build/component/deps-checker/depsChecker.js.map +1 -0
  88. package/build/component/deps-checker/depsError.d.ts.map +1 -0
  89. package/build/component/deps-checker/depsError.js.map +1 -0
  90. package/build/component/deps-checker/depsLogger.d.ts.map +1 -0
  91. package/build/component/deps-checker/depsLogger.js.map +1 -0
  92. package/build/component/deps-checker/depsManager.d.ts.map +1 -0
  93. package/build/component/deps-checker/depsManager.js.map +1 -0
  94. package/build/component/deps-checker/depsTelemetry.d.ts.map +1 -0
  95. package/build/component/deps-checker/depsTelemetry.js.map +1 -0
  96. package/build/component/deps-checker/index.d.ts.map +1 -0
  97. package/build/component/deps-checker/index.js.map +1 -0
  98. package/build/component/deps-checker/internal/dotnetChecker.d.ts.map +1 -0
  99. package/build/{common → component}/deps-checker/internal/dotnetChecker.js +1 -1
  100. package/build/component/deps-checker/internal/dotnetChecker.js.map +1 -0
  101. package/build/component/deps-checker/internal/funcToolChecker.d.ts.map +1 -0
  102. package/build/{common → component}/deps-checker/internal/funcToolChecker.js +4 -4
  103. package/build/component/deps-checker/internal/funcToolChecker.js.map +1 -0
  104. package/build/component/deps-checker/internal/nodeChecker.d.ts.map +1 -0
  105. package/build/component/deps-checker/internal/nodeChecker.js.map +1 -0
  106. package/build/component/deps-checker/internal/testToolChecker.d.ts.map +1 -0
  107. package/build/{common → component}/deps-checker/internal/testToolChecker.js +1 -1
  108. package/build/component/deps-checker/internal/testToolChecker.js.map +1 -0
  109. package/build/component/deps-checker/internal/vxTestAppChecker.d.ts.map +1 -0
  110. package/build/{common → component}/deps-checker/internal/vxTestAppChecker.js +9 -3
  111. package/build/component/deps-checker/internal/vxTestAppChecker.js.map +1 -0
  112. package/build/component/deps-checker/util/cpUtils.d.ts.map +1 -0
  113. package/build/component/deps-checker/util/cpUtils.js.map +1 -0
  114. package/build/component/deps-checker/util/downloadHelper.d.ts.map +1 -0
  115. package/build/component/deps-checker/util/downloadHelper.js.map +1 -0
  116. package/build/component/deps-checker/util/fileHelper.d.ts.map +1 -0
  117. package/build/component/deps-checker/util/fileHelper.js.map +1 -0
  118. package/build/component/deps-checker/util/index.d.ts.map +1 -0
  119. package/build/component/deps-checker/util/index.js.map +1 -0
  120. package/build/component/deps-checker/util/progressIndicator.d.ts.map +1 -0
  121. package/build/component/deps-checker/util/progressIndicator.js.map +1 -0
  122. package/build/component/deps-checker/util/system.d.ts.map +1 -0
  123. package/build/component/deps-checker/util/system.js.map +1 -0
  124. package/build/component/developerPortalScaffoldUtils.d.ts +1 -5
  125. package/build/component/developerPortalScaffoldUtils.d.ts.map +1 -1
  126. package/build/component/developerPortalScaffoldUtils.js +71 -87
  127. package/build/component/developerPortalScaffoldUtils.js.map +1 -1
  128. package/build/component/driver/aad/create.d.ts.map +1 -1
  129. package/build/component/driver/aad/create.js +17 -18
  130. package/build/component/driver/aad/create.js.map +1 -1
  131. package/build/component/driver/aad/utility/aadAppClient.d.ts.map +1 -1
  132. package/build/component/driver/aad/utility/aadAppClient.js +10 -10
  133. package/build/component/driver/aad/utility/aadAppClient.js.map +1 -1
  134. package/build/component/driver/aad/utility/buildAadManifest.d.ts +1 -1
  135. package/build/component/driver/aad/utility/buildAadManifest.d.ts.map +1 -1
  136. package/build/component/driver/aad/utility/buildAadManifest.js +11 -11
  137. package/build/component/driver/aad/utility/buildAadManifest.js.map +1 -1
  138. package/build/component/driver/add/addWebPart.d.ts +2 -2
  139. package/build/component/driver/add/addWebPart.d.ts.map +1 -1
  140. package/build/component/driver/add/addWebPart.js +29 -29
  141. package/build/component/driver/add/addWebPart.js.map +1 -1
  142. package/build/component/driver/apiKey/create.d.ts.map +1 -1
  143. package/build/component/driver/apiKey/create.js +16 -16
  144. package/build/component/driver/apiKey/create.js.map +1 -1
  145. package/build/component/driver/apiKey/update.d.ts +1 -1
  146. package/build/component/driver/apiKey/update.d.ts.map +1 -1
  147. package/build/component/driver/apiKey/update.js +15 -15
  148. package/build/component/driver/apiKey/update.js.map +1 -1
  149. package/build/component/driver/arm/deployImpl.js +1 -1
  150. package/build/component/driver/arm/deployImpl.js.map +1 -1
  151. package/build/component/driver/arm/util/bicepChecker.d.ts.map +1 -1
  152. package/build/component/driver/arm/util/bicepChecker.js +25 -5
  153. package/build/component/driver/arm/util/bicepChecker.js.map +1 -1
  154. package/build/component/driver/arm/util/handleError.js +2 -2
  155. package/build/component/driver/arm/util/handleError.js.map +1 -1
  156. package/build/component/driver/deploy/azure/azureStorageDeployDriver.js +1 -1
  157. package/build/component/driver/deploy/azure/azureStorageDeployDriver.js.map +1 -1
  158. package/build/component/driver/deploy/azure/azureStorageStaticWebsiteConfigDriver.js +1 -1
  159. package/build/component/driver/deploy/azure/azureStorageStaticWebsiteConfigDriver.js.map +1 -1
  160. package/build/component/driver/deploy/azure/impl/AzureZipDeployImpl.js +1 -1
  161. package/build/component/driver/deploy/azure/impl/AzureZipDeployImpl.js.map +1 -1
  162. package/build/component/driver/deploy/azure/impl/azureDeployImpl.d.ts +4 -4
  163. package/build/component/driver/deploy/azure/impl/azureDeployImpl.d.ts.map +1 -1
  164. package/build/component/driver/deploy/azure/impl/azureDeployImpl.js +13 -13
  165. package/build/component/driver/deploy/azure/impl/azureDeployImpl.js.map +1 -1
  166. package/build/component/driver/deploy/spfx/deployDriver.d.ts +1 -1
  167. package/build/component/driver/deploy/spfx/deployDriver.d.ts.map +1 -1
  168. package/build/component/driver/deploy/spfx/deployDriver.js +19 -18
  169. package/build/component/driver/deploy/spfx/deployDriver.js.map +1 -1
  170. package/build/component/driver/devTool/error/dotnetInstallationUserError.js +1 -1
  171. package/build/component/driver/devTool/error/dotnetInstallationUserError.js.map +1 -1
  172. package/build/component/driver/devTool/error/funcInstallationUserError.js +1 -1
  173. package/build/component/driver/devTool/error/funcInstallationUserError.js.map +1 -1
  174. package/build/component/driver/devTool/error/testToolInstallationUserError.js +1 -1
  175. package/build/component/driver/devTool/error/testToolInstallationUserError.js.map +1 -1
  176. package/build/component/driver/devTool/installDriver.d.ts +1 -1
  177. package/build/component/driver/devTool/installDriver.d.ts.map +1 -1
  178. package/build/component/driver/devTool/installDriver.js +6 -6
  179. package/build/component/driver/devTool/installDriver.js.map +1 -1
  180. package/build/component/driver/m365/acquire.js +4 -4
  181. package/build/component/driver/m365/acquire.js.map +1 -1
  182. package/build/component/driver/middleware/addSWADeployTelemetry.js +5 -5
  183. package/build/component/driver/middleware/addSWADeployTelemetry.js.map +1 -1
  184. package/build/component/driver/middleware/addStartAndEndTelemetry.d.ts.map +1 -1
  185. package/build/component/driver/middleware/addStartAndEndTelemetry.js +3 -3
  186. package/build/component/driver/middleware/addStartAndEndTelemetry.js.map +1 -1
  187. package/build/component/driver/oauth/create.d.ts +1 -1
  188. package/build/component/driver/oauth/create.d.ts.map +1 -1
  189. package/build/component/driver/oauth/create.js +23 -24
  190. package/build/component/driver/oauth/create.js.map +1 -1
  191. package/build/component/driver/oauth/update.d.ts +1 -1
  192. package/build/component/driver/oauth/update.d.ts.map +1 -1
  193. package/build/component/driver/oauth/update.js +15 -15
  194. package/build/component/driver/oauth/update.js.map +1 -1
  195. package/build/component/driver/oauth/utility/utility.js +2 -2
  196. package/build/component/driver/oauth/utility/utility.js.map +1 -1
  197. package/build/component/driver/script/scriptDriver.js +1 -1
  198. package/build/component/driver/script/scriptDriver.js.map +1 -1
  199. package/build/component/driver/teamsApp/appStudio.d.ts +1 -1
  200. package/build/component/driver/teamsApp/appStudio.d.ts.map +1 -1
  201. package/build/component/driver/teamsApp/appStudio.js +25 -25
  202. package/build/component/driver/teamsApp/appStudio.js.map +1 -1
  203. package/build/component/driver/teamsApp/clients/appStudioClient.d.ts +7 -4
  204. package/build/component/driver/teamsApp/clients/appStudioClient.d.ts.map +1 -1
  205. package/build/component/driver/teamsApp/clients/appStudioClient.js +60 -60
  206. package/build/component/driver/teamsApp/clients/appStudioClient.js.map +1 -1
  207. package/build/component/driver/teamsApp/configure.d.ts +1 -1
  208. package/build/component/driver/teamsApp/configure.d.ts.map +1 -1
  209. package/build/component/driver/teamsApp/configure.js +16 -16
  210. package/build/component/driver/teamsApp/configure.js.map +1 -1
  211. package/build/component/driver/teamsApp/constants.d.ts +0 -2
  212. package/build/component/driver/teamsApp/constants.d.ts.map +1 -1
  213. package/build/component/driver/teamsApp/constants.js +14 -24
  214. package/build/component/driver/teamsApp/constants.js.map +1 -1
  215. package/build/component/driver/teamsApp/create.d.ts +2 -2
  216. package/build/component/driver/teamsApp/create.d.ts.map +1 -1
  217. package/build/component/driver/teamsApp/create.js +19 -19
  218. package/build/component/driver/teamsApp/create.js.map +1 -1
  219. package/build/component/driver/teamsApp/createAppPackage.js +1 -1
  220. package/build/component/driver/teamsApp/createAppPackage.js.map +1 -1
  221. package/build/component/driver/teamsApp/publishAppPackage.d.ts +1 -1
  222. package/build/component/driver/teamsApp/publishAppPackage.d.ts.map +1 -1
  223. package/build/component/driver/teamsApp/publishAppPackage.js +21 -21
  224. package/build/component/driver/teamsApp/publishAppPackage.js.map +1 -1
  225. package/build/component/driver/teamsApp/teamsappMgr.js +8 -8
  226. package/build/component/driver/teamsApp/teamsappMgr.js.map +1 -1
  227. package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.d.ts.map +1 -1
  228. package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.js +29 -22
  229. package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.js.map +1 -1
  230. package/build/component/driver/teamsApp/utils/ManifestUtils.d.ts.map +1 -1
  231. package/build/component/driver/teamsApp/utils/ManifestUtils.js +34 -34
  232. package/build/component/driver/teamsApp/utils/ManifestUtils.js.map +1 -1
  233. package/build/component/driver/teamsApp/utils/telemetry.d.ts +0 -9
  234. package/build/component/driver/teamsApp/utils/telemetry.d.ts.map +1 -1
  235. package/build/component/driver/teamsApp/utils/telemetry.js +0 -9
  236. package/build/component/driver/teamsApp/utils/telemetry.js.map +1 -1
  237. package/build/component/driver/teamsApp/utils/utils.d.ts +1 -1
  238. package/build/component/driver/teamsApp/utils/utils.d.ts.map +1 -1
  239. package/build/component/driver/teamsApp/utils/utils.js +1 -1
  240. package/build/component/driver/teamsApp/utils/utils.js.map +1 -1
  241. package/build/component/driver/teamsApp/validateAppPackage.d.ts +2 -5
  242. package/build/component/driver/teamsApp/validateAppPackage.d.ts.map +1 -1
  243. package/build/component/driver/teamsApp/validateAppPackage.js +18 -18
  244. package/build/component/driver/teamsApp/validateAppPackage.js.map +1 -1
  245. package/build/component/driver/teamsApp/validateTestCases.d.ts +3 -3
  246. package/build/component/driver/teamsApp/validateTestCases.d.ts.map +1 -1
  247. package/build/component/driver/teamsApp/validateTestCases.js +20 -19
  248. package/build/component/driver/teamsApp/validateTestCases.js.map +1 -1
  249. package/build/component/driver/util/utils.d.ts +3 -0
  250. package/build/component/driver/util/utils.d.ts.map +1 -1
  251. package/build/component/driver/util/utils.js +16 -1
  252. package/build/component/driver/util/utils.js.map +1 -1
  253. package/build/component/driver/util/wrapUtil.d.ts.map +1 -1
  254. package/build/component/driver/util/wrapUtil.js +8 -5
  255. package/build/component/driver/util/wrapUtil.js.map +1 -1
  256. package/build/component/feature/collaboration.d.ts.map +1 -1
  257. package/build/component/feature/collaboration.js +25 -24
  258. package/build/component/feature/collaboration.js.map +1 -1
  259. package/build/component/feature/sso.js +4 -3
  260. package/build/component/feature/sso.js.map +1 -1
  261. package/build/component/generator/copilotPlugin/generator.d.ts +10 -2
  262. package/build/component/generator/copilotPlugin/generator.d.ts.map +1 -1
  263. package/build/component/generator/copilotPlugin/generator.js +222 -98
  264. package/build/component/generator/copilotPlugin/generator.js.map +1 -1
  265. package/build/component/generator/copilotPlugin/helper.d.ts +5 -14
  266. package/build/component/generator/copilotPlugin/helper.d.ts.map +1 -1
  267. package/build/component/generator/copilotPlugin/helper.js +60 -110
  268. package/build/component/generator/copilotPlugin/helper.js.map +1 -1
  269. package/build/component/generator/generator.d.ts.map +1 -1
  270. package/build/component/generator/generator.js +7 -7
  271. package/build/component/generator/generator.js.map +1 -1
  272. package/build/component/generator/generatorAction.d.ts +1 -1
  273. package/build/component/generator/generatorAction.d.ts.map +1 -1
  274. package/build/component/generator/generatorAction.js +8 -16
  275. package/build/component/generator/generatorAction.js.map +1 -1
  276. package/build/component/generator/generatorProvider.d.ts.map +1 -1
  277. package/build/component/generator/generatorProvider.js +6 -2
  278. package/build/component/generator/generatorProvider.js.map +1 -1
  279. package/build/component/generator/officeAddin/generator.d.ts +2 -2
  280. package/build/component/generator/officeAddin/generator.d.ts.map +1 -1
  281. package/build/component/generator/officeAddin/generator.js +37 -36
  282. package/build/component/generator/officeAddin/generator.js.map +1 -1
  283. package/build/component/generator/officeAddin/helperMethods.d.ts +5 -0
  284. package/build/component/generator/officeAddin/helperMethods.d.ts.map +1 -1
  285. package/build/component/generator/officeAddin/helperMethods.js +37 -0
  286. package/build/component/generator/officeAddin/helperMethods.js.map +1 -1
  287. package/build/component/generator/officeXMLAddin/generator.d.ts +9 -1
  288. package/build/component/generator/officeXMLAddin/generator.d.ts.map +1 -1
  289. package/build/component/generator/officeXMLAddin/generator.js +74 -11
  290. package/build/component/generator/officeXMLAddin/generator.js.map +1 -1
  291. package/build/component/generator/officeXMLAddin/projectConfig.d.ts +2 -4
  292. package/build/component/generator/officeXMLAddin/projectConfig.d.ts.map +1 -1
  293. package/build/component/generator/officeXMLAddin/projectConfig.js +1 -11
  294. package/build/component/generator/officeXMLAddin/projectConfig.js.map +1 -1
  295. package/build/component/generator/spfx/depsChecker/generatorChecker.d.ts.map +1 -1
  296. package/build/component/generator/spfx/depsChecker/generatorChecker.js +8 -7
  297. package/build/component/generator/spfx/depsChecker/generatorChecker.js.map +1 -1
  298. package/build/component/generator/spfx/depsChecker/yoChecker.d.ts.map +1 -1
  299. package/build/component/generator/spfx/depsChecker/yoChecker.js +3 -2
  300. package/build/component/generator/spfx/depsChecker/yoChecker.js.map +1 -1
  301. package/build/component/generator/spfx/error.d.ts +0 -1
  302. package/build/component/generator/spfx/error.d.ts.map +1 -1
  303. package/build/component/generator/spfx/error.js +1 -5
  304. package/build/component/generator/spfx/error.js.map +1 -1
  305. package/build/component/generator/spfx/spfxGenerator.d.ts +2 -2
  306. package/build/component/generator/spfx/spfxGenerator.d.ts.map +1 -1
  307. package/build/component/generator/spfx/spfxGenerator.js +27 -29
  308. package/build/component/generator/spfx/spfxGenerator.js.map +1 -1
  309. package/build/component/generator/spfx/utils/constants.d.ts +0 -13
  310. package/build/component/generator/spfx/utils/constants.d.ts.map +1 -1
  311. package/build/component/generator/spfx/utils/constants.js +1 -16
  312. package/build/component/generator/spfx/utils/constants.js.map +1 -1
  313. package/build/component/generator/spfx/utils/telemetry-helper.d.ts.map +1 -1
  314. package/build/component/generator/spfx/utils/telemetry-helper.js +11 -9
  315. package/build/component/generator/spfx/utils/telemetry-helper.js.map +1 -1
  316. package/build/component/generator/spfx/utils/utils.d.ts +1 -1
  317. package/build/component/generator/spfx/utils/utils.d.ts.map +1 -1
  318. package/build/component/generator/spfx/utils/utils.js +1 -1
  319. package/build/component/generator/spfx/utils/utils.js.map +1 -1
  320. package/build/component/generator/templates/ssrTabGenerator.d.ts.map +1 -1
  321. package/build/component/generator/templates/ssrTabGenerator.js +5 -5
  322. package/build/component/generator/templates/ssrTabGenerator.js.map +1 -1
  323. package/build/component/generator/templates/templateGenerator.d.ts +3 -3
  324. package/build/component/generator/templates/templateGenerator.d.ts.map +1 -1
  325. package/build/component/generator/templates/templateGenerator.js +4 -6
  326. package/build/component/generator/templates/templateGenerator.js.map +1 -1
  327. package/build/component/generator/templates/templateNames.d.ts +2 -0
  328. package/build/component/generator/templates/templateNames.d.ts.map +1 -1
  329. package/build/component/generator/templates/templateNames.js +112 -109
  330. package/build/component/generator/templates/templateNames.js.map +1 -1
  331. package/build/component/generator/templates/templateReplaceMap.js +9 -9
  332. package/build/component/generator/templates/templateReplaceMap.js.map +1 -1
  333. package/build/component/generator/utils.d.ts +4 -12
  334. package/build/component/generator/utils.d.ts.map +1 -1
  335. package/build/component/generator/utils.js +48 -79
  336. package/build/component/generator/utils.js.map +1 -1
  337. package/build/{common → component}/local/constants.d.ts +1 -0
  338. package/build/component/local/constants.d.ts.map +1 -0
  339. package/build/{common → component}/local/constants.js +1 -0
  340. package/build/component/local/constants.js.map +1 -0
  341. package/build/component/local/index.d.ts.map +1 -0
  342. package/build/component/local/index.js.map +1 -0
  343. package/build/component/local/localCertificateManager.d.ts.map +1 -0
  344. package/build/{common → component}/local/localCertificateManager.js +2 -2
  345. package/build/component/local/localCertificateManager.js.map +1 -0
  346. package/build/component/local/localEnvManager.d.ts.map +1 -0
  347. package/build/component/local/localEnvManager.js.map +1 -0
  348. package/build/component/local/localTelemetryReporter.d.ts.map +1 -0
  349. package/build/{common → component}/local/localTelemetryReporter.js +1 -1
  350. package/build/component/local/localTelemetryReporter.js.map +1 -0
  351. package/build/component/local/npmLogHelper.d.ts.map +1 -0
  352. package/build/component/local/npmLogHelper.js.map +1 -0
  353. package/build/component/local/packageJsonHelper.d.ts.map +1 -0
  354. package/build/component/local/packageJsonHelper.js.map +1 -0
  355. package/build/component/local/portChecker.d.ts.map +1 -0
  356. package/build/{common → component}/local/portChecker.js +2 -2
  357. package/build/component/local/portChecker.js.map +1 -0
  358. package/build/component/local/process.d.ts.map +1 -0
  359. package/build/component/local/process.js.map +1 -0
  360. package/build/component/local/taskDefinition.d.ts.map +1 -0
  361. package/build/{common → component}/local/taskDefinition.js +3 -3
  362. package/build/component/local/taskDefinition.js.map +1 -0
  363. package/build/component/m365/constants.d.ts.map +1 -0
  364. package/build/component/m365/constants.js.map +1 -0
  365. package/build/component/m365/errors.d.ts.map +1 -0
  366. package/build/{common → component}/m365/errors.js +1 -1
  367. package/build/component/m365/errors.js.map +1 -0
  368. package/build/{common → component}/m365/launchHelper.d.ts +1 -1
  369. package/build/component/m365/launchHelper.d.ts.map +1 -0
  370. package/build/{common → component}/m365/launchHelper.js +13 -13
  371. package/build/component/m365/launchHelper.js.map +1 -0
  372. package/build/component/m365/packageService.d.ts.map +1 -0
  373. package/build/{common → component}/m365/packageService.js +12 -12
  374. package/build/component/m365/packageService.js.map +1 -0
  375. package/build/component/m365/serviceConstant.d.ts +3 -0
  376. package/build/component/m365/serviceConstant.d.ts.map +1 -0
  377. package/build/component/m365/serviceConstant.js +8 -0
  378. package/build/component/m365/serviceConstant.js.map +1 -0
  379. package/build/component/middleware/actionExecutionMW.d.ts +1 -1
  380. package/build/component/middleware/actionExecutionMW.d.ts.map +1 -1
  381. package/build/component/middleware/actionExecutionMW.js +9 -9
  382. package/build/component/middleware/actionExecutionMW.js.map +1 -1
  383. package/build/component/middleware/envMW.js +4 -4
  384. package/build/component/middleware/envMW.js.map +1 -1
  385. package/build/component/middleware/questionMW.js +1 -1
  386. package/build/component/middleware/questionMW.js.map +1 -1
  387. package/build/component/migrate.d.ts +32 -0
  388. package/build/component/migrate.d.ts.map +1 -1
  389. package/build/component/migrate.js +109 -32
  390. package/build/component/migrate.js.map +1 -1
  391. package/build/component/provisionUtils.d.ts.map +1 -1
  392. package/build/component/provisionUtils.js +5 -6
  393. package/build/component/provisionUtils.js.map +1 -1
  394. package/build/component/resource/botService/appStudio/appStudioClient.d.ts.map +1 -1
  395. package/build/component/resource/botService/appStudio/appStudioClient.js +12 -11
  396. package/build/component/resource/botService/appStudio/appStudioClient.js.map +1 -1
  397. package/build/component/resource/botService/botRegistration/botFrameworkRegistration.d.ts +1 -1
  398. package/build/component/resource/botService/botRegistration/botFrameworkRegistration.d.ts.map +1 -1
  399. package/build/component/resource/botService/botRegistration/botFrameworkRegistration.js +9 -6
  400. package/build/component/resource/botService/botRegistration/botFrameworkRegistration.js.map +1 -1
  401. package/build/component/resource/botService/constants.d.ts +0 -13
  402. package/build/component/resource/botService/constants.d.ts.map +1 -1
  403. package/build/component/resource/botService/constants.js +1 -15
  404. package/build/component/resource/botService/constants.js.map +1 -1
  405. package/build/component/telemetry.d.ts.map +1 -1
  406. package/build/component/telemetry.js +6 -7
  407. package/build/component/telemetry.js.map +1 -1
  408. package/build/component/utils/ResourceGroupHelper.d.ts +10 -2
  409. package/build/component/utils/ResourceGroupHelper.d.ts.map +1 -1
  410. package/build/component/utils/ResourceGroupHelper.js +135 -42
  411. package/build/component/utils/ResourceGroupHelper.js.map +1 -1
  412. package/build/component/utils/charsetUtils.d.ts +1 -1
  413. package/build/component/utils/charsetUtils.d.ts.map +1 -1
  414. package/build/component/utils/charsetUtils.js +3 -1
  415. package/build/component/utils/charsetUtils.js.map +1 -1
  416. package/build/component/utils/depsChecker/common.d.ts +1 -3
  417. package/build/component/utils/depsChecker/common.d.ts.map +1 -1
  418. package/build/component/utils/depsChecker/common.js +0 -2
  419. package/build/component/utils/depsChecker/common.js.map +1 -1
  420. package/build/component/utils/envUtil.js +2 -2
  421. package/build/component/utils/envUtil.js.map +1 -1
  422. package/build/component/utils/metadataUtil.js +1 -1
  423. package/build/component/utils/metadataUtil.js.map +1 -1
  424. package/build/component/utils/pathUtils.d.ts.map +1 -1
  425. package/build/component/utils/pathUtils.js +9 -11
  426. package/build/component/utils/pathUtils.js.map +1 -1
  427. package/build/component/utils/settingsUtil.js +1 -1
  428. package/build/component/utils/settingsUtil.js.map +1 -1
  429. package/build/component/utils/teamsFxTelemetryReporter.d.ts.map +1 -1
  430. package/build/component/utils/teamsFxTelemetryReporter.js +6 -9
  431. package/build/component/utils/teamsFxTelemetryReporter.js.map +1 -1
  432. package/build/core/FxCore.d.ts +3 -4
  433. package/build/core/FxCore.d.ts.map +1 -1
  434. package/build/core/FxCore.js +74 -103
  435. package/build/core/FxCore.js.map +1 -1
  436. package/build/core/callback.d.ts +2 -2
  437. package/build/core/callback.d.ts.map +1 -1
  438. package/build/core/callback.js.map +1 -1
  439. package/build/core/collaborator.d.ts.map +1 -1
  440. package/build/core/collaborator.js +9 -11
  441. package/build/core/collaborator.js.map +1 -1
  442. package/build/core/crypto.d.ts.map +1 -1
  443. package/build/core/crypto.js +1 -2
  444. package/build/core/crypto.js.map +1 -1
  445. package/build/core/environmentName.d.ts +0 -1
  446. package/build/core/environmentName.d.ts.map +1 -1
  447. package/build/core/environmentName.js +0 -2
  448. package/build/core/environmentName.js.map +1 -1
  449. package/build/core/middleware/concurrentLocker.d.ts.map +1 -1
  450. package/build/core/middleware/concurrentLocker.js +11 -12
  451. package/build/core/middleware/concurrentLocker.js.map +1 -1
  452. package/build/core/middleware/errorHandler.js +1 -1
  453. package/build/core/middleware/errorHandler.js.map +1 -1
  454. package/build/core/middleware/projectMigratorV3.d.ts +5 -1
  455. package/build/core/middleware/projectMigratorV3.d.ts.map +1 -1
  456. package/build/core/middleware/projectMigratorV3.js +32 -28
  457. package/build/core/middleware/projectMigratorV3.js.map +1 -1
  458. package/build/core/middleware/projectSettingsLoader.js +1 -1
  459. package/build/core/middleware/projectSettingsLoader.js.map +1 -1
  460. package/build/core/middleware/projectVersionChecker.js +5 -5
  461. package/build/core/middleware/projectVersionChecker.js.map +1 -1
  462. package/build/core/middleware/utils/MigrationUtils.js +1 -1
  463. package/build/core/middleware/utils/MigrationUtils.js.map +1 -1
  464. package/build/core/middleware/utils/appYmlGenerator.d.ts +1 -0
  465. package/build/core/middleware/utils/appYmlGenerator.d.ts.map +1 -1
  466. package/build/core/middleware/utils/appYmlGenerator.js +12 -6
  467. package/build/core/middleware/utils/appYmlGenerator.js.map +1 -1
  468. package/build/core/middleware/utils/debug/taskMigrator.js +2 -2
  469. package/build/core/middleware/utils/debug/taskMigrator.js.map +1 -1
  470. package/build/core/middleware/utils/v3MigrationUtils.js +4 -4
  471. package/build/core/middleware/utils/v3MigrationUtils.js.map +1 -1
  472. package/build/core/middleware/videoFilterAppBlocker.d.ts +2 -0
  473. package/build/core/middleware/videoFilterAppBlocker.d.ts.map +1 -1
  474. package/build/core/middleware/videoFilterAppBlocker.js +21 -5
  475. package/build/core/middleware/videoFilterAppBlocker.js.map +1 -1
  476. package/build/core/telemetry.d.ts +0 -5
  477. package/build/core/telemetry.d.ts.map +1 -1
  478. package/build/core/telemetry.js +9 -17
  479. package/build/core/telemetry.js.map +1 -1
  480. package/build/error/common.d.ts +32 -0
  481. package/build/error/common.d.ts.map +1 -1
  482. package/build/error/common.js +101 -2
  483. package/build/error/common.js.map +1 -1
  484. package/build/error/teamsApp.d.ts +3 -0
  485. package/build/error/teamsApp.d.ts.map +1 -1
  486. package/build/error/teamsApp.js +12 -1
  487. package/build/error/teamsApp.js.map +1 -1
  488. package/build/error/yml.js +1 -1
  489. package/build/error/yml.js.map +1 -1
  490. package/build/index.d.ts +56 -36
  491. package/build/index.d.ts.map +1 -1
  492. package/build/index.js +125 -52
  493. package/build/index.js.map +1 -1
  494. package/build/question/constants.d.ts +249 -1
  495. package/build/question/constants.d.ts.map +1 -1
  496. package/build/question/constants.js +1091 -11
  497. package/build/question/constants.js.map +1 -1
  498. package/build/question/create.d.ts +10 -150
  499. package/build/question/create.d.ts.map +1 -1
  500. package/build/question/create.js +277 -1239
  501. package/build/question/create.js.map +1 -1
  502. package/build/question/index.d.ts +1 -3
  503. package/build/question/index.d.ts.map +1 -1
  504. package/build/question/index.js +2 -6
  505. package/build/question/index.js.map +1 -1
  506. package/build/question/inputs/CreateProjectInputs.d.ts +4 -4
  507. package/build/question/inputs/CreateProjectInputs.d.ts.map +1 -1
  508. package/build/question/options/CreateProjectOptions.js +14 -14
  509. package/build/question/options/CreateProjectOptions.js.map +1 -1
  510. package/build/question/other.d.ts +2 -28
  511. package/build/question/other.d.ts.map +1 -1
  512. package/build/question/other.js +66 -272
  513. package/build/question/other.js.map +1 -1
  514. package/package.json +11 -9
  515. package/resource/deps-checker/dotnet-install.ps1 +912 -423
  516. package/resource/deps-checker/dotnet-install.sh +876 -238
  517. package/resource/package.nls.json +7 -22
  518. package/resource/yaml-schema/v1.6/yaml.schema.json +1829 -0
  519. package/resource/yaml-schema/yaml.schema.json +46 -1
  520. package/templates/core/v3Migration/js.ts.app.local.yml +3 -3
  521. package/templates/fallback/common.zip +0 -0
  522. package/templates/fallback/csharp.zip +0 -0
  523. package/templates/fallback/js.zip +0 -0
  524. package/templates/fallback/python.zip +0 -0
  525. package/templates/fallback/ts.zip +0 -0
  526. package/templates/plugins/resource/aad/auth/V3/aad.manifest.template.json +6 -0
  527. package/templates/plugins/resource/aad/manifest/aad.template.json +6 -0
  528. package/templates/plugins/resource/aad/manifest/bot/aad.manifest.template.json +6 -0
  529. package/templates/plugins/resource/aad/manifest/tab/aad.manifest.template.json +6 -0
  530. package/build/common/deps-checker/checkerFactory.d.ts.map +0 -1
  531. package/build/common/deps-checker/checkerFactory.js.map +0 -1
  532. package/build/common/deps-checker/constant/helpLink.d.ts.map +0 -1
  533. package/build/common/deps-checker/constant/helpLink.js.map +0 -1
  534. package/build/common/deps-checker/constant/index.d.ts.map +0 -1
  535. package/build/common/deps-checker/constant/index.js.map +0 -1
  536. package/build/common/deps-checker/constant/message.d.ts.map +0 -1
  537. package/build/common/deps-checker/constant/message.js.map +0 -1
  538. package/build/common/deps-checker/constant/telemetry.d.ts.map +0 -1
  539. package/build/common/deps-checker/constant/telemetry.js.map +0 -1
  540. package/build/common/deps-checker/coreDepsLoggerAdapter.d.ts.map +0 -1
  541. package/build/common/deps-checker/coreDepsLoggerAdapter.js.map +0 -1
  542. package/build/common/deps-checker/coreDepsTelemetryAdapter.d.ts.map +0 -1
  543. package/build/common/deps-checker/coreDepsTelemetryAdapter.js.map +0 -1
  544. package/build/common/deps-checker/depsChecker.d.ts.map +0 -1
  545. package/build/common/deps-checker/depsChecker.js.map +0 -1
  546. package/build/common/deps-checker/depsError.d.ts.map +0 -1
  547. package/build/common/deps-checker/depsError.js.map +0 -1
  548. package/build/common/deps-checker/depsLogger.d.ts.map +0 -1
  549. package/build/common/deps-checker/depsLogger.js.map +0 -1
  550. package/build/common/deps-checker/depsManager.d.ts.map +0 -1
  551. package/build/common/deps-checker/depsManager.js.map +0 -1
  552. package/build/common/deps-checker/depsTelemetry.d.ts.map +0 -1
  553. package/build/common/deps-checker/depsTelemetry.js.map +0 -1
  554. package/build/common/deps-checker/index.d.ts.map +0 -1
  555. package/build/common/deps-checker/index.js.map +0 -1
  556. package/build/common/deps-checker/internal/dotnetChecker.d.ts.map +0 -1
  557. package/build/common/deps-checker/internal/dotnetChecker.js.map +0 -1
  558. package/build/common/deps-checker/internal/funcToolChecker.d.ts.map +0 -1
  559. package/build/common/deps-checker/internal/funcToolChecker.js.map +0 -1
  560. package/build/common/deps-checker/internal/nodeChecker.d.ts.map +0 -1
  561. package/build/common/deps-checker/internal/nodeChecker.js.map +0 -1
  562. package/build/common/deps-checker/internal/testToolChecker.d.ts.map +0 -1
  563. package/build/common/deps-checker/internal/testToolChecker.js.map +0 -1
  564. package/build/common/deps-checker/internal/vxTestAppChecker.d.ts.map +0 -1
  565. package/build/common/deps-checker/internal/vxTestAppChecker.js.map +0 -1
  566. package/build/common/deps-checker/util/cpUtils.d.ts.map +0 -1
  567. package/build/common/deps-checker/util/cpUtils.js.map +0 -1
  568. package/build/common/deps-checker/util/downloadHelper.d.ts.map +0 -1
  569. package/build/common/deps-checker/util/downloadHelper.js.map +0 -1
  570. package/build/common/deps-checker/util/fileHelper.d.ts.map +0 -1
  571. package/build/common/deps-checker/util/fileHelper.js.map +0 -1
  572. package/build/common/deps-checker/util/index.d.ts.map +0 -1
  573. package/build/common/deps-checker/util/index.js.map +0 -1
  574. package/build/common/deps-checker/util/progressIndicator.d.ts.map +0 -1
  575. package/build/common/deps-checker/util/progressIndicator.js.map +0 -1
  576. package/build/common/deps-checker/util/system.d.ts.map +0 -1
  577. package/build/common/deps-checker/util/system.js.map +0 -1
  578. package/build/common/local/constants.d.ts.map +0 -1
  579. package/build/common/local/constants.js.map +0 -1
  580. package/build/common/local/index.d.ts.map +0 -1
  581. package/build/common/local/index.js.map +0 -1
  582. package/build/common/local/localCertificateManager.d.ts.map +0 -1
  583. package/build/common/local/localCertificateManager.js.map +0 -1
  584. package/build/common/local/localEnvManager.d.ts.map +0 -1
  585. package/build/common/local/localEnvManager.js.map +0 -1
  586. package/build/common/local/localTelemetryReporter.d.ts.map +0 -1
  587. package/build/common/local/localTelemetryReporter.js.map +0 -1
  588. package/build/common/local/npmLogHelper.d.ts.map +0 -1
  589. package/build/common/local/npmLogHelper.js.map +0 -1
  590. package/build/common/local/packageJsonHelper.d.ts.map +0 -1
  591. package/build/common/local/packageJsonHelper.js.map +0 -1
  592. package/build/common/local/portChecker.d.ts.map +0 -1
  593. package/build/common/local/portChecker.js.map +0 -1
  594. package/build/common/local/process.d.ts.map +0 -1
  595. package/build/common/local/process.js.map +0 -1
  596. package/build/common/local/taskDefinition.d.ts.map +0 -1
  597. package/build/common/local/taskDefinition.js.map +0 -1
  598. package/build/common/m365/constants.d.ts.map +0 -1
  599. package/build/common/m365/constants.js.map +0 -1
  600. package/build/common/m365/errors.d.ts.map +0 -1
  601. package/build/common/m365/errors.js.map +0 -1
  602. package/build/common/m365/launchHelper.d.ts.map +0 -1
  603. package/build/common/m365/launchHelper.js.map +0 -1
  604. package/build/common/m365/packageService.d.ts.map +0 -1
  605. package/build/common/m365/packageService.js.map +0 -1
  606. package/build/common/m365/serviceConstant.d.ts +0 -3
  607. package/build/common/m365/serviceConstant.d.ts.map +0 -1
  608. package/build/common/m365/serviceConstant.js +0 -8
  609. package/build/common/m365/serviceConstant.js.map +0 -1
  610. package/build/common/projectSettingsHelperV3.d.ts +0 -2
  611. package/build/common/projectSettingsHelperV3.d.ts.map +0 -1
  612. package/build/common/projectSettingsHelperV3.js +0 -15
  613. package/build/common/projectSettingsHelperV3.js.map +0 -1
  614. package/build/component/utils.d.ts +0 -12
  615. package/build/component/utils.d.ts.map +0 -1
  616. package/build/component/utils.js +0 -136
  617. package/build/component/utils.js.map +0 -1
  618. package/build/component/workflow.d.ts +0 -4
  619. package/build/component/workflow.d.ts.map +0 -1
  620. package/build/component/workflow.js +0 -18
  621. package/build/component/workflow.js.map +0 -1
  622. package/build/core/error.d.ts +0 -32
  623. package/build/core/error.d.ts.map +0 -1
  624. package/build/core/error.js +0 -122
  625. package/build/core/error.js.map +0 -1
  626. package/build/core/globalVars.d.ts.map +0 -1
  627. package/build/core/globalVars.js.map +0 -1
  628. package/build/failpoint/index.d.ts +0 -3
  629. package/build/failpoint/index.d.ts.map +0 -1
  630. package/build/failpoint/index.js +0 -11
  631. package/build/failpoint/index.js.map +0 -1
  632. package/build/failpoint/marker.d.ts +0 -13
  633. package/build/failpoint/marker.d.ts.map +0 -1
  634. package/build/failpoint/marker.js +0 -8
  635. package/build/failpoint/marker.js.map +0 -1
  636. package/build/failpoint/runtime.d.ts +0 -12
  637. package/build/failpoint/runtime.d.ts.map +0 -1
  638. package/build/failpoint/runtime.js +0 -67
  639. package/build/failpoint/runtime.js.map +0 -1
  640. package/build/question/questionNames.d.ts +0 -78
  641. package/build/question/questionNames.d.ts.map +0 -1
  642. package/build/question/questionNames.js +0 -85
  643. package/build/question/questionNames.js.map +0 -1
  644. package/build/question/util.d.ts +0 -2
  645. package/build/question/util.d.ts.map +0 -1
  646. package/build/question/util.js +0 -18
  647. package/build/question/util.js.map +0 -1
  648. /package/build/{common → component}/deps-checker/checkerFactory.d.ts +0 -0
  649. /package/build/{common → component}/deps-checker/checkerFactory.js +0 -0
  650. /package/build/{common → component}/deps-checker/constant/index.d.ts +0 -0
  651. /package/build/{common → component}/deps-checker/constant/index.js +0 -0
  652. /package/build/{common → component}/deps-checker/constant/message.d.ts +0 -0
  653. /package/build/{common → component}/deps-checker/constant/telemetry.d.ts +0 -0
  654. /package/build/{common → component}/deps-checker/constant/telemetry.js +0 -0
  655. /package/build/{common → component}/deps-checker/coreDepsLoggerAdapter.d.ts +0 -0
  656. /package/build/{common → component}/deps-checker/coreDepsLoggerAdapter.js +0 -0
  657. /package/build/{common → component}/deps-checker/coreDepsTelemetryAdapter.d.ts +0 -0
  658. /package/build/{common → component}/deps-checker/depsChecker.d.ts +0 -0
  659. /package/build/{common → component}/deps-checker/depsChecker.js +0 -0
  660. /package/build/{common → component}/deps-checker/depsError.d.ts +0 -0
  661. /package/build/{common → component}/deps-checker/depsError.js +0 -0
  662. /package/build/{common → component}/deps-checker/depsLogger.d.ts +0 -0
  663. /package/build/{common → component}/deps-checker/depsLogger.js +0 -0
  664. /package/build/{common → component}/deps-checker/depsManager.d.ts +0 -0
  665. /package/build/{common → component}/deps-checker/depsManager.js +0 -0
  666. /package/build/{common → component}/deps-checker/depsTelemetry.d.ts +0 -0
  667. /package/build/{common → component}/deps-checker/depsTelemetry.js +0 -0
  668. /package/build/{common → component}/deps-checker/index.d.ts +0 -0
  669. /package/build/{common → component}/deps-checker/index.js +0 -0
  670. /package/build/{common → component}/deps-checker/internal/dotnetChecker.d.ts +0 -0
  671. /package/build/{common → component}/deps-checker/internal/funcToolChecker.d.ts +0 -0
  672. /package/build/{common → component}/deps-checker/internal/nodeChecker.d.ts +0 -0
  673. /package/build/{common → component}/deps-checker/internal/nodeChecker.js +0 -0
  674. /package/build/{common → component}/deps-checker/internal/testToolChecker.d.ts +0 -0
  675. /package/build/{common → component}/deps-checker/internal/vxTestAppChecker.d.ts +0 -0
  676. /package/build/{common → component}/deps-checker/util/cpUtils.d.ts +0 -0
  677. /package/build/{common → component}/deps-checker/util/cpUtils.js +0 -0
  678. /package/build/{common → component}/deps-checker/util/downloadHelper.d.ts +0 -0
  679. /package/build/{common → component}/deps-checker/util/downloadHelper.js +0 -0
  680. /package/build/{common → component}/deps-checker/util/fileHelper.d.ts +0 -0
  681. /package/build/{common → component}/deps-checker/util/fileHelper.js +0 -0
  682. /package/build/{common → component}/deps-checker/util/index.d.ts +0 -0
  683. /package/build/{common → component}/deps-checker/util/index.js +0 -0
  684. /package/build/{common → component}/deps-checker/util/progressIndicator.d.ts +0 -0
  685. /package/build/{common → component}/deps-checker/util/progressIndicator.js +0 -0
  686. /package/build/{common → component}/deps-checker/util/system.d.ts +0 -0
  687. /package/build/{common → component}/deps-checker/util/system.js +0 -0
  688. /package/build/{common → component}/local/index.d.ts +0 -0
  689. /package/build/{common → component}/local/index.js +0 -0
  690. /package/build/{common → component}/local/localCertificateManager.d.ts +0 -0
  691. /package/build/{common → component}/local/localEnvManager.d.ts +0 -0
  692. /package/build/{common → component}/local/localEnvManager.js +0 -0
  693. /package/build/{common → component}/local/localTelemetryReporter.d.ts +0 -0
  694. /package/build/{common → component}/local/npmLogHelper.d.ts +0 -0
  695. /package/build/{common → component}/local/npmLogHelper.js +0 -0
  696. /package/build/{common → component}/local/packageJsonHelper.d.ts +0 -0
  697. /package/build/{common → component}/local/packageJsonHelper.js +0 -0
  698. /package/build/{common → component}/local/portChecker.d.ts +0 -0
  699. /package/build/{common → component}/local/process.d.ts +0 -0
  700. /package/build/{common → component}/local/process.js +0 -0
  701. /package/build/{common → component}/local/taskDefinition.d.ts +0 -0
  702. /package/build/{common → component}/m365/constants.d.ts +0 -0
  703. /package/build/{common → component}/m365/constants.js +0 -0
  704. /package/build/{common → component}/m365/errors.d.ts +0 -0
  705. /package/build/{common → component}/m365/packageService.d.ts +0 -0
@@ -24,7 +24,7 @@ exec 3>&1
24
24
  # See if stdout is a terminal
25
25
  if [ -t 1 ] && command -v tput > /dev/null; then
26
26
  # see if it supports colors
27
- ncolors=$(tput colors)
27
+ ncolors=$(tput colors || echo 0)
28
28
  if [ -n "$ncolors" ] && [ $ncolors -ge 8 ]; then
29
29
  bold="$(tput bold || echo)"
30
30
  normal="$(tput sgr0 || echo)"
@@ -135,6 +135,31 @@ get_legacy_os_name_from_platform() {
135
135
  return 1
136
136
  }
137
137
 
138
+ get_legacy_os_name() {
139
+ eval $invocation
140
+
141
+ local uname=$(uname)
142
+ if [ "$uname" = "Darwin" ]; then
143
+ echo "osx"
144
+ return 0
145
+ elif [ -n "$runtime_id" ]; then
146
+ echo $(get_legacy_os_name_from_platform "${runtime_id%-*}" || echo "${runtime_id%-*}")
147
+ return 0
148
+ else
149
+ if [ -e /etc/os-release ]; then
150
+ . /etc/os-release
151
+ os=$(get_legacy_os_name_from_platform "$ID${VERSION_ID:+.${VERSION_ID}}" || echo "")
152
+ if [ -n "$os" ]; then
153
+ echo "$os"
154
+ return 0
155
+ fi
156
+ fi
157
+ fi
158
+
159
+ say_verbose "Distribution specific OS name and version could not be detected: UName = $uname"
160
+ return 1
161
+ }
162
+
138
163
  get_linux_platform_name() {
139
164
  eval $invocation
140
165
 
@@ -174,8 +199,8 @@ get_current_os_name() {
174
199
  echo "freebsd"
175
200
  return 0
176
201
  elif [ "$uname" = "Linux" ]; then
177
- local linux_platform_name
178
- linux_platform_name="$(get_linux_platform_name)" || { echo "linux" && return 0 ; }
202
+ local linux_platform_name=""
203
+ linux_platform_name="$(get_linux_platform_name)" || true
179
204
 
180
205
  if [ "$linux_platform_name" = "rhel.6" ]; then
181
206
  echo $linux_platform_name
@@ -196,39 +221,13 @@ get_current_os_name() {
196
221
  return 1
197
222
  }
198
223
 
199
- get_legacy_os_name() {
200
- eval $invocation
201
-
202
- local uname=$(uname)
203
- if [ "$uname" = "Darwin" ]; then
204
- echo "osx"
205
- return 0
206
- elif [ -n "$runtime_id" ]; then
207
- echo $(get_legacy_os_name_from_platform "${runtime_id%-*}" || echo "${runtime_id%-*}")
208
- return 0
209
- else
210
- if [ -e /etc/os-release ]; then
211
- . /etc/os-release
212
- os=$(get_legacy_os_name_from_platform "$ID${VERSION_ID:+.${VERSION_ID}}" || echo "")
213
- if [ -n "$os" ]; then
214
- echo "$os"
215
- return 0
216
- fi
217
- fi
218
- fi
219
-
220
- say_verbose "Distribution specific OS name and version could not be detected: UName = $uname"
221
- return 1
222
- }
223
-
224
224
  machine_has() {
225
225
  eval $invocation
226
226
 
227
- hash "$1" > /dev/null 2>&1
227
+ command -v "$1" > /dev/null 2>&1
228
228
  return $?
229
229
  }
230
230
 
231
-
232
231
  check_min_reqs() {
233
232
  local hasMinimum=false
234
233
  if machine_has "curl"; then
@@ -299,14 +298,35 @@ get_machine_architecture() {
299
298
  if command -v uname > /dev/null; then
300
299
  CPUName=$(uname -m)
301
300
  case $CPUName in
301
+ armv1*|armv2*|armv3*|armv4*|armv5*|armv6*)
302
+ echo "armv6-or-below"
303
+ return 0
304
+ ;;
302
305
  armv*l)
303
306
  echo "arm"
304
307
  return 0
305
308
  ;;
306
309
  aarch64|arm64)
310
+ if [ "$(getconf LONG_BIT)" -lt 64 ]; then
311
+ # This is 32-bit OS running on 64-bit CPU (for example Raspberry Pi OS)
312
+ echo "arm"
313
+ return 0
314
+ fi
307
315
  echo "arm64"
308
316
  return 0
309
317
  ;;
318
+ s390x)
319
+ echo "s390x"
320
+ return 0
321
+ ;;
322
+ ppc64le)
323
+ echo "ppc64le"
324
+ return 0
325
+ ;;
326
+ loongarch64)
327
+ echo "loongarch64"
328
+ return 0
329
+ ;;
310
330
  esac
311
331
  fi
312
332
 
@@ -321,11 +341,19 @@ get_normalized_architecture_from_architecture() {
321
341
  eval $invocation
322
342
 
323
343
  local architecture="$(to_lowercase "$1")"
344
+
345
+ if [[ $architecture == \<auto\> ]]; then
346
+ machine_architecture="$(get_machine_architecture)"
347
+ if [[ "$machine_architecture" == "armv6-or-below" ]]; then
348
+ say_err "Architecture \`$machine_architecture\` not supported. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues"
349
+ return 1
350
+ fi
351
+
352
+ echo $machine_architecture
353
+ return 0
354
+ fi
355
+
324
356
  case "$architecture" in
325
- \<auto\>)
326
- echo "$(get_normalized_architecture_from_architecture "$(get_machine_architecture)")"
327
- return 0
328
- ;;
329
357
  amd64|x64)
330
358
  echo "x64"
331
359
  return 0
@@ -338,12 +366,66 @@ get_normalized_architecture_from_architecture() {
338
366
  echo "arm64"
339
367
  return 0
340
368
  ;;
369
+ s390x)
370
+ echo "s390x"
371
+ return 0
372
+ ;;
373
+ ppc64le)
374
+ echo "ppc64le"
375
+ return 0
376
+ ;;
377
+ loongarch64)
378
+ echo "loongarch64"
379
+ return 0
380
+ ;;
341
381
  esac
342
382
 
343
383
  say_err "Architecture \`$architecture\` not supported. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues"
344
384
  return 1
345
385
  }
346
386
 
387
+ # args:
388
+ # version - $1
389
+ # channel - $2
390
+ # architecture - $3
391
+ get_normalized_architecture_for_specific_sdk_version() {
392
+ eval $invocation
393
+
394
+ local is_version_support_arm64="$(is_arm64_supported "$1")"
395
+ local is_channel_support_arm64="$(is_arm64_supported "$2")"
396
+ local architecture="$3";
397
+ local osname="$(get_current_os_name)"
398
+
399
+ if [ "$osname" == "osx" ] && [ "$architecture" == "arm64" ] && { [ "$is_version_support_arm64" = false ] || [ "$is_channel_support_arm64" = false ]; }; then
400
+ #check if rosetta is installed
401
+ if [ "$(/usr/bin/pgrep oahd >/dev/null 2>&1;echo $?)" -eq 0 ]; then
402
+ say_verbose "Changing user architecture from '$architecture' to 'x64' because .NET SDKs prior to version 6.0 do not support arm64."
403
+ echo "x64"
404
+ return 0;
405
+ else
406
+ say_err "Architecture \`$architecture\` is not supported for .NET SDK version \`$version\`. Please install Rosetta to allow emulation of the \`$architecture\` .NET SDK on this platform"
407
+ return 1
408
+ fi
409
+ fi
410
+
411
+ echo "$architecture"
412
+ return 0
413
+ }
414
+
415
+ # args:
416
+ # version or channel - $1
417
+ is_arm64_supported() {
418
+ #any channel or version that starts with the specified versions
419
+ case "$1" in
420
+ ( "1"* | "2"* | "3"* | "4"* | "5"*)
421
+ echo false
422
+ return 0
423
+ esac
424
+
425
+ echo true
426
+ return 0
427
+ }
428
+
347
429
  # args:
348
430
  # user_defined_os - $1
349
431
  get_normalized_os() {
@@ -356,8 +438,13 @@ get_normalized_os() {
356
438
  echo "$osname"
357
439
  return 0
358
440
  ;;
441
+ macos)
442
+ osname='osx'
443
+ echo "$osname"
444
+ return 0
445
+ ;;
359
446
  *)
360
- say_err "'$user_defined_os' is not a supported value for --os option, supported values are: osx, linux, linux-musl, freebsd, rhel.6. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues."
447
+ say_err "'$user_defined_os' is not a supported value for --os option, supported values are: osx, macos, linux, linux-musl, freebsd, rhel.6. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues."
361
448
  return 1
362
449
  ;;
363
450
  esac
@@ -368,6 +455,88 @@ get_normalized_os() {
368
455
  return 0
369
456
  }
370
457
 
458
+ # args:
459
+ # quality - $1
460
+ get_normalized_quality() {
461
+ eval $invocation
462
+
463
+ local quality="$(to_lowercase "$1")"
464
+ if [ ! -z "$quality" ]; then
465
+ case "$quality" in
466
+ daily | signed | validated | preview)
467
+ echo "$quality"
468
+ return 0
469
+ ;;
470
+ ga)
471
+ #ga quality is available without specifying quality, so normalizing it to empty
472
+ return 0
473
+ ;;
474
+ *)
475
+ say_err "'$quality' is not a supported value for --quality option. Supported values are: daily, signed, validated, preview, ga. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues."
476
+ return 1
477
+ ;;
478
+ esac
479
+ fi
480
+ return 0
481
+ }
482
+
483
+ # args:
484
+ # channel - $1
485
+ get_normalized_channel() {
486
+ eval $invocation
487
+
488
+ local channel="$(to_lowercase "$1")"
489
+
490
+ if [[ $channel == current ]]; then
491
+ say_warning 'Value "Current" is deprecated for -Channel option. Use "STS" instead.'
492
+ fi
493
+
494
+ if [[ $channel == release/* ]]; then
495
+ say_warning 'Using branch name with -Channel option is no longer supported with newer releases. Use -Quality option with a channel in X.Y format instead.';
496
+ fi
497
+
498
+ if [ ! -z "$channel" ]; then
499
+ case "$channel" in
500
+ lts)
501
+ echo "LTS"
502
+ return 0
503
+ ;;
504
+ sts)
505
+ echo "STS"
506
+ return 0
507
+ ;;
508
+ current)
509
+ echo "STS"
510
+ return 0
511
+ ;;
512
+ *)
513
+ echo "$channel"
514
+ return 0
515
+ ;;
516
+ esac
517
+ fi
518
+
519
+ return 0
520
+ }
521
+
522
+ # args:
523
+ # runtime - $1
524
+ get_normalized_product() {
525
+ eval $invocation
526
+
527
+ local product=""
528
+ local runtime="$(to_lowercase "$1")"
529
+ if [[ "$runtime" == "dotnet" ]]; then
530
+ product="dotnet-runtime"
531
+ elif [[ "$runtime" == "aspnetcore" ]]; then
532
+ product="aspnetcore-runtime"
533
+ elif [ -z "$runtime" ]; then
534
+ product="dotnet-sdk"
535
+ fi
536
+ echo "$product"
537
+ return 0
538
+ }
539
+
371
540
  # The version text returned from the feeds is a 1-line or 2-line string:
372
541
  # For the SDK and the dotnet runtime (2 lines):
373
542
  # Line 1: # commit_hash
@@ -377,7 +546,7 @@ get_normalized_os() {
377
546
 
378
547
  # args:
379
548
  # version_text - stdin
380
- get_version_from_version_info() {
549
+ get_version_from_latestversion_file_content() {
381
550
  eval $invocation
382
551
 
383
552
  cat | tail -n 1 | sed 's/\r$//'
@@ -405,11 +574,45 @@ is_dotnet_package_installed() {
405
574
  fi
406
575
  }
407
576
 
577
+ # args:
578
+ # downloaded file - $1
579
+ # remote_file_size - $2
580
+ validate_remote_local_file_sizes()
581
+ {
582
+ eval $invocation
583
+
584
+ local downloaded_file="$1"
585
+ local remote_file_size="$2"
586
+ local file_size=''
587
+
588
+ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
589
+ file_size="$(stat -c '%s' "$downloaded_file")"
590
+ elif [[ "$OSTYPE" == "darwin"* ]]; then
591
+ # hardcode in order to avoid conflicts with GNU stat
592
+ file_size="$(/usr/bin/stat -f '%z' "$downloaded_file")"
593
+ fi
594
+
595
+ if [ -n "$file_size" ]; then
596
+ say "Downloaded file size is $file_size bytes."
597
+
598
+ if [ -n "$remote_file_size" ] && [ -n "$file_size" ]; then
599
+ if [ "$remote_file_size" -ne "$file_size" ]; then
600
+ say "The remote and local file sizes are not equal. The remote file size is $remote_file_size bytes and the local size is $file_size bytes. The local package may be corrupted."
601
+ else
602
+ say "The remote and local file sizes are equal."
603
+ fi
604
+ fi
605
+
606
+ else
607
+ say "Either downloaded or local package size can not be measured. One of them may be corrupted."
608
+ fi
609
+ }
610
+
408
611
  # args:
409
612
  # azure_feed - $1
410
613
  # channel - $2
411
614
  # normalized_architecture - $3
412
- get_latest_version_info() {
615
+ get_version_from_latestversion_file() {
413
616
  eval $invocation
414
617
 
415
618
  local azure_feed="$1"
@@ -418,24 +621,24 @@ get_latest_version_info() {
418
621
 
419
622
  local version_file_url=null
420
623
  if [[ "$runtime" == "dotnet" ]]; then
421
- version_file_url="$uncached_feed/Runtime/$channel/latest.version"
624
+ version_file_url="$azure_feed/Runtime/$channel/latest.version"
422
625
  elif [[ "$runtime" == "aspnetcore" ]]; then
423
- version_file_url="$uncached_feed/aspnetcore/Runtime/$channel/latest.version"
626
+ version_file_url="$azure_feed/aspnetcore/Runtime/$channel/latest.version"
424
627
  elif [ -z "$runtime" ]; then
425
- version_file_url="$uncached_feed/Sdk/$channel/latest.version"
628
+ version_file_url="$azure_feed/Sdk/$channel/latest.version"
426
629
  else
427
630
  say_err "Invalid value for \$runtime"
428
631
  return 1
429
632
  fi
430
- say_verbose "get_latest_version_info: latest url: $version_file_url"
633
+ say_verbose "get_version_from_latestversion_file: latest url: $version_file_url"
431
634
 
432
- download "$version_file_url"
433
- return $?
635
+ download "$version_file_url" || return $?
636
+ return 0
434
637
  }
435
638
 
436
639
  # args:
437
640
  # json_file - $1
438
- parse_jsonfile_for_version() {
641
+ parse_globaljson_file_for_version() {
439
642
  eval $invocation
440
643
 
441
644
  local json_file="$1"
@@ -444,7 +647,7 @@ parse_jsonfile_for_version() {
444
647
  return 1
445
648
  fi
446
649
 
447
- sdk_section=$(cat $json_file | awk '/"sdk"/,/}/')
650
+ sdk_section=$(cat $json_file | tr -d "\r" | awk '/"sdk"/,/}/')
448
651
  if [ -z "$sdk_section" ]; then
449
652
  say_err "Unable to parse the SDK node in \`$json_file\`"
450
653
  return 1
@@ -491,9 +694,9 @@ get_specific_version_from_version() {
491
694
  if [ -z "$json_file" ]; then
492
695
  if [[ "$version" == "latest" ]]; then
493
696
  local version_info
494
- version_info="$(get_latest_version_info "$azure_feed" "$channel" "$normalized_architecture" false)" || return 1
697
+ version_info="$(get_version_from_latestversion_file "$azure_feed" "$channel" "$normalized_architecture" false)" || return 1
495
698
  say_verbose "get_specific_version_from_version: version_info=$version_info"
496
- echo "$version_info" | get_version_from_version_info
699
+ echo "$version_info" | get_version_from_latestversion_file_content
497
700
  return 0
498
701
  else
499
702
  echo "$version"
@@ -501,7 +704,7 @@ get_specific_version_from_version() {
501
704
  fi
502
705
  else
503
706
  local version_info
504
- version_info="$(parse_jsonfile_for_version "$json_file")" || return 1
707
+ version_info="$(parse_globaljson_file_for_version "$json_file")" || return 1
505
708
  echo "$version_info"
506
709
  return 0
507
710
  fi
@@ -541,43 +744,133 @@ construct_download_link() {
541
744
  # args:
542
745
  # azure_feed - $1
543
746
  # specific_version - $2
747
+ # download link - $3 (optional)
544
748
  get_specific_product_version() {
545
749
  # If we find a 'productVersion.txt' at the root of any folder, we'll use its contents
546
750
  # to resolve the version of what's in the folder, superseding the specified version.
751
+ # if 'productVersion.txt' is missing but download link is already available, product version will be taken from download link
547
752
  eval $invocation
548
753
 
549
754
  local azure_feed="$1"
550
755
  local specific_version="${2//[$'\t\r\n']}"
551
- local specific_product_version=$specific_version
552
-
553
- local download_link=null
554
- if [[ "$runtime" == "dotnet" ]]; then
555
- download_link="$azure_feed/Runtime/$specific_version/productVersion.txt${feed_credential}"
556
- elif [[ "$runtime" == "aspnetcore" ]]; then
557
- download_link="$azure_feed/aspnetcore/Runtime/$specific_version/productVersion.txt${feed_credential}"
558
- elif [ -z "$runtime" ]; then
559
- download_link="$azure_feed/Sdk/$specific_version/productVersion.txt${feed_credential}"
560
- else
561
- return 1
756
+ local package_download_link=""
757
+ if [ $# -gt 2 ]; then
758
+ local package_download_link="$3"
562
759
  fi
760
+ local specific_product_version=null
761
+
762
+ # Try to get the version number, using the productVersion.txt file located next to the installer file.
763
+ local download_links=($(get_specific_product_version_url "$azure_feed" "$specific_version" true "$package_download_link")
764
+ $(get_specific_product_version_url "$azure_feed" "$specific_version" false "$package_download_link"))
563
765
 
564
- if machine_has "curl"
565
- then
566
- specific_product_version=$(curl -s --fail "$download_link")
567
- if [ $? -ne 0 ]
766
+ for download_link in "${download_links[@]}"
767
+ do
768
+ say_verbose "Checking for the existence of $download_link"
769
+
770
+ if machine_has "curl"
568
771
  then
569
- specific_product_version=$specific_version
570
- fi
571
- elif machine_has "wget"
572
- then
573
- specific_product_version=$(wget -qO- "$download_link")
574
- if [ $? -ne 0 ]
772
+ if ! specific_product_version=$(curl -s --fail "${download_link}${feed_credential}" 2>&1); then
773
+ continue
774
+ else
775
+ echo "${specific_product_version//[$'\t\r\n']}"
776
+ return 0
777
+ fi
778
+
779
+ elif machine_has "wget"
575
780
  then
576
- specific_product_version=$specific_version
781
+ specific_product_version=$(wget -qO- "${download_link}${feed_credential}" 2>&1)
782
+ if [ $? = 0 ]; then
783
+ echo "${specific_product_version//[$'\t\r\n']}"
784
+ return 0
785
+ fi
577
786
  fi
787
+ done
788
+
789
+ # Getting the version number with productVersion.txt has failed. Try parsing the download link for a version number.
790
+ say_verbose "Failed to get the version using productVersion.txt file. Download link will be parsed instead."
791
+ specific_product_version="$(get_product_specific_version_from_download_link "$package_download_link" "$specific_version")"
792
+ echo "${specific_product_version//[$'\t\r\n']}"
793
+ return 0
794
+ }
795
+
796
+ # args:
797
+ # azure_feed - $1
798
+ # specific_version - $2
799
+ # is_flattened - $3
800
+ # download link - $4 (optional)
801
+ get_specific_product_version_url() {
802
+ eval $invocation
803
+
804
+ local azure_feed="$1"
805
+ local specific_version="$2"
806
+ local is_flattened="$3"
807
+ local package_download_link=""
808
+ if [ $# -gt 3 ]; then
809
+ local package_download_link="$4"
578
810
  fi
579
- specific_product_version="${specific_product_version//[$'\t\r\n']}"
580
811
 
812
+ local pvFileName="productVersion.txt"
813
+ if [ "$is_flattened" = true ]; then
814
+ if [ -z "$runtime" ]; then
815
+ pvFileName="sdk-productVersion.txt"
816
+ elif [[ "$runtime" == "dotnet" ]]; then
817
+ pvFileName="runtime-productVersion.txt"
818
+ else
819
+ pvFileName="$runtime-productVersion.txt"
820
+ fi
821
+ fi
822
+
823
+ local download_link=null
824
+
825
+ if [ -z "$package_download_link" ]; then
826
+ if [[ "$runtime" == "dotnet" ]]; then
827
+ download_link="$azure_feed/Runtime/$specific_version/${pvFileName}"
828
+ elif [[ "$runtime" == "aspnetcore" ]]; then
829
+ download_link="$azure_feed/aspnetcore/Runtime/$specific_version/${pvFileName}"
830
+ elif [ -z "$runtime" ]; then
831
+ download_link="$azure_feed/Sdk/$specific_version/${pvFileName}"
832
+ else
833
+ return 1
834
+ fi
835
+ else
836
+ download_link="${package_download_link%/*}/${pvFileName}"
837
+ fi
838
+
839
+ say_verbose "Constructed productVersion link: $download_link"
840
+ echo "$download_link"
841
+ return 0
842
+ }
843
+
844
+ # args:
845
+ # download link - $1
846
+ # specific version - $2
847
+ get_product_specific_version_from_download_link()
848
+ {
849
+ eval $invocation
850
+
851
+ local download_link="$1"
852
+ local specific_version="$2"
853
+ local specific_product_version=""
854
+
855
+ if [ -z "$download_link" ]; then
856
+ echo "$specific_version"
857
+ return 0
858
+ fi
859
+
860
+ #get filename
861
+ filename="${download_link##*/}"
862
+
863
+ #product specific version follows the product name
864
+ #for filename 'dotnet-sdk-3.1.404-linux-x64.tar.gz': the product version is 3.1.404
865
+ IFS='-'
866
+ read -ra filename_elems <<< "$filename"
867
+ count=${#filename_elems[@]}
868
+ if [[ "$count" -gt 2 ]]; then
869
+ specific_product_version="${filename_elems[2]}"
870
+ else
871
+ specific_product_version=$specific_version
872
+ fi
873
+ unset IFS;
581
874
  echo "$specific_product_version"
582
875
  return 0
583
876
  }
@@ -683,14 +976,39 @@ copy_files_or_dirs_from_list() {
683
976
  done
684
977
  }
685
978
 
979
+ # args:
980
+ # zip_uri - $1
981
+ get_remote_file_size() {
982
+ local zip_uri="$1"
983
+
984
+ if machine_has "curl"; then
985
+ file_size=$(curl -sI "$zip_uri" | grep -i content-length | awk '{ num = $2 + 0; print num }')
986
+ elif machine_has "wget"; then
987
+ file_size=$(wget --spider --server-response -O /dev/null "$zip_uri" 2>&1 | grep -i 'Content-Length:' | awk '{ num = $2 + 0; print num }')
988
+ else
989
+ say "Neither curl nor wget is available on this system."
990
+ return
991
+ fi
992
+
993
+ if [ -n "$file_size" ]; then
994
+ say "Remote file $zip_uri size is $file_size bytes."
995
+ echo "$file_size"
996
+ else
997
+ say_verbose "Content-Length header was not extracted for $zip_uri."
998
+ echo ""
999
+ fi
1000
+ }
1001
+
686
1002
  # args:
687
1003
  # zip_path - $1
688
1004
  # out_path - $2
1005
+ # remote_file_size - $3
689
1006
  extract_dotnet_package() {
690
1007
  eval $invocation
691
1008
 
692
1009
  local zip_path="$1"
693
1010
  local out_path="$2"
1011
+ local remote_file_size="$3"
694
1012
 
695
1013
  local temp_out_path="$(mktemp -d "$temporary_file_template")"
696
1014
 
@@ -700,9 +1018,13 @@ extract_dotnet_package() {
700
1018
  local folders_with_version_regex='^.*/[0-9]+\.[0-9]+[^/]+/'
701
1019
  find "$temp_out_path" -type f | grep -Eo "$folders_with_version_regex" | sort | copy_files_or_dirs_from_list "$temp_out_path" "$out_path" false
702
1020
  find "$temp_out_path" -type f | grep -Ev "$folders_with_version_regex" | copy_files_or_dirs_from_list "$temp_out_path" "$out_path" "$override_non_versioned_files"
703
-
1021
+
1022
+ validate_remote_local_file_sizes "$zip_path" "$remote_file_size"
1023
+
704
1024
  rm -rf "$temp_out_path"
705
- rm -f "$zip_path" && say_verbose "Temporary zip file $zip_path was removed"
1025
+ if [ -z ${keep_zip+x} ]; then
1026
+ rm -f "$zip_path" && say_verbose "Temporary archive file $zip_path was removed"
1027
+ fi
706
1028
 
707
1029
  if [ "$failed" = true ]; then
708
1030
  say_err "Extraction failed"
@@ -711,22 +1033,75 @@ extract_dotnet_package() {
711
1033
  return 0
712
1034
  }
713
1035
 
1036
+ # args:
1037
+ # remote_path - $1
1038
+ # disable_feed_credential - $2
1039
+ get_http_header()
1040
+ {
1041
+ eval $invocation
1042
+ local remote_path="$1"
1043
+ local disable_feed_credential="$2"
1044
+
1045
+ local failed=false
1046
+ local response
1047
+ if machine_has "curl"; then
1048
+ get_http_header_curl $remote_path $disable_feed_credential || failed=true
1049
+ elif machine_has "wget"; then
1050
+ get_http_header_wget $remote_path $disable_feed_credential || failed=true
1051
+ else
1052
+ failed=true
1053
+ fi
1054
+ if [ "$failed" = true ]; then
1055
+ say_verbose "Failed to get HTTP header: '$remote_path'."
1056
+ return 1
1057
+ fi
1058
+ return 0
1059
+ }
1060
+
1061
+ # args:
1062
+ # remote_path - $1
1063
+ # disable_feed_credential - $2
714
1064
  get_http_header_curl() {
715
1065
  eval $invocation
716
1066
  local remote_path="$1"
717
- remote_path_with_credential="${remote_path}${feed_credential}"
1067
+ local disable_feed_credential="$2"
1068
+
1069
+ remote_path_with_credential="$remote_path"
1070
+ if [ "$disable_feed_credential" = false ]; then
1071
+ remote_path_with_credential+="$feed_credential"
1072
+ fi
1073
+
718
1074
  curl_options="-I -sSL --retry 5 --retry-delay 2 --connect-timeout 15 "
719
- curl $curl_options "$remote_path_with_credential" || return 1
1075
+ curl $curl_options "$remote_path_with_credential" 2>&1 || return 1
720
1076
  return 0
721
1077
  }
722
1078
 
1079
+ # args:
1080
+ # remote_path - $1
1081
+ # disable_feed_credential - $2
723
1082
  get_http_header_wget() {
724
1083
  eval $invocation
725
1084
  local remote_path="$1"
726
- remote_path_with_credential="${remote_path}${feed_credential}"
727
- wget_options="-q -S --spider --tries 5 --waitretry 2 --connect-timeout 15 "
728
- wget $wget_options "$remote_path_with_credential" 2>&1 || return 1
729
- return 0
1085
+ local disable_feed_credential="$2"
1086
+ local wget_options="-q -S --spider --tries 5 "
1087
+
1088
+ local wget_options_extra=''
1089
+
1090
+ # Test for options that aren't supported on all wget implementations.
1091
+ if [[ $(wget -h 2>&1 | grep -E 'waitretry|connect-timeout') ]]; then
1092
+ wget_options_extra="--waitretry 2 --connect-timeout 15 "
1093
+ else
1094
+ say "wget extra options are unavailable for this environment"
1095
+ fi
1096
+
1097
+ remote_path_with_credential="$remote_path"
1098
+ if [ "$disable_feed_credential" = false ]; then
1099
+ remote_path_with_credential+="$feed_credential"
1100
+ fi
1101
+
1102
+ wget $wget_options $wget_options_extra "$remote_path_with_credential" 2>&1
1103
+
1104
+ return $?
730
1105
  }
731
1106
 
732
1107
  # args:
@@ -763,11 +1138,9 @@ download() {
763
1138
 
764
1139
  say "Download attempt #$attempts has failed: $http_code $download_error_msg"
765
1140
  say "Attempt #$((attempts+1)) will start in $((attempts*10)) seconds."
766
- sleep $((attempts*20))
1141
+ sleep $((attempts*10))
767
1142
  done
768
1143
 
769
-
770
-
771
1144
  if [ "$failed" = true ]; then
772
1145
  say_verbose "Download failed: $remote_path"
773
1146
  return 1
@@ -783,20 +1156,30 @@ downloadcurl() {
783
1156
  local remote_path="$1"
784
1157
  local out_path="${2:-}"
785
1158
  # Append feed_credential as late as possible before calling curl to avoid logging feed_credential
1159
+ # Avoid passing URI with credentials to functions: note, most of them echoing parameters of invocation in verbose output.
786
1160
  local remote_path_with_credential="${remote_path}${feed_credential}"
787
1161
  local curl_options="--retry 20 --retry-delay 2 --connect-timeout 15 -sSL -f --create-dirs "
788
- local failed=false
1162
+ local curl_exit_code=0;
789
1163
  if [ -z "$out_path" ]; then
790
- curl $curl_options "$remote_path_with_credential" || failed=true
1164
+ curl $curl_options "$remote_path_with_credential" 2>&1
1165
+ curl_exit_code=$?
791
1166
  else
792
- curl $curl_options -o "$out_path" "$remote_path_with_credential" || failed=true
1167
+ curl $curl_options -o "$out_path" "$remote_path_with_credential" 2>&1
1168
+ curl_exit_code=$?
793
1169
  fi
794
- if [ "$failed" = true ]; then
795
- local response=$(get_http_header_curl $remote_path_with_credential)
796
- http_code=$( echo "$response" | awk '/^HTTP/{print $2}' | tail -1 )
1170
+
1171
+ if [ $curl_exit_code -gt 0 ]; then
797
1172
  download_error_msg="Unable to download $remote_path."
798
- if [[ $http_code != 2* ]]; then
799
- download_error_msg+=" Returned HTTP status code: $http_code."
1173
+ # Check for curl timeout codes
1174
+ if [[ $curl_exit_code == 7 || $curl_exit_code == 28 ]]; then
1175
+ download_error_msg+=" Failed to reach the server: connection timeout."
1176
+ else
1177
+ local disable_feed_credential=false
1178
+ local response=$(get_http_header_curl $remote_path $disable_feed_credential)
1179
+ http_code=$( echo "$response" | awk '/^HTTP/{print $2}' | tail -1 )
1180
+ if [[ ! -z $http_code && $http_code != 2* ]]; then
1181
+ download_error_msg+=" Returned HTTP status code: $http_code."
1182
+ fi
800
1183
  fi
801
1184
  say_verbose "$download_error_msg"
802
1185
  return 1
@@ -814,64 +1197,314 @@ downloadwget() {
814
1197
  local out_path="${2:-}"
815
1198
  # Append feed_credential as late as possible before calling wget to avoid logging feed_credential
816
1199
  local remote_path_with_credential="${remote_path}${feed_credential}"
817
- local wget_options="--tries 20 --waitretry 2 --connect-timeout 15 "
818
- local failed=false
1200
+ local wget_options="--tries 20 "
1201
+
1202
+ local wget_options_extra=''
1203
+ local wget_result=''
1204
+
1205
+ # Test for options that aren't supported on all wget implementations.
1206
+ if [[ $(wget -h 2>&1 | grep -E 'waitretry|connect-timeout') ]]; then
1207
+ wget_options_extra="--waitretry 2 --connect-timeout 15 "
1208
+ else
1209
+ say "wget extra options are unavailable for this environment"
1210
+ fi
1211
+
819
1212
  if [ -z "$out_path" ]; then
820
- wget -q $wget_options -O - "$remote_path_with_credential" || failed=true
1213
+ wget -q $wget_options $wget_options_extra -O - "$remote_path_with_credential" 2>&1
1214
+ wget_result=$?
821
1215
  else
822
- wget $wget_options -O "$out_path" "$remote_path_with_credential" || failed=true
1216
+ wget $wget_options $wget_options_extra -O "$out_path" "$remote_path_with_credential" 2>&1
1217
+ wget_result=$?
823
1218
  fi
824
- if [ "$failed" = true ]; then
825
- local response=$(get_http_header_wget $remote_path_with_credential)
1219
+
1220
+ if [[ $wget_result != 0 ]]; then
1221
+ local disable_feed_credential=false
1222
+ local response=$(get_http_header_wget $remote_path $disable_feed_credential)
826
1223
  http_code=$( echo "$response" | awk '/^ HTTP/{print $2}' | tail -1 )
827
1224
  download_error_msg="Unable to download $remote_path."
828
- if [[ $http_code != 2* ]]; then
1225
+ if [[ ! -z $http_code && $http_code != 2* ]]; then
829
1226
  download_error_msg+=" Returned HTTP status code: $http_code."
1227
+ # wget exit code 4 stands for network-issue
1228
+ elif [[ $wget_result == 4 ]]; then
1229
+ download_error_msg+=" Failed to reach the server: connection timeout."
830
1230
  fi
831
1231
  say_verbose "$download_error_msg"
832
1232
  return 1
833
1233
  fi
1234
+
834
1235
  return 0
835
1236
  }
836
1237
 
837
- calculate_vars() {
1238
+ get_download_link_from_aka_ms() {
838
1239
  eval $invocation
839
- valid_legacy_download_link=true
840
1240
 
841
- normalized_architecture="$(get_normalized_architecture_from_architecture "$architecture")"
842
- say_verbose "normalized_architecture=$normalized_architecture"
1241
+ #quality is not supported for LTS or STS channel
1242
+ #STS maps to current
1243
+ if [[ ! -z "$normalized_quality" && ("$normalized_channel" == "LTS" || "$normalized_channel" == "STS") ]]; then
1244
+ normalized_quality=""
1245
+ say_warning "Specifying quality for STS or LTS channel is not supported, the quality will be ignored."
1246
+ fi
843
1247
 
844
- normalized_os="$(get_normalized_os "$user_defined_os")"
845
- say_verbose "normalized_os=$normalized_os"
1248
+ say_verbose "Retrieving primary payload URL from aka.ms for channel: '$normalized_channel', quality: '$normalized_quality', product: '$normalized_product', os: '$normalized_os', architecture: '$normalized_architecture'."
846
1249
 
847
- specific_version="$(get_specific_version_from_version "$azure_feed" "$channel" "$normalized_architecture" "$version" "$json_file")"
848
- specific_product_version="$(get_specific_product_version "$azure_feed" "$specific_version")"
849
- say_verbose "specific_version=$specific_version"
850
- if [ -z "$specific_version" ]; then
851
- say_err "Could not resolve version information."
1250
+ #construct aka.ms link
1251
+ aka_ms_link="https://aka.ms/dotnet"
1252
+ if [ "$internal" = true ]; then
1253
+ aka_ms_link="$aka_ms_link/internal"
1254
+ fi
1255
+ aka_ms_link="$aka_ms_link/$normalized_channel"
1256
+ if [[ ! -z "$normalized_quality" ]]; then
1257
+ aka_ms_link="$aka_ms_link/$normalized_quality"
1258
+ fi
1259
+ aka_ms_link="$aka_ms_link/$normalized_product-$normalized_os-$normalized_architecture.tar.gz"
1260
+ say_verbose "Constructed aka.ms link: '$aka_ms_link'."
1261
+
1262
+ #get HTTP response
1263
+ #do not pass credentials as a part of the $aka_ms_link and do not apply credentials in the get_http_header function
1264
+ #otherwise the redirect link would have credentials as well
1265
+ #it would result in applying credentials twice to the resulting link and thus breaking it, and in echoing credentials to the output as a part of redirect link
1266
+ disable_feed_credential=true
1267
+ response="$(get_http_header $aka_ms_link $disable_feed_credential)"
1268
+
1269
+ say_verbose "Received response: $response"
1270
+ # Get results of all the redirects.
1271
+ http_codes=$( echo "$response" | awk '$1 ~ /^HTTP/ {print $2}' )
1272
+ # They all need to be 301, otherwise some links are broken (except for the last, which is not a redirect but 200 or 404).
1273
+ broken_redirects=$( echo "$http_codes" | sed '$d' | grep -v '301' )
1274
+ # The response may end without final code 2xx/4xx/5xx somehow, e.g. network restrictions on www.bing.com causes redirecting to bing.com fails with connection refused.
1275
+ # In this case it should not exclude the last.
1276
+ last_http_code=$( echo "$http_codes" | tail -n 1 )
1277
+ if ! [[ $last_http_code =~ ^(2|4|5)[0-9][0-9]$ ]]; then
1278
+ broken_redirects=$( echo "$http_codes" | grep -v '301' )
1279
+ fi
1280
+
1281
+ # All HTTP codes are 301 (Moved Permanently), the redirect link exists.
1282
+ if [[ -z "$broken_redirects" ]]; then
1283
+ aka_ms_download_link=$( echo "$response" | awk '$1 ~ /^Location/{print $2}' | tail -1 | tr -d '\r')
1284
+
1285
+ if [[ -z "$aka_ms_download_link" ]]; then
1286
+ say_verbose "The aka.ms link '$aka_ms_link' is not valid: failed to get redirect location."
1287
+ return 1
1288
+ fi
1289
+
1290
+ say_verbose "The redirect location retrieved: '$aka_ms_download_link'."
1291
+ return 0
1292
+ else
1293
+ say_verbose "The aka.ms link '$aka_ms_link' is not valid: received HTTP code: $(echo "$broken_redirects" | paste -sd "," -)."
852
1294
  return 1
853
1295
  fi
1296
+ }
1297
+
1298
+ get_feeds_to_use()
1299
+ {
1300
+ feeds=(
1301
+ "https://dotnetcli.azureedge.net/dotnet"
1302
+ "https://dotnetbuilds.azureedge.net/public"
1303
+ )
1304
+
1305
+ if [[ -n "$azure_feed" ]]; then
1306
+ feeds=("$azure_feed")
1307
+ fi
1308
+
1309
+ if [[ "$no_cdn" == "true" ]]; then
1310
+ feeds=(
1311
+ "https://dotnetcli.blob.core.windows.net/dotnet"
1312
+ "https://dotnetbuilds.blob.core.windows.net/public"
1313
+ )
854
1314
 
855
- download_link="$(construct_download_link "$azure_feed" "$channel" "$normalized_architecture" "$specific_version" "$normalized_os")"
1315
+ if [[ -n "$uncached_feed" ]]; then
1316
+ feeds=("$uncached_feed")
1317
+ fi
1318
+ fi
1319
+ }
1320
+
1321
+ # THIS FUNCTION MAY EXIT (if the determined version is already installed).
1322
+ generate_download_links() {
1323
+
1324
+ download_links=()
1325
+ specific_versions=()
1326
+ effective_versions=()
1327
+ link_types=()
1328
+
1329
+ # If generate_akams_links returns false, no fallback to old links. Just terminate.
1330
+ # This function may also 'exit' (if the determined version is already installed).
1331
+ generate_akams_links || return
1332
+
1333
+ # Check other feeds only if we haven't been able to find an aka.ms link.
1334
+ if [[ "${#download_links[@]}" -lt 1 ]]; then
1335
+ for feed in ${feeds[@]}
1336
+ do
1337
+ # generate_regular_links may also 'exit' (if the determined version is already installed).
1338
+ generate_regular_links $feed || return
1339
+ done
1340
+ fi
1341
+
1342
+ if [[ "${#download_links[@]}" -eq 0 ]]; then
1343
+ say_err "Failed to resolve the exact version number."
1344
+ return 1
1345
+ fi
1346
+
1347
+ say_verbose "Generated ${#download_links[@]} links."
1348
+ for link_index in ${!download_links[@]}
1349
+ do
1350
+ say_verbose "Link $link_index: ${link_types[$link_index]}, ${effective_versions[$link_index]}, ${download_links[$link_index]}"
1351
+ done
1352
+ }
1353
+
1354
+ # THIS FUNCTION MAY EXIT (if the determined version is already installed).
1355
+ generate_akams_links() {
1356
+ local valid_aka_ms_link=true;
1357
+
1358
+ normalized_version="$(to_lowercase "$version")"
1359
+ if [[ "$normalized_version" != "latest" ]] && [ -n "$normalized_quality" ]; then
1360
+ say_err "Quality and Version options are not allowed to be specified simultaneously. See https://learn.microsoft.com/dotnet/core/tools/dotnet-install-script#options for details."
1361
+ return 1
1362
+ fi
1363
+
1364
+ if [[ -n "$json_file" || "$normalized_version" != "latest" ]]; then
1365
+ # aka.ms links are not needed when exact version is specified via command or json file
1366
+ return
1367
+ fi
1368
+
1369
+ get_download_link_from_aka_ms || valid_aka_ms_link=false
1370
+
1371
+ if [[ "$valid_aka_ms_link" == true ]]; then
1372
+ say_verbose "Retrieved primary payload URL from aka.ms link: '$aka_ms_download_link'."
1373
+ say_verbose "Downloading using legacy url will not be attempted."
1374
+
1375
+ download_link=$aka_ms_download_link
1376
+
1377
+ #get version from the path
1378
+ IFS='/'
1379
+ read -ra pathElems <<< "$download_link"
1380
+ count=${#pathElems[@]}
1381
+ specific_version="${pathElems[count-2]}"
1382
+ unset IFS;
1383
+ say_verbose "Version: '$specific_version'."
1384
+
1385
+ #Retrieve effective version
1386
+ effective_version="$(get_specific_product_version "$azure_feed" "$specific_version" "$download_link")"
1387
+
1388
+ # Add link info to arrays
1389
+ download_links+=($download_link)
1390
+ specific_versions+=($specific_version)
1391
+ effective_versions+=($effective_version)
1392
+ link_types+=("aka.ms")
1393
+
1394
+ # Check if the SDK version is already installed.
1395
+ if [[ "$dry_run" != true ]] && is_dotnet_package_installed "$install_root" "$asset_relative_path" "$effective_version"; then
1396
+ say "$asset_name with version '$effective_version' is already installed."
1397
+ exit 0
1398
+ fi
1399
+
1400
+ return 0
1401
+ fi
1402
+
1403
+ # if quality is specified - exit with error - there is no fallback approach
1404
+ if [ ! -z "$normalized_quality" ]; then
1405
+ say_err "Failed to locate the latest version in the channel '$normalized_channel' with '$normalized_quality' quality for '$normalized_product', os: '$normalized_os', architecture: '$normalized_architecture'."
1406
+ say_err "Refer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support."
1407
+ return 1
1408
+ fi
1409
+ say_verbose "Falling back to latest.version file approach."
1410
+ }
1411
+
1412
+ # THIS FUNCTION MAY EXIT (if the determined version is already installed)
1413
+ # args:
1414
+ # feed - $1
1415
+ generate_regular_links() {
1416
+ local feed="$1"
1417
+ local valid_legacy_download_link=true
1418
+
1419
+ specific_version=$(get_specific_version_from_version "$feed" "$channel" "$normalized_architecture" "$version" "$json_file") || specific_version='0'
1420
+
1421
+ if [[ "$specific_version" == '0' ]]; then
1422
+ say_verbose "Failed to resolve the specific version number using feed '$feed'"
1423
+ return
1424
+ fi
1425
+
1426
+ effective_version="$(get_specific_product_version "$feed" "$specific_version")"
1427
+ say_verbose "specific_version=$specific_version"
1428
+
1429
+ download_link="$(construct_download_link "$feed" "$channel" "$normalized_architecture" "$specific_version" "$normalized_os")"
856
1430
  say_verbose "Constructed primary named payload URL: $download_link"
857
1431
 
858
- legacy_download_link="$(construct_legacy_download_link "$azure_feed" "$channel" "$normalized_architecture" "$specific_version")" || valid_legacy_download_link=false
1432
+ # Add link info to arrays
1433
+ download_links+=($download_link)
1434
+ specific_versions+=($specific_version)
1435
+ effective_versions+=($effective_version)
1436
+ link_types+=("primary")
1437
+
1438
+ legacy_download_link="$(construct_legacy_download_link "$feed" "$channel" "$normalized_architecture" "$specific_version")" || valid_legacy_download_link=false
859
1439
 
860
1440
  if [ "$valid_legacy_download_link" = true ]; then
861
1441
  say_verbose "Constructed legacy named payload URL: $legacy_download_link"
1442
+
1443
+ download_links+=($legacy_download_link)
1444
+ specific_versions+=($specific_version)
1445
+ effective_versions+=($effective_version)
1446
+ link_types+=("legacy")
862
1447
  else
1448
+ legacy_download_link=""
863
1449
  say_verbose "Cound not construct a legacy_download_link; omitting..."
864
1450
  fi
865
1451
 
866
- install_root="$(resolve_installation_path "$install_dir")"
867
- say_verbose "InstallRoot: $install_root"
1452
+ # Check if the SDK version is already installed.
1453
+ if [[ "$dry_run" != true ]] && is_dotnet_package_installed "$install_root" "$asset_relative_path" "$effective_version"; then
1454
+ say "$asset_name with version '$effective_version' is already installed."
1455
+ exit 0
1456
+ fi
868
1457
  }
869
1458
 
870
- install_dotnet() {
1459
+ print_dry_run() {
1460
+
1461
+ say "Payload URLs:"
1462
+
1463
+ for link_index in "${!download_links[@]}"
1464
+ do
1465
+ say "URL #$link_index - ${link_types[$link_index]}: ${download_links[$link_index]}"
1466
+ done
1467
+
1468
+ resolved_version=${specific_versions[0]}
1469
+ repeatable_command="./$script_name --version "\""$resolved_version"\"" --install-dir "\""$install_root"\"" --architecture "\""$normalized_architecture"\"" --os "\""$normalized_os"\"""
1470
+
1471
+ if [ ! -z "$normalized_quality" ]; then
1472
+ repeatable_command+=" --quality "\""$normalized_quality"\"""
1473
+ fi
1474
+
1475
+ if [[ "$runtime" == "dotnet" ]]; then
1476
+ repeatable_command+=" --runtime "\""dotnet"\"""
1477
+ elif [[ "$runtime" == "aspnetcore" ]]; then
1478
+ repeatable_command+=" --runtime "\""aspnetcore"\"""
1479
+ fi
1480
+
1481
+ repeatable_command+="$non_dynamic_parameters"
1482
+
1483
+ if [ -n "$feed_credential" ]; then
1484
+ repeatable_command+=" --feed-credential "\""<feed_credential>"\"""
1485
+ fi
1486
+
1487
+ say "Repeatable invocation: $repeatable_command"
1488
+ }
1489
+
1490
+ calculate_vars() {
871
1491
  eval $invocation
872
- local download_failed=false
873
- local asset_name=''
874
- local asset_relative_path=''
1492
+
1493
+ script_name=$(basename "$0")
1494
+ normalized_architecture="$(get_normalized_architecture_from_architecture "$architecture")"
1495
+ say_verbose "Normalized architecture: '$normalized_architecture'."
1496
+ normalized_os="$(get_normalized_os "$user_defined_os")"
1497
+ say_verbose "Normalized OS: '$normalized_os'."
1498
+ normalized_quality="$(get_normalized_quality "$quality")"
1499
+ say_verbose "Normalized quality: '$normalized_quality'."
1500
+ normalized_channel="$(get_normalized_channel "$channel")"
1501
+ say_verbose "Normalized channel: '$normalized_channel'."
1502
+ normalized_product="$(get_normalized_product "$runtime")"
1503
+ say_verbose "Normalized product: '$normalized_product'."
1504
+ install_root="$(resolve_installation_path "$install_dir")"
1505
+ say_verbose "InstallRoot: '$install_root'."
1506
+
1507
+ normalized_architecture="$(get_normalized_architecture_for_specific_sdk_version "$version" "$normalized_channel" "$normalized_architecture")"
875
1508
 
876
1509
  if [[ "$runtime" == "dotnet" ]]; then
877
1510
  asset_relative_path="shared/Microsoft.NETCore.App"
@@ -882,89 +1515,60 @@ install_dotnet() {
882
1515
  elif [ -z "$runtime" ]; then
883
1516
  asset_relative_path="sdk"
884
1517
  asset_name=".NET Core SDK"
885
- else
886
- say_err "Invalid value for \$runtime"
887
- return 1
888
1518
  fi
889
1519
 
890
- # Check if the SDK version is already installed.
891
- if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$specific_version"; then
892
- say "$asset_name version $specific_version is already installed."
893
- return 0
894
- fi
895
-
896
- mkdir -p "$install_root"
897
- zip_path="$(mktemp "$temporary_file_template")"
898
- say_verbose "Zip path: $zip_path"
899
-
900
-
901
- # Failures are normal in the non-legacy case for ultimately legacy downloads.
902
- # Do not output to stderr, since output to stderr is considered an error.
903
- say "Downloading primary link $download_link"
904
-
905
- # The download function will set variables $http_code and $download_error_msg in case of failure.
906
- download "$download_link" "$zip_path" 2>&1 || download_failed=true
1520
+ get_feeds_to_use
1521
+ }
907
1522
 
908
- # if the download fails, download the legacy_download_link
909
- if [ "$download_failed" = true ]; then
910
- primary_path_http_code="$http_code"; primary_path_download_error_msg="$download_error_msg"
911
- case $primary_path_http_code in
912
- 404)
913
- say "The resource at $download_link is not available."
914
- ;;
915
- *)
916
- say "$primary_path_download_error_msg"
917
- ;;
918
- esac
919
- rm -f "$zip_path" 2>&1 && say_verbose "Temporary zip file $zip_path was removed"
920
- if [ "$valid_legacy_download_link" = true ]; then
921
- download_failed=false
922
- download_link="$legacy_download_link"
923
- zip_path="$(mktemp "$temporary_file_template")"
924
- say_verbose "Legacy zip path: $zip_path"
925
-
926
- say "Downloading legacy link $download_link"
927
-
928
- # The download function will set variables $http_code and $download_error_msg in case of failure.
929
- download "$download_link" "$zip_path" 2>&1 || download_failed=true
930
-
931
- if [ "$download_failed" = true ]; then
932
- legacy_path_http_code="$http_code"; legacy_path_download_error_msg="$download_error_msg"
933
- case $legacy_path_http_code in
934
- 404)
935
- say "The resource at $download_link is not available."
936
- ;;
937
- *)
938
- say "$legacy_path_download_error_msg"
939
- ;;
940
- esac
941
- rm -f "$zip_path" 2>&1 && say_verbose "Temporary zip file $zip_path was removed"
942
- fi
943
- fi
944
- fi
1523
+ install_dotnet() {
1524
+ eval $invocation
1525
+ local download_failed=false
1526
+ local download_completed=false
1527
+ local remote_file_size=0
945
1528
 
946
- if [ "$download_failed" = true ]; then
947
- if [[ "$primary_path_http_code" = "404" && ( "$valid_legacy_download_link" = false || "$legacy_path_http_code" = "404") ]]; then
948
- say_err "Could not find \`$asset_name\` with version = $specific_version"
949
- say_err "Refer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support"
1529
+ mkdir -p "$install_root"
1530
+ zip_path="${zip_path:-$(mktemp "$temporary_file_template")}"
1531
+ say_verbose "Archive path: $zip_path"
1532
+
1533
+ for link_index in "${!download_links[@]}"
1534
+ do
1535
+ download_link="${download_links[$link_index]}"
1536
+ specific_version="${specific_versions[$link_index]}"
1537
+ effective_version="${effective_versions[$link_index]}"
1538
+ link_type="${link_types[$link_index]}"
1539
+
1540
+ say "Attempting to download using $link_type link $download_link"
1541
+
1542
+ # The download function will set variables $http_code and $download_error_msg in case of failure.
1543
+ download_failed=false
1544
+ download "$download_link" "$zip_path" 2>&1 || download_failed=true
1545
+
1546
+ if [ "$download_failed" = true ]; then
1547
+ case $http_code in
1548
+ 404)
1549
+ say "The resource at $link_type link '$download_link' is not available."
1550
+ ;;
1551
+ *)
1552
+ say "Failed to download $link_type link '$download_link': $download_error_msg"
1553
+ ;;
1554
+ esac
1555
+ rm -f "$zip_path" 2>&1 && say_verbose "Temporary archive file $zip_path was removed"
950
1556
  else
951
- say_err "Could not download: \`$asset_name\` with version = $specific_version"
952
- # 404-NotFound is an expected response if it goes from only one of the links, do not show that error.
953
- # If primary path is available (not 404-NotFound) then show the primary error else show the legacy error.
954
- if [ "$primary_path_http_code" != "404" ]; then
955
- say_err "$primary_path_download_error_msg"
956
- return 1
957
- fi
958
- if [[ "$valid_legacy_download_link" = true && "$legacy_path_http_code" != "404" ]]; then
959
- say_err "$legacy_path_download_error_msg"
960
- return 1
961
- fi
1557
+ download_completed=true
1558
+ break
962
1559
  fi
1560
+ done
1561
+
1562
+ if [[ "$download_completed" == false ]]; then
1563
+ say_err "Could not find \`$asset_name\` with version = $specific_version"
1564
+ say_err "Refer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support"
963
1565
  return 1
964
1566
  fi
965
1567
 
966
- say "Extracting zip from $download_link"
967
- extract_dotnet_package "$zip_path" "$install_root" || return 1
1568
+ remote_file_size="$(get_remote_file_size "$download_link")"
1569
+
1570
+ say "Extracting archive from $download_link"
1571
+ extract_dotnet_package "$zip_path" "$install_root" "$remote_file_size" || return 1
968
1572
 
969
1573
  # Check if the SDK version is installed; if not, fail the installation.
970
1574
  # if the version contains "RTM" or "servicing"; check if a 'release-type' SDK version is installed.
@@ -975,19 +1579,21 @@ install_dotnet() {
975
1579
  unset IFS;
976
1580
  say_verbose "Checking installation: version = $release_version"
977
1581
  if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$release_version"; then
1582
+ say "Installed version is $effective_version"
978
1583
  return 0
979
1584
  fi
980
1585
  fi
981
1586
 
982
1587
  # Check if the standard SDK version is installed.
983
- say_verbose "Checking installation: version = $specific_product_version"
984
- if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$specific_product_version"; then
1588
+ say_verbose "Checking installation: version = $effective_version"
1589
+ if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$effective_version"; then
1590
+ say "Installed version is $effective_version"
985
1591
  return 0
986
1592
  fi
987
1593
 
988
1594
  # Version verification failed. More likely something is wrong either with the downloaded content or with the verification algorithm.
989
1595
  say_err "Failed to verify the version of installed \`$asset_name\`.\nInstallation source: $download_link.\nInstallation location: $install_root.\nReport the bug at https://github.com/dotnet/install-scripts/issues."
990
- say_err "\`$asset_name\` with version = $specific_product_version failed to install with an unknown error."
1596
+ say_err "\`$asset_name\` with version = $effective_version failed to install with an error."
991
1597
  return 1
992
1598
  }
993
1599
 
@@ -1005,12 +1611,14 @@ architecture="<auto>"
1005
1611
  dry_run=false
1006
1612
  no_path=false
1007
1613
  no_cdn=false
1008
- azure_feed="https://dotnetcli.azureedge.net/dotnet"
1009
- uncached_feed="https://dotnetcli.blob.core.windows.net/dotnet"
1614
+ azure_feed=""
1615
+ uncached_feed=""
1010
1616
  feed_credential=""
1011
1617
  verbose=false
1012
1618
  runtime=""
1013
1619
  runtime_id=""
1620
+ quality=""
1621
+ internal=false
1014
1622
  override_non_versioned_files=true
1015
1623
  non_dynamic_parameters=""
1016
1624
  user_defined_os=""
@@ -1027,6 +1635,14 @@ do
1027
1635
  shift
1028
1636
  version="$1"
1029
1637
  ;;
1638
+ -q|--quality|-[Qq]uality)
1639
+ shift
1640
+ quality="$1"
1641
+ ;;
1642
+ --internal|-[Ii]nternal)
1643
+ internal=true
1644
+ non_dynamic_parameters+=" $name"
1645
+ ;;
1030
1646
  -i|--install-dir|-[Ii]nstall[Dd]ir)
1031
1647
  shift
1032
1648
  install_dir="$1"
@@ -1084,7 +1700,9 @@ do
1084
1700
  --feed-credential|-[Ff]eed[Cc]redential)
1085
1701
  shift
1086
1702
  feed_credential="$1"
1087
- non_dynamic_parameters+=" $name "\""$1"\"""
1703
+ #feed_credential should start with "?", for it to be added to the end of the link.
1704
+ #adding "?" at the beginning of the feed_credential if needed.
1705
+ [[ -z "$(echo $feed_credential)" ]] || [[ $feed_credential == \?* ]] || feed_credential="?$feed_credential"
1088
1706
  ;;
1089
1707
  --runtime-id|-[Rr]untime[Ii]d)
1090
1708
  shift
@@ -1100,36 +1718,64 @@ do
1100
1718
  override_non_versioned_files=false
1101
1719
  non_dynamic_parameters+=" $name"
1102
1720
  ;;
1721
+ --keep-zip|-[Kk]eep[Zz]ip)
1722
+ keep_zip=true
1723
+ non_dynamic_parameters+=" $name"
1724
+ ;;
1725
+ --zip-path|-[Zz]ip[Pp]ath)
1726
+ shift
1727
+ zip_path="$1"
1728
+ ;;
1103
1729
  -?|--?|-h|--help|-[Hh]elp)
1104
1730
  script_name="$(basename "$0")"
1105
1731
  echo ".NET Tools Installer"
1106
- echo "Usage: $script_name [-c|--channel <CHANNEL>] [-v|--version <VERSION>] [-p|--prefix <DESTINATION>]"
1732
+ echo "Usage:"
1733
+ echo " # Install a .NET SDK of a given Quality from a given Channel"
1734
+ echo " $script_name [-c|--channel <CHANNEL>] [-q|--quality <QUALITY>]"
1735
+ echo " # Install a .NET SDK of a specific public version"
1736
+ echo " $script_name [-v|--version <VERSION>]"
1107
1737
  echo " $script_name -h|-?|--help"
1108
1738
  echo ""
1109
1739
  echo "$script_name is a simple command line interface for obtaining dotnet cli."
1740
+ echo " Note that the intended use of this script is for Continuous Integration (CI) scenarios, where:"
1741
+ echo " - The SDK needs to be installed without user interaction and without admin rights."
1742
+ echo " - The SDK installation doesn't need to persist across multiple CI runs."
1743
+ echo " To set up a development environment or to run apps, use installers rather than this script. Visit https://dotnet.microsoft.com/download to get the installer."
1110
1744
  echo ""
1111
1745
  echo "Options:"
1112
1746
  echo " -c,--channel <CHANNEL> Download from the channel specified, Defaults to \`$channel\`."
1113
1747
  echo " -Channel"
1114
1748
  echo " Possible values:"
1115
- echo " - Current - most current release"
1116
- echo " - LTS - most current supported release"
1749
+ echo " - STS - the most recent Standard Term Support release"
1750
+ echo " - LTS - the most recent Long Term Support release"
1117
1751
  echo " - 2-part version in a format A.B - represents a specific release"
1118
1752
  echo " examples: 2.0; 1.0"
1119
- echo " - Branch name"
1120
- echo " examples: release/2.0.0; Master"
1121
- echo " Note: The version parameter overrides the channel parameter."
1753
+ echo " - 3-part version in a format A.B.Cxx - represents a specific SDK release"
1754
+ echo " examples: 5.0.1xx, 5.0.2xx."
1755
+ echo " Supported since 5.0 release"
1756
+ echo " Warning: Value 'Current' is deprecated for the Channel parameter. Use 'STS' instead."
1757
+ echo " Note: The version parameter overrides the channel parameter when any version other than 'latest' is used."
1122
1758
  echo " -v,--version <VERSION> Use specific VERSION, Defaults to \`$version\`."
1123
1759
  echo " -Version"
1124
1760
  echo " Possible values:"
1125
- echo " - latest - most latest build on specific channel"
1761
+ echo " - latest - the latest build on specific channel"
1126
1762
  echo " - 3-part version in a format A.B.C - represents specific version of build"
1127
1763
  echo " examples: 2.0.0-preview2-006120; 1.1.0"
1764
+ echo " -q,--quality <quality> Download the latest build of specified quality in the channel."
1765
+ echo " -Quality"
1766
+ echo " The possible values are: daily, signed, validated, preview, GA."
1767
+ echo " Works only in combination with channel. Not applicable for STS and LTS channels and will be ignored if those channels are used."
1768
+ echo " For SDK use channel in A.B.Cxx format. Using quality for SDK together with channel in A.B format is not supported."
1769
+ echo " Supported since 5.0 release."
1770
+ echo " Note: The version parameter overrides the channel parameter when any version other than 'latest' is used, and therefore overrides the quality."
1771
+ echo " --internal,-Internal Download internal builds. Requires providing credentials via --feed-credential parameter."
1772
+ echo " --feed-credential <FEEDCREDENTIAL> Token to access Azure feed. Used as a query string to append to the Azure feed."
1773
+ echo " -FeedCredential This parameter typically is not specified."
1128
1774
  echo " -i,--install-dir <DIR> Install under specified location (see Install Location below)"
1129
1775
  echo " -InstallDir"
1130
1776
  echo " --architecture <ARCHITECTURE> Architecture of dotnet binaries to be installed, Defaults to \`$architecture\`."
1131
1777
  echo " --arch,-Architecture,-Arch"
1132
- echo " Possible values: x64, arm, and arm64"
1778
+ echo " Possible values: x64, arm, arm64, s390x, ppc64le and loongarch64"
1133
1779
  echo " --os <system> Specifies operating system to be used when selecting the installer."
1134
1780
  echo " Overrides the OS determination approach used by the script. Supported values: osx, linux, linux-musl, freebsd, rhel.6."
1135
1781
  echo " In case any other value is provided, the platform will be determined by the script based on machine configuration."
@@ -1143,24 +1789,21 @@ do
1143
1789
  echo " --dry-run,-DryRun Do not perform installation. Display download link."
1144
1790
  echo " --no-path, -NoPath Do not set PATH for the current process."
1145
1791
  echo " --verbose,-Verbose Display diagnostics information."
1146
- echo " --azure-feed,-AzureFeed Azure feed location. Defaults to $azure_feed, This parameter typically is not changed by the user."
1147
- echo " --uncached-feed,-UncachedFeed Uncached feed location. This parameter typically is not changed by the user."
1148
- echo " --feed-credential,-FeedCredential Azure feed shared access token. This parameter typically is not specified."
1792
+ echo " --azure-feed,-AzureFeed For internal use only."
1793
+ echo " Allows using a different storage to download SDK archives from."
1794
+ echo " This parameter is only used if --no-cdn is false."
1795
+ echo " --uncached-feed,-UncachedFeed For internal use only."
1796
+ echo " Allows using a different storage to download SDK archives from."
1797
+ echo " This parameter is only used if --no-cdn is true."
1149
1798
  echo " --skip-non-versioned-files Skips non-versioned files if they already exist, such as the dotnet executable."
1150
1799
  echo " -SkipNonVersionedFiles"
1151
1800
  echo " --no-cdn,-NoCdn Disable downloading from the Azure CDN, and use the uncached feed directly."
1152
1801
  echo " --jsonfile <JSONFILE> Determines the SDK version from a user specified global.json file."
1153
1802
  echo " Note: global.json must have a value for 'SDK:Version'"
1803
+ echo " --keep-zip,-KeepZip If set, downloaded file is kept."
1804
+ echo " --zip-path, -ZipPath If set, downloaded file is stored at the specified path."
1154
1805
  echo " -?,--?,-h,--help,-Help Shows this help message"
1155
1806
  echo ""
1156
- echo "Obsolete parameters:"
1157
- echo " --shared-runtime The recommended alternative is '--runtime dotnet'."
1158
- echo " This parameter is obsolete and may be removed in a future version of this script."
1159
- echo " Installs just the shared runtime bits, not the entire SDK."
1160
- echo " --runtime-id Installs the .NET Tools for the given platform (use linux-x64 for portable linux)."
1161
- echo " -RuntimeId" The parameter is obsolete and may be removed in a future version of this script. Should be used only for versions below 2.1.
1162
- echo " For primary links to override OS or/and architecture, use --os and --architecture option instead."
1163
- echo ""
1164
1807
  echo "Install Location:"
1165
1808
  echo " Location is chosen in following order:"
1166
1809
  echo " - --install-dir option"
@@ -1177,33 +1820,28 @@ do
1177
1820
  shift
1178
1821
  done
1179
1822
 
1180
- if [ "$no_cdn" = true ]; then
1181
- azure_feed="$uncached_feed"
1182
- fi
1823
+ say_verbose "Note that the intended use of this script is for Continuous Integration (CI) scenarios, where:"
1824
+ say_verbose "- The SDK needs to be installed without user interaction and without admin rights."
1825
+ say_verbose "- The SDK installation doesn't need to persist across multiple CI runs."
1826
+ say_verbose "To set up a development environment or to run apps, use installers rather than this script. Visit https://dotnet.microsoft.com/download to get the installer.\n"
1183
1827
 
1184
- say "Note that the intended use of this script is for Continuous Integration (CI) scenarios, where:"
1185
- say "- The SDK needs to be installed without user interaction and without admin rights."
1186
- say "- The SDK installation doesn't need to persist across multiple CI runs."
1187
- say "To set up a development environment or to run apps, use installers rather than this script. Visit https://dotnet.microsoft.com/download to get the installer.\n"
1828
+ if [ "$internal" = true ] && [ -z "$(echo $feed_credential)" ]; then
1829
+ message="Provide credentials via --feed-credential parameter."
1830
+ if [ "$dry_run" = true ]; then
1831
+ say_warning "$message"
1832
+ else
1833
+ say_err "$message"
1834
+ exit 1
1835
+ fi
1836
+ fi
1188
1837
 
1189
1838
  check_min_reqs
1190
1839
  calculate_vars
1191
- script_name=$(basename "$0")
1840
+ # generate_regular_links call below will 'exit' if the determined version is already installed.
1841
+ generate_download_links
1192
1842
 
1193
- if [ "$dry_run" = true ]; then
1194
- say "Payload URLs:"
1195
- say "Primary named payload URL: $download_link"
1196
- if [ "$valid_legacy_download_link" = true ]; then
1197
- say "Legacy named payload URL: $legacy_download_link"
1198
- fi
1199
- repeatable_command="./$script_name --version "\""$specific_version"\"" --install-dir "\""$install_root"\"" --architecture "\""$normalized_architecture"\"" --os "\""$normalized_os"\"""
1200
- if [[ "$runtime" == "dotnet" ]]; then
1201
- repeatable_command+=" --runtime "\""dotnet"\"""
1202
- elif [[ "$runtime" == "aspnetcore" ]]; then
1203
- repeatable_command+=" --runtime "\""aspnetcore"\"""
1204
- fi
1205
- repeatable_command+="$non_dynamic_parameters"
1206
- say "Repeatable invocation: $repeatable_command"
1843
+ if [[ "$dry_run" = true ]]; then
1844
+ print_dry_run
1207
1845
  exit 0
1208
1846
  fi
1209
1847
 
@@ -1218,5 +1856,5 @@ else
1218
1856
  fi
1219
1857
 
1220
1858
  say "Note that the script does not resolve dependencies during installation."
1221
- say "To check the list of dependencies, go to https://docs.microsoft.com/dotnet/core/install, select your operating system and check the \"Dependencies\" section."
1859
+ say "To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install, select your operating system and check the \"Dependencies\" section."
1222
1860
  say "Installation finished successfully."