@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.
- package/build/client/teamsDevPortalClient.d.ts +127 -0
- package/build/client/teamsDevPortalClient.d.ts.map +1 -0
- package/build/client/teamsDevPortalClient.js +934 -0
- package/build/client/teamsDevPortalClient.js.map +1 -0
- package/build/common/azureUtils.d.ts +3 -0
- package/build/common/azureUtils.d.ts.map +1 -0
- package/build/common/azureUtils.js +50 -0
- package/build/common/azureUtils.js.map +1 -0
- package/build/common/constants.d.ts +11 -1
- package/build/common/constants.d.ts.map +1 -1
- package/build/common/constants.js +44 -3
- package/build/common/constants.js.map +1 -1
- package/build/common/featureFlags.d.ts +4 -5
- package/build/common/featureFlags.d.ts.map +1 -1
- package/build/common/featureFlags.js +2 -10
- package/build/common/featureFlags.js.map +1 -1
- package/build/common/globalState.js +3 -3
- package/build/{core → common}/globalVars.d.ts +2 -1
- package/build/common/globalVars.d.ts.map +1 -0
- package/build/{core → common}/globalVars.js +11 -1
- package/build/common/globalVars.js.map +1 -0
- package/build/common/localizeUtils.js +1 -1
- package/build/common/localizeUtils.js.map +1 -1
- package/build/common/projectSettingsHelper.d.ts +5 -0
- package/build/common/projectSettingsHelper.d.ts.map +1 -1
- package/build/common/projectSettingsHelper.js +31 -1
- package/build/common/projectSettingsHelper.js.map +1 -1
- package/build/common/requestUtils.d.ts +4 -0
- package/build/common/requestUtils.d.ts.map +1 -0
- package/build/common/requestUtils.js +52 -0
- package/build/common/requestUtils.js.map +1 -0
- package/build/common/samples.d.ts +6 -1
- package/build/common/samples.d.ts.map +1 -1
- package/build/common/samples.js +4 -4
- package/build/common/samples.js.map +1 -1
- package/build/common/stringUtils.d.ts +8 -0
- package/build/common/stringUtils.d.ts.map +1 -1
- package/build/common/stringUtils.js +63 -1
- package/build/common/stringUtils.js.map +1 -1
- package/build/common/telemetry.d.ts +30 -11
- package/build/common/telemetry.d.ts.map +1 -1
- package/build/common/telemetry.js +79 -74
- package/build/common/telemetry.js.map +1 -1
- package/build/common/templates-config.json +2 -2
- package/build/common/tools.d.ts +1 -31
- package/build/common/tools.d.ts.map +1 -1
- package/build/common/tools.js +6 -245
- package/build/common/tools.js.map +1 -1
- package/build/common/utils.d.ts +1 -3
- package/build/common/utils.d.ts.map +1 -1
- package/build/common/utils.js +5 -14
- package/build/common/utils.js.map +1 -1
- package/build/common/wrappedAxiosClient.js +5 -5
- package/build/common/wrappedAxiosClient.js.map +1 -1
- package/build/component/configManager/lifecycle.js +1 -1
- package/build/component/configManager/lifecycle.js.map +1 -1
- package/build/component/configManager/parser.js +1 -1
- package/build/component/configManager/parser.js.map +1 -1
- package/build/component/configManager/validator.js +1 -1
- package/build/component/configManager/validator.js.map +1 -1
- package/build/component/constants.d.ts +3 -223
- package/build/component/constants.d.ts.map +1 -1
- package/build/component/constants.js +4 -247
- package/build/component/constants.js.map +1 -1
- package/build/component/coordinator/index.d.ts.map +1 -1
- package/build/component/coordinator/index.js +74 -72
- package/build/component/coordinator/index.js.map +1 -1
- package/build/component/deps-checker/checkerFactory.d.ts.map +1 -0
- package/build/component/deps-checker/checkerFactory.js.map +1 -0
- package/build/{common → component}/deps-checker/constant/helpLink.d.ts +0 -3
- package/build/component/deps-checker/constant/helpLink.d.ts.map +1 -0
- package/build/{common → component}/deps-checker/constant/helpLink.js +1 -6
- package/build/component/deps-checker/constant/helpLink.js.map +1 -0
- package/build/component/deps-checker/constant/index.d.ts.map +1 -0
- package/build/component/deps-checker/constant/index.js.map +1 -0
- package/build/component/deps-checker/constant/message.d.ts.map +1 -0
- package/build/{common → component}/deps-checker/constant/message.js +1 -1
- package/build/component/deps-checker/constant/message.js.map +1 -0
- package/build/component/deps-checker/constant/telemetry.d.ts.map +1 -0
- package/build/component/deps-checker/constant/telemetry.js.map +1 -0
- package/build/component/deps-checker/coreDepsLoggerAdapter.d.ts.map +1 -0
- package/build/component/deps-checker/coreDepsLoggerAdapter.js.map +1 -0
- package/build/component/deps-checker/coreDepsTelemetryAdapter.d.ts.map +1 -0
- package/build/{common → component}/deps-checker/coreDepsTelemetryAdapter.js +4 -4
- package/build/component/deps-checker/coreDepsTelemetryAdapter.js.map +1 -0
- package/build/component/deps-checker/depsChecker.d.ts.map +1 -0
- package/build/component/deps-checker/depsChecker.js.map +1 -0
- package/build/component/deps-checker/depsError.d.ts.map +1 -0
- package/build/component/deps-checker/depsError.js.map +1 -0
- package/build/component/deps-checker/depsLogger.d.ts.map +1 -0
- package/build/component/deps-checker/depsLogger.js.map +1 -0
- package/build/component/deps-checker/depsManager.d.ts.map +1 -0
- package/build/component/deps-checker/depsManager.js.map +1 -0
- package/build/component/deps-checker/depsTelemetry.d.ts.map +1 -0
- package/build/component/deps-checker/depsTelemetry.js.map +1 -0
- package/build/component/deps-checker/index.d.ts.map +1 -0
- package/build/component/deps-checker/index.js.map +1 -0
- package/build/component/deps-checker/internal/dotnetChecker.d.ts.map +1 -0
- package/build/{common → component}/deps-checker/internal/dotnetChecker.js +1 -1
- package/build/component/deps-checker/internal/dotnetChecker.js.map +1 -0
- package/build/component/deps-checker/internal/funcToolChecker.d.ts.map +1 -0
- package/build/{common → component}/deps-checker/internal/funcToolChecker.js +4 -4
- package/build/component/deps-checker/internal/funcToolChecker.js.map +1 -0
- package/build/component/deps-checker/internal/nodeChecker.d.ts.map +1 -0
- package/build/component/deps-checker/internal/nodeChecker.js.map +1 -0
- package/build/component/deps-checker/internal/testToolChecker.d.ts.map +1 -0
- package/build/{common → component}/deps-checker/internal/testToolChecker.js +1 -1
- package/build/component/deps-checker/internal/testToolChecker.js.map +1 -0
- package/build/component/deps-checker/internal/vxTestAppChecker.d.ts.map +1 -0
- package/build/{common → component}/deps-checker/internal/vxTestAppChecker.js +9 -3
- package/build/component/deps-checker/internal/vxTestAppChecker.js.map +1 -0
- package/build/component/deps-checker/util/cpUtils.d.ts.map +1 -0
- package/build/component/deps-checker/util/cpUtils.js.map +1 -0
- package/build/component/deps-checker/util/downloadHelper.d.ts.map +1 -0
- package/build/component/deps-checker/util/downloadHelper.js.map +1 -0
- package/build/component/deps-checker/util/fileHelper.d.ts.map +1 -0
- package/build/component/deps-checker/util/fileHelper.js.map +1 -0
- package/build/component/deps-checker/util/index.d.ts.map +1 -0
- package/build/component/deps-checker/util/index.js.map +1 -0
- package/build/component/deps-checker/util/progressIndicator.d.ts.map +1 -0
- package/build/component/deps-checker/util/progressIndicator.js.map +1 -0
- package/build/component/deps-checker/util/system.d.ts.map +1 -0
- package/build/component/deps-checker/util/system.js.map +1 -0
- package/build/component/developerPortalScaffoldUtils.d.ts +1 -5
- package/build/component/developerPortalScaffoldUtils.d.ts.map +1 -1
- package/build/component/developerPortalScaffoldUtils.js +71 -87
- package/build/component/developerPortalScaffoldUtils.js.map +1 -1
- package/build/component/driver/aad/create.d.ts.map +1 -1
- package/build/component/driver/aad/create.js +17 -18
- package/build/component/driver/aad/create.js.map +1 -1
- package/build/component/driver/aad/utility/aadAppClient.d.ts.map +1 -1
- package/build/component/driver/aad/utility/aadAppClient.js +10 -10
- package/build/component/driver/aad/utility/aadAppClient.js.map +1 -1
- package/build/component/driver/aad/utility/buildAadManifest.d.ts +1 -1
- package/build/component/driver/aad/utility/buildAadManifest.d.ts.map +1 -1
- package/build/component/driver/aad/utility/buildAadManifest.js +11 -11
- package/build/component/driver/aad/utility/buildAadManifest.js.map +1 -1
- package/build/component/driver/add/addWebPart.d.ts +2 -2
- package/build/component/driver/add/addWebPart.d.ts.map +1 -1
- package/build/component/driver/add/addWebPart.js +29 -29
- package/build/component/driver/add/addWebPart.js.map +1 -1
- package/build/component/driver/apiKey/create.d.ts.map +1 -1
- package/build/component/driver/apiKey/create.js +16 -16
- package/build/component/driver/apiKey/create.js.map +1 -1
- package/build/component/driver/apiKey/update.d.ts +1 -1
- package/build/component/driver/apiKey/update.d.ts.map +1 -1
- package/build/component/driver/apiKey/update.js +15 -15
- package/build/component/driver/apiKey/update.js.map +1 -1
- package/build/component/driver/arm/deployImpl.js +1 -1
- package/build/component/driver/arm/deployImpl.js.map +1 -1
- package/build/component/driver/arm/util/bicepChecker.d.ts.map +1 -1
- package/build/component/driver/arm/util/bicepChecker.js +25 -5
- package/build/component/driver/arm/util/bicepChecker.js.map +1 -1
- package/build/component/driver/arm/util/handleError.js +2 -2
- package/build/component/driver/arm/util/handleError.js.map +1 -1
- package/build/component/driver/deploy/azure/azureStorageDeployDriver.js +1 -1
- package/build/component/driver/deploy/azure/azureStorageDeployDriver.js.map +1 -1
- package/build/component/driver/deploy/azure/azureStorageStaticWebsiteConfigDriver.js +1 -1
- package/build/component/driver/deploy/azure/azureStorageStaticWebsiteConfigDriver.js.map +1 -1
- package/build/component/driver/deploy/azure/impl/AzureZipDeployImpl.js +1 -1
- package/build/component/driver/deploy/azure/impl/AzureZipDeployImpl.js.map +1 -1
- package/build/component/driver/deploy/azure/impl/azureDeployImpl.d.ts +4 -4
- package/build/component/driver/deploy/azure/impl/azureDeployImpl.d.ts.map +1 -1
- package/build/component/driver/deploy/azure/impl/azureDeployImpl.js +13 -13
- package/build/component/driver/deploy/azure/impl/azureDeployImpl.js.map +1 -1
- package/build/component/driver/deploy/spfx/deployDriver.d.ts +1 -1
- package/build/component/driver/deploy/spfx/deployDriver.d.ts.map +1 -1
- package/build/component/driver/deploy/spfx/deployDriver.js +19 -18
- package/build/component/driver/deploy/spfx/deployDriver.js.map +1 -1
- package/build/component/driver/devTool/error/dotnetInstallationUserError.js +1 -1
- package/build/component/driver/devTool/error/dotnetInstallationUserError.js.map +1 -1
- package/build/component/driver/devTool/error/funcInstallationUserError.js +1 -1
- package/build/component/driver/devTool/error/funcInstallationUserError.js.map +1 -1
- package/build/component/driver/devTool/error/testToolInstallationUserError.js +1 -1
- package/build/component/driver/devTool/error/testToolInstallationUserError.js.map +1 -1
- package/build/component/driver/devTool/installDriver.d.ts +1 -1
- package/build/component/driver/devTool/installDriver.d.ts.map +1 -1
- package/build/component/driver/devTool/installDriver.js +6 -6
- package/build/component/driver/devTool/installDriver.js.map +1 -1
- package/build/component/driver/m365/acquire.js +4 -4
- package/build/component/driver/m365/acquire.js.map +1 -1
- package/build/component/driver/middleware/addSWADeployTelemetry.js +5 -5
- package/build/component/driver/middleware/addSWADeployTelemetry.js.map +1 -1
- package/build/component/driver/middleware/addStartAndEndTelemetry.d.ts.map +1 -1
- package/build/component/driver/middleware/addStartAndEndTelemetry.js +3 -3
- package/build/component/driver/middleware/addStartAndEndTelemetry.js.map +1 -1
- package/build/component/driver/oauth/create.d.ts +1 -1
- package/build/component/driver/oauth/create.d.ts.map +1 -1
- package/build/component/driver/oauth/create.js +23 -24
- package/build/component/driver/oauth/create.js.map +1 -1
- package/build/component/driver/oauth/update.d.ts +1 -1
- package/build/component/driver/oauth/update.d.ts.map +1 -1
- package/build/component/driver/oauth/update.js +15 -15
- package/build/component/driver/oauth/update.js.map +1 -1
- package/build/component/driver/oauth/utility/utility.js +2 -2
- package/build/component/driver/oauth/utility/utility.js.map +1 -1
- package/build/component/driver/script/scriptDriver.js +1 -1
- package/build/component/driver/script/scriptDriver.js.map +1 -1
- package/build/component/driver/teamsApp/appStudio.d.ts +1 -1
- package/build/component/driver/teamsApp/appStudio.d.ts.map +1 -1
- package/build/component/driver/teamsApp/appStudio.js +25 -25
- package/build/component/driver/teamsApp/appStudio.js.map +1 -1
- package/build/component/driver/teamsApp/clients/appStudioClient.d.ts +7 -4
- package/build/component/driver/teamsApp/clients/appStudioClient.d.ts.map +1 -1
- package/build/component/driver/teamsApp/clients/appStudioClient.js +60 -60
- package/build/component/driver/teamsApp/clients/appStudioClient.js.map +1 -1
- package/build/component/driver/teamsApp/configure.d.ts +1 -1
- package/build/component/driver/teamsApp/configure.d.ts.map +1 -1
- package/build/component/driver/teamsApp/configure.js +16 -16
- package/build/component/driver/teamsApp/configure.js.map +1 -1
- package/build/component/driver/teamsApp/constants.d.ts +0 -2
- package/build/component/driver/teamsApp/constants.d.ts.map +1 -1
- package/build/component/driver/teamsApp/constants.js +14 -24
- package/build/component/driver/teamsApp/constants.js.map +1 -1
- package/build/component/driver/teamsApp/create.d.ts +2 -2
- package/build/component/driver/teamsApp/create.d.ts.map +1 -1
- package/build/component/driver/teamsApp/create.js +19 -19
- package/build/component/driver/teamsApp/create.js.map +1 -1
- package/build/component/driver/teamsApp/createAppPackage.js +1 -1
- package/build/component/driver/teamsApp/createAppPackage.js.map +1 -1
- package/build/component/driver/teamsApp/publishAppPackage.d.ts +1 -1
- package/build/component/driver/teamsApp/publishAppPackage.d.ts.map +1 -1
- package/build/component/driver/teamsApp/publishAppPackage.js +21 -21
- package/build/component/driver/teamsApp/publishAppPackage.js.map +1 -1
- package/build/component/driver/teamsApp/teamsappMgr.js +8 -8
- package/build/component/driver/teamsApp/teamsappMgr.js.map +1 -1
- package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.d.ts.map +1 -1
- package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.js +29 -22
- package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.js.map +1 -1
- package/build/component/driver/teamsApp/utils/ManifestUtils.d.ts.map +1 -1
- package/build/component/driver/teamsApp/utils/ManifestUtils.js +34 -34
- package/build/component/driver/teamsApp/utils/ManifestUtils.js.map +1 -1
- package/build/component/driver/teamsApp/utils/telemetry.d.ts +0 -9
- package/build/component/driver/teamsApp/utils/telemetry.d.ts.map +1 -1
- package/build/component/driver/teamsApp/utils/telemetry.js +0 -9
- package/build/component/driver/teamsApp/utils/telemetry.js.map +1 -1
- package/build/component/driver/teamsApp/utils/utils.d.ts +1 -1
- package/build/component/driver/teamsApp/utils/utils.d.ts.map +1 -1
- package/build/component/driver/teamsApp/utils/utils.js +1 -1
- package/build/component/driver/teamsApp/utils/utils.js.map +1 -1
- package/build/component/driver/teamsApp/validateAppPackage.d.ts +2 -5
- package/build/component/driver/teamsApp/validateAppPackage.d.ts.map +1 -1
- package/build/component/driver/teamsApp/validateAppPackage.js +18 -18
- package/build/component/driver/teamsApp/validateAppPackage.js.map +1 -1
- package/build/component/driver/teamsApp/validateTestCases.d.ts +3 -3
- package/build/component/driver/teamsApp/validateTestCases.d.ts.map +1 -1
- package/build/component/driver/teamsApp/validateTestCases.js +20 -19
- package/build/component/driver/teamsApp/validateTestCases.js.map +1 -1
- package/build/component/driver/util/utils.d.ts +3 -0
- package/build/component/driver/util/utils.d.ts.map +1 -1
- package/build/component/driver/util/utils.js +16 -1
- package/build/component/driver/util/utils.js.map +1 -1
- package/build/component/driver/util/wrapUtil.d.ts.map +1 -1
- package/build/component/driver/util/wrapUtil.js +8 -5
- package/build/component/driver/util/wrapUtil.js.map +1 -1
- package/build/component/feature/collaboration.d.ts.map +1 -1
- package/build/component/feature/collaboration.js +25 -24
- package/build/component/feature/collaboration.js.map +1 -1
- package/build/component/feature/sso.js +4 -3
- package/build/component/feature/sso.js.map +1 -1
- package/build/component/generator/copilotPlugin/generator.d.ts +10 -2
- package/build/component/generator/copilotPlugin/generator.d.ts.map +1 -1
- package/build/component/generator/copilotPlugin/generator.js +222 -98
- package/build/component/generator/copilotPlugin/generator.js.map +1 -1
- package/build/component/generator/copilotPlugin/helper.d.ts +5 -14
- package/build/component/generator/copilotPlugin/helper.d.ts.map +1 -1
- package/build/component/generator/copilotPlugin/helper.js +60 -110
- package/build/component/generator/copilotPlugin/helper.js.map +1 -1
- package/build/component/generator/generator.d.ts.map +1 -1
- package/build/component/generator/generator.js +7 -7
- package/build/component/generator/generator.js.map +1 -1
- package/build/component/generator/generatorAction.d.ts +1 -1
- package/build/component/generator/generatorAction.d.ts.map +1 -1
- package/build/component/generator/generatorAction.js +8 -16
- package/build/component/generator/generatorAction.js.map +1 -1
- package/build/component/generator/generatorProvider.d.ts.map +1 -1
- package/build/component/generator/generatorProvider.js +6 -2
- package/build/component/generator/generatorProvider.js.map +1 -1
- package/build/component/generator/officeAddin/generator.d.ts +2 -2
- package/build/component/generator/officeAddin/generator.d.ts.map +1 -1
- package/build/component/generator/officeAddin/generator.js +37 -36
- package/build/component/generator/officeAddin/generator.js.map +1 -1
- package/build/component/generator/officeAddin/helperMethods.d.ts +5 -0
- package/build/component/generator/officeAddin/helperMethods.d.ts.map +1 -1
- package/build/component/generator/officeAddin/helperMethods.js +37 -0
- package/build/component/generator/officeAddin/helperMethods.js.map +1 -1
- package/build/component/generator/officeXMLAddin/generator.d.ts +9 -1
- package/build/component/generator/officeXMLAddin/generator.d.ts.map +1 -1
- package/build/component/generator/officeXMLAddin/generator.js +74 -11
- package/build/component/generator/officeXMLAddin/generator.js.map +1 -1
- package/build/component/generator/officeXMLAddin/projectConfig.d.ts +2 -4
- package/build/component/generator/officeXMLAddin/projectConfig.d.ts.map +1 -1
- package/build/component/generator/officeXMLAddin/projectConfig.js +1 -11
- package/build/component/generator/officeXMLAddin/projectConfig.js.map +1 -1
- package/build/component/generator/spfx/depsChecker/generatorChecker.d.ts.map +1 -1
- package/build/component/generator/spfx/depsChecker/generatorChecker.js +8 -7
- package/build/component/generator/spfx/depsChecker/generatorChecker.js.map +1 -1
- package/build/component/generator/spfx/depsChecker/yoChecker.d.ts.map +1 -1
- package/build/component/generator/spfx/depsChecker/yoChecker.js +3 -2
- package/build/component/generator/spfx/depsChecker/yoChecker.js.map +1 -1
- package/build/component/generator/spfx/error.d.ts +0 -1
- package/build/component/generator/spfx/error.d.ts.map +1 -1
- package/build/component/generator/spfx/error.js +1 -5
- package/build/component/generator/spfx/error.js.map +1 -1
- package/build/component/generator/spfx/spfxGenerator.d.ts +2 -2
- package/build/component/generator/spfx/spfxGenerator.d.ts.map +1 -1
- package/build/component/generator/spfx/spfxGenerator.js +27 -29
- package/build/component/generator/spfx/spfxGenerator.js.map +1 -1
- package/build/component/generator/spfx/utils/constants.d.ts +0 -13
- package/build/component/generator/spfx/utils/constants.d.ts.map +1 -1
- package/build/component/generator/spfx/utils/constants.js +1 -16
- package/build/component/generator/spfx/utils/constants.js.map +1 -1
- package/build/component/generator/spfx/utils/telemetry-helper.d.ts.map +1 -1
- package/build/component/generator/spfx/utils/telemetry-helper.js +11 -9
- package/build/component/generator/spfx/utils/telemetry-helper.js.map +1 -1
- package/build/component/generator/spfx/utils/utils.d.ts +1 -1
- package/build/component/generator/spfx/utils/utils.d.ts.map +1 -1
- package/build/component/generator/spfx/utils/utils.js +1 -1
- package/build/component/generator/spfx/utils/utils.js.map +1 -1
- package/build/component/generator/templates/ssrTabGenerator.d.ts.map +1 -1
- package/build/component/generator/templates/ssrTabGenerator.js +5 -5
- package/build/component/generator/templates/ssrTabGenerator.js.map +1 -1
- package/build/component/generator/templates/templateGenerator.d.ts +3 -3
- package/build/component/generator/templates/templateGenerator.d.ts.map +1 -1
- package/build/component/generator/templates/templateGenerator.js +4 -6
- package/build/component/generator/templates/templateGenerator.js.map +1 -1
- package/build/component/generator/templates/templateNames.d.ts +2 -0
- package/build/component/generator/templates/templateNames.d.ts.map +1 -1
- package/build/component/generator/templates/templateNames.js +112 -109
- package/build/component/generator/templates/templateNames.js.map +1 -1
- package/build/component/generator/templates/templateReplaceMap.js +9 -9
- package/build/component/generator/templates/templateReplaceMap.js.map +1 -1
- package/build/component/generator/utils.d.ts +4 -12
- package/build/component/generator/utils.d.ts.map +1 -1
- package/build/component/generator/utils.js +48 -79
- package/build/component/generator/utils.js.map +1 -1
- package/build/{common → component}/local/constants.d.ts +1 -0
- package/build/component/local/constants.d.ts.map +1 -0
- package/build/{common → component}/local/constants.js +1 -0
- package/build/component/local/constants.js.map +1 -0
- package/build/component/local/index.d.ts.map +1 -0
- package/build/component/local/index.js.map +1 -0
- package/build/component/local/localCertificateManager.d.ts.map +1 -0
- package/build/{common → component}/local/localCertificateManager.js +2 -2
- package/build/component/local/localCertificateManager.js.map +1 -0
- package/build/component/local/localEnvManager.d.ts.map +1 -0
- package/build/component/local/localEnvManager.js.map +1 -0
- package/build/component/local/localTelemetryReporter.d.ts.map +1 -0
- package/build/{common → component}/local/localTelemetryReporter.js +1 -1
- package/build/component/local/localTelemetryReporter.js.map +1 -0
- package/build/component/local/npmLogHelper.d.ts.map +1 -0
- package/build/component/local/npmLogHelper.js.map +1 -0
- package/build/component/local/packageJsonHelper.d.ts.map +1 -0
- package/build/component/local/packageJsonHelper.js.map +1 -0
- package/build/component/local/portChecker.d.ts.map +1 -0
- package/build/{common → component}/local/portChecker.js +2 -2
- package/build/component/local/portChecker.js.map +1 -0
- package/build/component/local/process.d.ts.map +1 -0
- package/build/component/local/process.js.map +1 -0
- package/build/component/local/taskDefinition.d.ts.map +1 -0
- package/build/{common → component}/local/taskDefinition.js +3 -3
- package/build/component/local/taskDefinition.js.map +1 -0
- package/build/component/m365/constants.d.ts.map +1 -0
- package/build/component/m365/constants.js.map +1 -0
- package/build/component/m365/errors.d.ts.map +1 -0
- package/build/{common → component}/m365/errors.js +1 -1
- package/build/component/m365/errors.js.map +1 -0
- package/build/{common → component}/m365/launchHelper.d.ts +1 -1
- package/build/component/m365/launchHelper.d.ts.map +1 -0
- package/build/{common → component}/m365/launchHelper.js +13 -13
- package/build/component/m365/launchHelper.js.map +1 -0
- package/build/component/m365/packageService.d.ts.map +1 -0
- package/build/{common → component}/m365/packageService.js +12 -12
- package/build/component/m365/packageService.js.map +1 -0
- package/build/component/m365/serviceConstant.d.ts +3 -0
- package/build/component/m365/serviceConstant.d.ts.map +1 -0
- package/build/component/m365/serviceConstant.js +8 -0
- package/build/component/m365/serviceConstant.js.map +1 -0
- package/build/component/middleware/actionExecutionMW.d.ts +1 -1
- package/build/component/middleware/actionExecutionMW.d.ts.map +1 -1
- package/build/component/middleware/actionExecutionMW.js +9 -9
- package/build/component/middleware/actionExecutionMW.js.map +1 -1
- package/build/component/middleware/envMW.js +4 -4
- package/build/component/middleware/envMW.js.map +1 -1
- package/build/component/middleware/questionMW.js +1 -1
- package/build/component/middleware/questionMW.js.map +1 -1
- package/build/component/migrate.d.ts +32 -0
- package/build/component/migrate.d.ts.map +1 -1
- package/build/component/migrate.js +109 -32
- package/build/component/migrate.js.map +1 -1
- package/build/component/provisionUtils.d.ts.map +1 -1
- package/build/component/provisionUtils.js +5 -6
- package/build/component/provisionUtils.js.map +1 -1
- package/build/component/resource/botService/appStudio/appStudioClient.d.ts.map +1 -1
- package/build/component/resource/botService/appStudio/appStudioClient.js +12 -11
- package/build/component/resource/botService/appStudio/appStudioClient.js.map +1 -1
- package/build/component/resource/botService/botRegistration/botFrameworkRegistration.d.ts +1 -1
- package/build/component/resource/botService/botRegistration/botFrameworkRegistration.d.ts.map +1 -1
- package/build/component/resource/botService/botRegistration/botFrameworkRegistration.js +9 -6
- package/build/component/resource/botService/botRegistration/botFrameworkRegistration.js.map +1 -1
- package/build/component/resource/botService/constants.d.ts +0 -13
- package/build/component/resource/botService/constants.d.ts.map +1 -1
- package/build/component/resource/botService/constants.js +1 -15
- package/build/component/resource/botService/constants.js.map +1 -1
- package/build/component/telemetry.d.ts.map +1 -1
- package/build/component/telemetry.js +6 -7
- package/build/component/telemetry.js.map +1 -1
- package/build/component/utils/ResourceGroupHelper.d.ts +10 -2
- package/build/component/utils/ResourceGroupHelper.d.ts.map +1 -1
- package/build/component/utils/ResourceGroupHelper.js +135 -42
- package/build/component/utils/ResourceGroupHelper.js.map +1 -1
- package/build/component/utils/charsetUtils.d.ts +1 -1
- package/build/component/utils/charsetUtils.d.ts.map +1 -1
- package/build/component/utils/charsetUtils.js +3 -1
- package/build/component/utils/charsetUtils.js.map +1 -1
- package/build/component/utils/depsChecker/common.d.ts +1 -3
- package/build/component/utils/depsChecker/common.d.ts.map +1 -1
- package/build/component/utils/depsChecker/common.js +0 -2
- package/build/component/utils/depsChecker/common.js.map +1 -1
- package/build/component/utils/envUtil.js +2 -2
- package/build/component/utils/envUtil.js.map +1 -1
- package/build/component/utils/metadataUtil.js +1 -1
- package/build/component/utils/metadataUtil.js.map +1 -1
- package/build/component/utils/pathUtils.d.ts.map +1 -1
- package/build/component/utils/pathUtils.js +9 -11
- package/build/component/utils/pathUtils.js.map +1 -1
- package/build/component/utils/settingsUtil.js +1 -1
- package/build/component/utils/settingsUtil.js.map +1 -1
- package/build/component/utils/teamsFxTelemetryReporter.d.ts.map +1 -1
- package/build/component/utils/teamsFxTelemetryReporter.js +6 -9
- package/build/component/utils/teamsFxTelemetryReporter.js.map +1 -1
- package/build/core/FxCore.d.ts +3 -4
- package/build/core/FxCore.d.ts.map +1 -1
- package/build/core/FxCore.js +74 -103
- package/build/core/FxCore.js.map +1 -1
- package/build/core/callback.d.ts +2 -2
- package/build/core/callback.d.ts.map +1 -1
- package/build/core/callback.js.map +1 -1
- package/build/core/collaborator.d.ts.map +1 -1
- package/build/core/collaborator.js +9 -11
- package/build/core/collaborator.js.map +1 -1
- package/build/core/crypto.d.ts.map +1 -1
- package/build/core/crypto.js +1 -2
- package/build/core/crypto.js.map +1 -1
- package/build/core/environmentName.d.ts +0 -1
- package/build/core/environmentName.d.ts.map +1 -1
- package/build/core/environmentName.js +0 -2
- package/build/core/environmentName.js.map +1 -1
- package/build/core/middleware/concurrentLocker.d.ts.map +1 -1
- package/build/core/middleware/concurrentLocker.js +11 -12
- package/build/core/middleware/concurrentLocker.js.map +1 -1
- package/build/core/middleware/errorHandler.js +1 -1
- package/build/core/middleware/errorHandler.js.map +1 -1
- package/build/core/middleware/projectMigratorV3.d.ts +5 -1
- package/build/core/middleware/projectMigratorV3.d.ts.map +1 -1
- package/build/core/middleware/projectMigratorV3.js +32 -28
- package/build/core/middleware/projectMigratorV3.js.map +1 -1
- package/build/core/middleware/projectSettingsLoader.js +1 -1
- package/build/core/middleware/projectSettingsLoader.js.map +1 -1
- package/build/core/middleware/projectVersionChecker.js +5 -5
- package/build/core/middleware/projectVersionChecker.js.map +1 -1
- package/build/core/middleware/utils/MigrationUtils.js +1 -1
- package/build/core/middleware/utils/MigrationUtils.js.map +1 -1
- package/build/core/middleware/utils/appYmlGenerator.d.ts +1 -0
- package/build/core/middleware/utils/appYmlGenerator.d.ts.map +1 -1
- package/build/core/middleware/utils/appYmlGenerator.js +12 -6
- package/build/core/middleware/utils/appYmlGenerator.js.map +1 -1
- package/build/core/middleware/utils/debug/taskMigrator.js +2 -2
- package/build/core/middleware/utils/debug/taskMigrator.js.map +1 -1
- package/build/core/middleware/utils/v3MigrationUtils.js +4 -4
- package/build/core/middleware/utils/v3MigrationUtils.js.map +1 -1
- package/build/core/middleware/videoFilterAppBlocker.d.ts +2 -0
- package/build/core/middleware/videoFilterAppBlocker.d.ts.map +1 -1
- package/build/core/middleware/videoFilterAppBlocker.js +21 -5
- package/build/core/middleware/videoFilterAppBlocker.js.map +1 -1
- package/build/core/telemetry.d.ts +0 -5
- package/build/core/telemetry.d.ts.map +1 -1
- package/build/core/telemetry.js +9 -17
- package/build/core/telemetry.js.map +1 -1
- package/build/error/common.d.ts +32 -0
- package/build/error/common.d.ts.map +1 -1
- package/build/error/common.js +101 -2
- package/build/error/common.js.map +1 -1
- package/build/error/teamsApp.d.ts +3 -0
- package/build/error/teamsApp.d.ts.map +1 -1
- package/build/error/teamsApp.js +12 -1
- package/build/error/teamsApp.js.map +1 -1
- package/build/error/yml.js +1 -1
- package/build/error/yml.js.map +1 -1
- package/build/index.d.ts +56 -36
- package/build/index.d.ts.map +1 -1
- package/build/index.js +125 -52
- package/build/index.js.map +1 -1
- package/build/question/constants.d.ts +249 -1
- package/build/question/constants.d.ts.map +1 -1
- package/build/question/constants.js +1091 -11
- package/build/question/constants.js.map +1 -1
- package/build/question/create.d.ts +10 -150
- package/build/question/create.d.ts.map +1 -1
- package/build/question/create.js +277 -1239
- package/build/question/create.js.map +1 -1
- package/build/question/index.d.ts +1 -3
- package/build/question/index.d.ts.map +1 -1
- package/build/question/index.js +2 -6
- package/build/question/index.js.map +1 -1
- package/build/question/inputs/CreateProjectInputs.d.ts +4 -4
- package/build/question/inputs/CreateProjectInputs.d.ts.map +1 -1
- package/build/question/options/CreateProjectOptions.js +14 -14
- package/build/question/options/CreateProjectOptions.js.map +1 -1
- package/build/question/other.d.ts +2 -28
- package/build/question/other.d.ts.map +1 -1
- package/build/question/other.js +66 -272
- package/build/question/other.js.map +1 -1
- package/package.json +11 -9
- package/resource/deps-checker/dotnet-install.ps1 +912 -423
- package/resource/deps-checker/dotnet-install.sh +876 -238
- package/resource/package.nls.json +7 -22
- package/resource/yaml-schema/v1.6/yaml.schema.json +1829 -0
- package/resource/yaml-schema/yaml.schema.json +46 -1
- package/templates/core/v3Migration/js.ts.app.local.yml +3 -3
- package/templates/fallback/common.zip +0 -0
- package/templates/fallback/csharp.zip +0 -0
- package/templates/fallback/js.zip +0 -0
- package/templates/fallback/python.zip +0 -0
- package/templates/fallback/ts.zip +0 -0
- package/templates/plugins/resource/aad/auth/V3/aad.manifest.template.json +6 -0
- package/templates/plugins/resource/aad/manifest/aad.template.json +6 -0
- package/templates/plugins/resource/aad/manifest/bot/aad.manifest.template.json +6 -0
- package/templates/plugins/resource/aad/manifest/tab/aad.manifest.template.json +6 -0
- package/build/common/deps-checker/checkerFactory.d.ts.map +0 -1
- package/build/common/deps-checker/checkerFactory.js.map +0 -1
- package/build/common/deps-checker/constant/helpLink.d.ts.map +0 -1
- package/build/common/deps-checker/constant/helpLink.js.map +0 -1
- package/build/common/deps-checker/constant/index.d.ts.map +0 -1
- package/build/common/deps-checker/constant/index.js.map +0 -1
- package/build/common/deps-checker/constant/message.d.ts.map +0 -1
- package/build/common/deps-checker/constant/message.js.map +0 -1
- package/build/common/deps-checker/constant/telemetry.d.ts.map +0 -1
- package/build/common/deps-checker/constant/telemetry.js.map +0 -1
- package/build/common/deps-checker/coreDepsLoggerAdapter.d.ts.map +0 -1
- package/build/common/deps-checker/coreDepsLoggerAdapter.js.map +0 -1
- package/build/common/deps-checker/coreDepsTelemetryAdapter.d.ts.map +0 -1
- package/build/common/deps-checker/coreDepsTelemetryAdapter.js.map +0 -1
- package/build/common/deps-checker/depsChecker.d.ts.map +0 -1
- package/build/common/deps-checker/depsChecker.js.map +0 -1
- package/build/common/deps-checker/depsError.d.ts.map +0 -1
- package/build/common/deps-checker/depsError.js.map +0 -1
- package/build/common/deps-checker/depsLogger.d.ts.map +0 -1
- package/build/common/deps-checker/depsLogger.js.map +0 -1
- package/build/common/deps-checker/depsManager.d.ts.map +0 -1
- package/build/common/deps-checker/depsManager.js.map +0 -1
- package/build/common/deps-checker/depsTelemetry.d.ts.map +0 -1
- package/build/common/deps-checker/depsTelemetry.js.map +0 -1
- package/build/common/deps-checker/index.d.ts.map +0 -1
- package/build/common/deps-checker/index.js.map +0 -1
- package/build/common/deps-checker/internal/dotnetChecker.d.ts.map +0 -1
- package/build/common/deps-checker/internal/dotnetChecker.js.map +0 -1
- package/build/common/deps-checker/internal/funcToolChecker.d.ts.map +0 -1
- package/build/common/deps-checker/internal/funcToolChecker.js.map +0 -1
- package/build/common/deps-checker/internal/nodeChecker.d.ts.map +0 -1
- package/build/common/deps-checker/internal/nodeChecker.js.map +0 -1
- package/build/common/deps-checker/internal/testToolChecker.d.ts.map +0 -1
- package/build/common/deps-checker/internal/testToolChecker.js.map +0 -1
- package/build/common/deps-checker/internal/vxTestAppChecker.d.ts.map +0 -1
- package/build/common/deps-checker/internal/vxTestAppChecker.js.map +0 -1
- package/build/common/deps-checker/util/cpUtils.d.ts.map +0 -1
- package/build/common/deps-checker/util/cpUtils.js.map +0 -1
- package/build/common/deps-checker/util/downloadHelper.d.ts.map +0 -1
- package/build/common/deps-checker/util/downloadHelper.js.map +0 -1
- package/build/common/deps-checker/util/fileHelper.d.ts.map +0 -1
- package/build/common/deps-checker/util/fileHelper.js.map +0 -1
- package/build/common/deps-checker/util/index.d.ts.map +0 -1
- package/build/common/deps-checker/util/index.js.map +0 -1
- package/build/common/deps-checker/util/progressIndicator.d.ts.map +0 -1
- package/build/common/deps-checker/util/progressIndicator.js.map +0 -1
- package/build/common/deps-checker/util/system.d.ts.map +0 -1
- package/build/common/deps-checker/util/system.js.map +0 -1
- package/build/common/local/constants.d.ts.map +0 -1
- package/build/common/local/constants.js.map +0 -1
- package/build/common/local/index.d.ts.map +0 -1
- package/build/common/local/index.js.map +0 -1
- package/build/common/local/localCertificateManager.d.ts.map +0 -1
- package/build/common/local/localCertificateManager.js.map +0 -1
- package/build/common/local/localEnvManager.d.ts.map +0 -1
- package/build/common/local/localEnvManager.js.map +0 -1
- package/build/common/local/localTelemetryReporter.d.ts.map +0 -1
- package/build/common/local/localTelemetryReporter.js.map +0 -1
- package/build/common/local/npmLogHelper.d.ts.map +0 -1
- package/build/common/local/npmLogHelper.js.map +0 -1
- package/build/common/local/packageJsonHelper.d.ts.map +0 -1
- package/build/common/local/packageJsonHelper.js.map +0 -1
- package/build/common/local/portChecker.d.ts.map +0 -1
- package/build/common/local/portChecker.js.map +0 -1
- package/build/common/local/process.d.ts.map +0 -1
- package/build/common/local/process.js.map +0 -1
- package/build/common/local/taskDefinition.d.ts.map +0 -1
- package/build/common/local/taskDefinition.js.map +0 -1
- package/build/common/m365/constants.d.ts.map +0 -1
- package/build/common/m365/constants.js.map +0 -1
- package/build/common/m365/errors.d.ts.map +0 -1
- package/build/common/m365/errors.js.map +0 -1
- package/build/common/m365/launchHelper.d.ts.map +0 -1
- package/build/common/m365/launchHelper.js.map +0 -1
- package/build/common/m365/packageService.d.ts.map +0 -1
- package/build/common/m365/packageService.js.map +0 -1
- package/build/common/m365/serviceConstant.d.ts +0 -3
- package/build/common/m365/serviceConstant.d.ts.map +0 -1
- package/build/common/m365/serviceConstant.js +0 -8
- package/build/common/m365/serviceConstant.js.map +0 -1
- package/build/common/projectSettingsHelperV3.d.ts +0 -2
- package/build/common/projectSettingsHelperV3.d.ts.map +0 -1
- package/build/common/projectSettingsHelperV3.js +0 -15
- package/build/common/projectSettingsHelperV3.js.map +0 -1
- package/build/component/utils.d.ts +0 -12
- package/build/component/utils.d.ts.map +0 -1
- package/build/component/utils.js +0 -136
- package/build/component/utils.js.map +0 -1
- package/build/component/workflow.d.ts +0 -4
- package/build/component/workflow.d.ts.map +0 -1
- package/build/component/workflow.js +0 -18
- package/build/component/workflow.js.map +0 -1
- package/build/core/error.d.ts +0 -32
- package/build/core/error.d.ts.map +0 -1
- package/build/core/error.js +0 -122
- package/build/core/error.js.map +0 -1
- package/build/core/globalVars.d.ts.map +0 -1
- package/build/core/globalVars.js.map +0 -1
- package/build/failpoint/index.d.ts +0 -3
- package/build/failpoint/index.d.ts.map +0 -1
- package/build/failpoint/index.js +0 -11
- package/build/failpoint/index.js.map +0 -1
- package/build/failpoint/marker.d.ts +0 -13
- package/build/failpoint/marker.d.ts.map +0 -1
- package/build/failpoint/marker.js +0 -8
- package/build/failpoint/marker.js.map +0 -1
- package/build/failpoint/runtime.d.ts +0 -12
- package/build/failpoint/runtime.d.ts.map +0 -1
- package/build/failpoint/runtime.js +0 -67
- package/build/failpoint/runtime.js.map +0 -1
- package/build/question/questionNames.d.ts +0 -78
- package/build/question/questionNames.d.ts.map +0 -1
- package/build/question/questionNames.js +0 -85
- package/build/question/questionNames.js.map +0 -1
- package/build/question/util.d.ts +0 -2
- package/build/question/util.d.ts.map +0 -1
- package/build/question/util.js +0 -18
- package/build/question/util.js.map +0 -1
- /package/build/{common → component}/deps-checker/checkerFactory.d.ts +0 -0
- /package/build/{common → component}/deps-checker/checkerFactory.js +0 -0
- /package/build/{common → component}/deps-checker/constant/index.d.ts +0 -0
- /package/build/{common → component}/deps-checker/constant/index.js +0 -0
- /package/build/{common → component}/deps-checker/constant/message.d.ts +0 -0
- /package/build/{common → component}/deps-checker/constant/telemetry.d.ts +0 -0
- /package/build/{common → component}/deps-checker/constant/telemetry.js +0 -0
- /package/build/{common → component}/deps-checker/coreDepsLoggerAdapter.d.ts +0 -0
- /package/build/{common → component}/deps-checker/coreDepsLoggerAdapter.js +0 -0
- /package/build/{common → component}/deps-checker/coreDepsTelemetryAdapter.d.ts +0 -0
- /package/build/{common → component}/deps-checker/depsChecker.d.ts +0 -0
- /package/build/{common → component}/deps-checker/depsChecker.js +0 -0
- /package/build/{common → component}/deps-checker/depsError.d.ts +0 -0
- /package/build/{common → component}/deps-checker/depsError.js +0 -0
- /package/build/{common → component}/deps-checker/depsLogger.d.ts +0 -0
- /package/build/{common → component}/deps-checker/depsLogger.js +0 -0
- /package/build/{common → component}/deps-checker/depsManager.d.ts +0 -0
- /package/build/{common → component}/deps-checker/depsManager.js +0 -0
- /package/build/{common → component}/deps-checker/depsTelemetry.d.ts +0 -0
- /package/build/{common → component}/deps-checker/depsTelemetry.js +0 -0
- /package/build/{common → component}/deps-checker/index.d.ts +0 -0
- /package/build/{common → component}/deps-checker/index.js +0 -0
- /package/build/{common → component}/deps-checker/internal/dotnetChecker.d.ts +0 -0
- /package/build/{common → component}/deps-checker/internal/funcToolChecker.d.ts +0 -0
- /package/build/{common → component}/deps-checker/internal/nodeChecker.d.ts +0 -0
- /package/build/{common → component}/deps-checker/internal/nodeChecker.js +0 -0
- /package/build/{common → component}/deps-checker/internal/testToolChecker.d.ts +0 -0
- /package/build/{common → component}/deps-checker/internal/vxTestAppChecker.d.ts +0 -0
- /package/build/{common → component}/deps-checker/util/cpUtils.d.ts +0 -0
- /package/build/{common → component}/deps-checker/util/cpUtils.js +0 -0
- /package/build/{common → component}/deps-checker/util/downloadHelper.d.ts +0 -0
- /package/build/{common → component}/deps-checker/util/downloadHelper.js +0 -0
- /package/build/{common → component}/deps-checker/util/fileHelper.d.ts +0 -0
- /package/build/{common → component}/deps-checker/util/fileHelper.js +0 -0
- /package/build/{common → component}/deps-checker/util/index.d.ts +0 -0
- /package/build/{common → component}/deps-checker/util/index.js +0 -0
- /package/build/{common → component}/deps-checker/util/progressIndicator.d.ts +0 -0
- /package/build/{common → component}/deps-checker/util/progressIndicator.js +0 -0
- /package/build/{common → component}/deps-checker/util/system.d.ts +0 -0
- /package/build/{common → component}/deps-checker/util/system.js +0 -0
- /package/build/{common → component}/local/index.d.ts +0 -0
- /package/build/{common → component}/local/index.js +0 -0
- /package/build/{common → component}/local/localCertificateManager.d.ts +0 -0
- /package/build/{common → component}/local/localEnvManager.d.ts +0 -0
- /package/build/{common → component}/local/localEnvManager.js +0 -0
- /package/build/{common → component}/local/localTelemetryReporter.d.ts +0 -0
- /package/build/{common → component}/local/npmLogHelper.d.ts +0 -0
- /package/build/{common → component}/local/npmLogHelper.js +0 -0
- /package/build/{common → component}/local/packageJsonHelper.d.ts +0 -0
- /package/build/{common → component}/local/packageJsonHelper.js +0 -0
- /package/build/{common → component}/local/portChecker.d.ts +0 -0
- /package/build/{common → component}/local/process.d.ts +0 -0
- /package/build/{common → component}/local/process.js +0 -0
- /package/build/{common → component}/local/taskDefinition.d.ts +0 -0
- /package/build/{common → component}/m365/constants.d.ts +0 -0
- /package/build/{common → component}/m365/constants.js +0 -0
- /package/build/{common → component}/m365/errors.d.ts +0 -0
- /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)" ||
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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="$
|
|
624
|
+
version_file_url="$azure_feed/Runtime/$channel/latest.version"
|
|
422
625
|
elif [[ "$runtime" == "aspnetcore" ]]; then
|
|
423
|
-
version_file_url="$
|
|
626
|
+
version_file_url="$azure_feed/aspnetcore/Runtime/$channel/latest.version"
|
|
424
627
|
elif [ -z "$runtime" ]; then
|
|
425
|
-
version_file_url="$
|
|
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 "
|
|
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
|
-
|
|
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="$(
|
|
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" |
|
|
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="$(
|
|
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
|
|
552
|
-
|
|
553
|
-
|
|
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
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
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=$
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
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=$
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
727
|
-
wget_options="-q -S --spider --tries 5
|
|
728
|
-
|
|
729
|
-
|
|
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*
|
|
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
|
|
1162
|
+
local curl_exit_code=0;
|
|
789
1163
|
if [ -z "$out_path" ]; then
|
|
790
|
-
curl $curl_options "$remote_path_with_credential"
|
|
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"
|
|
1167
|
+
curl $curl_options -o "$out_path" "$remote_path_with_credential" 2>&1
|
|
1168
|
+
curl_exit_code=$?
|
|
793
1169
|
fi
|
|
794
|
-
|
|
795
|
-
|
|
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
|
-
|
|
799
|
-
|
|
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
|
|
818
|
-
|
|
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"
|
|
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"
|
|
1216
|
+
wget $wget_options $wget_options_extra -O "$out_path" "$remote_path_with_credential" 2>&1
|
|
1217
|
+
wget_result=$?
|
|
823
1218
|
fi
|
|
824
|
-
|
|
825
|
-
|
|
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
|
-
|
|
1238
|
+
get_download_link_from_aka_ms() {
|
|
838
1239
|
eval $invocation
|
|
839
|
-
valid_legacy_download_link=true
|
|
840
1240
|
|
|
841
|
-
|
|
842
|
-
|
|
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
|
-
|
|
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
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
867
|
-
|
|
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
|
-
|
|
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
|
-
|
|
873
|
-
|
|
874
|
-
|
|
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
|
-
|
|
891
|
-
|
|
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
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
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
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
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
|
-
|
|
952
|
-
|
|
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
|
-
|
|
967
|
-
|
|
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 = $
|
|
984
|
-
if is_dotnet_package_installed "$install_root" "$asset_relative_path" "$
|
|
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 = $
|
|
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="
|
|
1009
|
-
uncached_feed="
|
|
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
|
-
|
|
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:
|
|
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 " -
|
|
1116
|
-
echo " - LTS - most
|
|
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 " -
|
|
1120
|
-
echo " examples:
|
|
1121
|
-
echo "
|
|
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 -
|
|
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
|
|
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
|
|
1147
|
-
echo "
|
|
1148
|
-
echo "
|
|
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
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
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
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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://
|
|
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."
|