From 90f40b84c336eeabd0704e48d722055a30359879 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Sat, 24 Aug 2019 02:20:57 +0000 Subject: [PATCH 1/5] Update dependencies from https://github.com/aspnet/Extensions build 20190823.1 (#17407) - Microsoft.Extensions.Configuration.Json - 3.0.0-rc1.19423.1 - Microsoft.Extensions.DependencyInjection - 3.0.0-rc1.19423.1 - Microsoft.Extensions.Configuration.EnvironmentVariables - 3.0.0-rc1.19423.1 - Microsoft.Extensions.Configuration - 3.0.0-rc1.19423.1 - Microsoft.Extensions.Caching.Memory - 3.0.0-rc1.19423.1 - Microsoft.Extensions.HostFactoryResolver.Sources - 3.0.0-rc1.19423.1 - Microsoft.Extensions.Logging - 3.0.0-rc1.19423.1 Dependency coherency updates - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-rc1-19422-14 (parent: Microsoft.Extensions.Logging) - Microsoft.DotNet.PlatformAbstractions - 3.0.0-rc1-19422-14 (parent: Microsoft.Extensions.Logging) - Microsoft.Extensions.DependencyModel - 3.0.0-rc1-19422-14 (parent: Microsoft.Extensions.Logging) - Microsoft.NETCore.App.Ref - 3.0.0-rc1-19422-14 (parent: Microsoft.Extensions.Logging) - NETStandard.Library.Ref - 2.1.0-rc1-19422-14 (parent: Microsoft.Extensions.Logging) - Microsoft.Net.Compilers.Toolset - 3.3.1-beta3-19422-05 (parent: Microsoft.Extensions.Logging) --- eng/Version.Details.xml | 52 ++++++++++++++++++++--------------------- eng/Versions.props | 26 ++++++++++----------- 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 9810773907a..aa852522de3 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -5,53 +5,53 @@ https://github.com/dotnet/corefx d341fd37dcb2c22e382adccdc06770cf8f160577 - + https://github.com/dotnet/core-setup - de78ba11198343228e7e4f8fbf2117add6c67944 + 24da14999a8c6d711972b72812ec0c0df82be0c9 - + https://github.com/aspnet/Extensions - a459d9eab2a21b657ac567841ceb5b1085ea59b6 + 9fc4627865c4bfe09d554e72b52fbefbbba72aee - + https://github.com/aspnet/Extensions - a459d9eab2a21b657ac567841ceb5b1085ea59b6 + 9fc4627865c4bfe09d554e72b52fbefbbba72aee - + https://github.com/aspnet/Extensions - a459d9eab2a21b657ac567841ceb5b1085ea59b6 + 9fc4627865c4bfe09d554e72b52fbefbbba72aee - + https://github.com/aspnet/Extensions - a459d9eab2a21b657ac567841ceb5b1085ea59b6 + 9fc4627865c4bfe09d554e72b52fbefbbba72aee - + https://github.com/aspnet/Extensions - a459d9eab2a21b657ac567841ceb5b1085ea59b6 + 9fc4627865c4bfe09d554e72b52fbefbbba72aee - + https://github.com/dotnet/core-setup - de78ba11198343228e7e4f8fbf2117add6c67944 + 24da14999a8c6d711972b72812ec0c0df82be0c9 - + https://github.com/aspnet/Extensions - a459d9eab2a21b657ac567841ceb5b1085ea59b6 + 9fc4627865c4bfe09d554e72b52fbefbbba72aee - + https://github.com/aspnet/Extensions - a459d9eab2a21b657ac567841ceb5b1085ea59b6 + 9fc4627865c4bfe09d554e72b52fbefbbba72aee - + https://github.com/dotnet/core-setup - de78ba11198343228e7e4f8fbf2117add6c67944 + 24da14999a8c6d711972b72812ec0c0df82be0c9 - + https://github.com/dotnet/core-setup - de78ba11198343228e7e4f8fbf2117add6c67944 + 24da14999a8c6d711972b72812ec0c0df82be0c9 - + https://github.com/dotnet/core-setup - de78ba11198343228e7e4f8fbf2117add6c67944 + 24da14999a8c6d711972b72812ec0c0df82be0c9 https://github.com/dotnet/corefx @@ -71,9 +71,9 @@ https://github.com/dotnet/arcade 0e36c2410b72166a1b9a67142e652225e22feada - + https://github.com/dotnet/roslyn - 807f6d9c1f62e66aa907513ccf0fa5b2372748f6 + 8cf35ae627a2ab41758993875ac987fc3b188f1f diff --git a/eng/Versions.props b/eng/Versions.props index 663fcefc314..e192178f0f7 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -27,13 +27,13 @@ 1.0.19221.1-Preview - 3.0.0-rc1.19422.7 - 3.0.0-rc1.19422.7 - 3.0.0-rc1.19422.7 - 3.0.0-rc1.19422.7 - 3.0.0-rc1.19422.7 - 3.0.0-rc1.19422.7 - 3.0.0-rc1.19422.7 + 3.0.0-rc1.19423.1 + 3.0.0-rc1.19423.1 + 3.0.0-rc1.19423.1 + 3.0.0-rc1.19423.1 + 3.0.0-rc1.19423.1 + 3.0.0-rc1.19423.1 + 3.0.0-rc1.19423.1 4.6.0-rc1.19420.10 @@ -42,14 +42,14 @@ 4.6.0-rc1.19420.10 - 3.0.0-rc1-19421-22 - 3.0.0-rc1-19421-22 - 3.0.0-rc1-19421-22 - 3.0.0-rc1-19421-22 - 2.1.0-rc1-19421-22 + 3.0.0-rc1-19422-14 + 3.0.0-rc1-19422-14 + 3.0.0-rc1-19422-14 + 3.0.0-rc1-19422-14 + 2.1.0-rc1-19422-14 - 3.3.1-beta3-19422-01 + 3.3.1-beta3-19422-05 $(WorkItemDirectory) + $(WorkItemCommand) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(BaselineCoreRunArgument) --artifacts $(BaselineArtifactsDirectory) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" $(WorkItemCommand) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument) --artifacts $(ArtifactsDirectory) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" + $(DotnetExe) run -f $(_Framework) -p $(ResultsComparer) --base $(BaselineArtifactsDirectory) --diff $(ArtifactsDirectory) --threshold 2$(Percent) --xml $(XMLResults);$(FinalCommand) 4:00 + $(WorkItemDirectory) + $(WorkItemCommand) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(BaselineCoreRunArgument) --artifacts $(ArtifactsDirectory)" $(WorkItemCommand) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument) --artifacts $(ArtifactsDirectory)" + $(DotnetExe) run -f $(_Framework) -p $(ResultsComparer) --base $(BaselineArtifactsDirectory) --diff $(ArtifactsDirectory) --threshold 2$(Percent) --xml $(XMLResults) 4:00 diff --git a/eng/common/performance/performance-setup.ps1 b/eng/common/performance/performance-setup.ps1 index 4a6706b638a..268986246e5 100644 --- a/eng/common/performance/performance-setup.ps1 +++ b/eng/common/performance/performance-setup.ps1 @@ -1,6 +1,7 @@ Param( [string] $SourceDirectory=$env:BUILD_SOURCESDIRECTORY, [string] $CoreRootDirectory, + [string] $BaselineCoreRootDirectory, [string] $Architecture="x64", [string] $Framework="netcoreapp5.0", [string] $CompilationMode="Tiered", @@ -12,11 +13,13 @@ Param( [string] $Csproj="src\benchmarks\micro\MicroBenchmarks.csproj", [string] $Kind="micro", [switch] $Internal, + [switch] $Compare, [string] $Configurations="CompilationMode=$CompilationMode" ) $RunFromPerformanceRepo = ($Repository -eq "dotnet/performance") $UseCoreRun = ($CoreRootDirectory -ne [string]::Empty) +$UseBaselineCoreRun = ($BaselineCoreRootDirectory -ne [string]::Empty) $PayloadDirectory = (Join-Path $SourceDirectory "Payload") $PerformanceDirectory = (Join-Path $PayloadDirectory "performance") @@ -29,7 +32,13 @@ $HelixSourcePrefix = "pr" $Queue = "Windows.10.Amd64.ClientRS4.DevEx.15.8.Open" if ($Framework.StartsWith("netcoreapp")) { - $Queue = "Windows.10.Amd64.ClientRS4.Open" + $Queue = "Windows.10.Amd64.ClientRS5.Open" +} + +if ($Compare) { + $Queue = "Windows.10.Amd64.19H1.Tiger.Perf.Open" + $PerfLabArguments = "" + $ExtraBenchmarkDotNetArguments = "" } if ($Internal) { @@ -56,6 +65,10 @@ if ($UseCoreRun) { $NewCoreRoot = (Join-Path $PayloadDirectory "Core_Root") Move-Item -Path $CoreRootDirectory -Destination $NewCoreRoot } +if ($UseBaselineCoreRun) { + $NewBaselineCoreRoot = (Join-Path $PayloadDirectory "Baseline_Core_Root") + Move-Item -Path $BaselineCoreRootDirectory -Destination $NewBaselineCoreRoot +} $DocsDir = (Join-Path $PerformanceDirectory "docs") robocopy $DocsDir $WorkItemDirectory @@ -80,7 +93,9 @@ Write-PipelineSetVariable -Name 'TargetCsproj' -Value "$Csproj" -IsMultiJobVaria Write-PipelineSetVariable -Name 'Kind' -Value "$Kind" -IsMultiJobVariable $false Write-PipelineSetVariable -Name 'Architecture' -Value "$Architecture" -IsMultiJobVariable $false Write-PipelineSetVariable -Name 'UseCoreRun' -Value "$UseCoreRun" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'UseBaselineCoreRun' -Value "$UseBaselineCoreRun" -IsMultiJobVariable $false Write-PipelineSetVariable -Name 'RunFromPerfRepo' -Value "$RunFromPerformanceRepo" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'Compare' -Value "$Compare" -IsMultiJobVariable $false # Helix Arguments Write-PipelineSetVariable -Name 'Creator' -Value "$Creator" -IsMultiJobVariable $false diff --git a/eng/common/performance/performance-setup.sh b/eng/common/performance/performance-setup.sh index 76126b1f86e..550b3ebf18e 100755 --- a/eng/common/performance/performance-setup.sh +++ b/eng/common/performance/performance-setup.sh @@ -2,6 +2,7 @@ source_directory=$BUILD_SOURCESDIRECTORY core_root_directory= +baseline_core_root_directory= architecture=x64 framework=netcoreapp5.0 compilation_mode=tiered @@ -10,12 +11,14 @@ branch=$BUILD_SOURCEBRANCH commit_sha=$BUILD_SOURCEVERSION build_number=$BUILD_BUILDNUMBER internal=false +compare=false kind="micro" run_categories="coreclr corefx" csproj="src\benchmarks\micro\MicroBenchmarks.csproj" configurations= run_from_perf_repo=false use_core_run=true +use_baseline_core_run=true while (($# > 0)); do lowerI="$(echo $1 | awk '{print tolower($0)}')" @@ -28,6 +31,10 @@ while (($# > 0)); do core_root_directory=$2 shift 2 ;; + --baselinecorerootdirectory) + baseline_core_root_directory=$2 + shift 2 + ;; --architecture) architecture=$2 shift 2 @@ -72,6 +79,10 @@ while (($# > 0)); do internal=true shift 1 ;; + --compare) + compare=true + shift 1 + ;; --configurations) configurations=$2 shift 2 @@ -114,6 +125,10 @@ if [ -z "$core_root_directory" ]; then use_core_run=false fi +if [ -z "$baseline_core_root_directory" ]; then + use_baseline_core_run=false +fi + payload_directory=$source_directory/Payload performance_directory=$payload_directory/performance workitem_directory=$source_directory/workitem @@ -123,6 +138,19 @@ queue=Ubuntu.1804.Amd64.Open creator=$BUILD_DEFINITIONNAME helix_source_prefix="pr" +if [[ "$compare" == true ]]; then + extra_benchmark_dotnet_arguments= + perflab_arguments= + + # No open queues for arm64 + if [[ "$architecture" = "arm64" ]]; then + echo "Compare not available for arm64" + exit 1 + fi + + queue=Ubuntu.1804.Amd64.Tiger.Perf.Open +fi + if [[ "$internal" == true ]]; then perflab_arguments="--upload-to-perflab-container" helix_source_prefix="official" @@ -156,6 +184,11 @@ if [[ "$use_core_run" = true ]]; then mv $core_root_directory $new_core_root fi +if [[ "$use_baseline_core_run" = true ]]; then + new_baseline_core_root=$payload_directory/Baseline_Core_Root + mv $baseline_core_root_directory $new_baseline_core_root +fi + ci=true _script_dir=$(pwd)/eng/common @@ -163,6 +196,7 @@ _script_dir=$(pwd)/eng/common # Make sure all of our variables are available for future steps Write-PipelineSetVariable -name "UseCoreRun" -value "$use_core_run" -is_multi_job_variable false +Write-PipelineSetVariable -name "UseBaselineCoreRun" -value "$use_baseline_core_run" -is_multi_job_variable false Write-PipelineSetVariable -name "Architecture" -value "$architecture" -is_multi_job_variable false Write-PipelineSetVariable -name "PayloadDirectory" -value "$payload_directory" -is_multi_job_variable false Write-PipelineSetVariable -name "PerformanceDirectory" -value "$performance_directory" -is_multi_job_variable false @@ -178,4 +212,5 @@ Write-PipelineSetVariable -name "RunFromPerfRepo" -value "$run_from_perf_repo" - Write-PipelineSetVariable -name "Creator" -value "$creator" -is_multi_job_variable false Write-PipelineSetVariable -name "HelixSourcePrefix" -value "$helix_source_prefix" -is_multi_job_variable false Write-PipelineSetVariable -name "Kind" -value "$kind" -is_multi_job_variable false -Write-PipelineSetVariable -name "_BuildConfig" -value "$architecture.$kind.$framework" -is_multi_job_variable false \ No newline at end of file +Write-PipelineSetVariable -name "_BuildConfig" -value "$architecture.$kind.$framework" -is_multi_job_variable false +Write-PipelineSetVariable -name "Compare" -value "$compare" -is_multi_job_variable false diff --git a/eng/common/post-build/sourcelink-validation.ps1 b/eng/common/post-build/sourcelink-validation.ps1 index 428e8c9607a..bbfdacca130 100644 --- a/eng/common/post-build/sourcelink-validation.ps1 +++ b/eng/common/post-build/sourcelink-validation.ps1 @@ -215,7 +215,7 @@ function ValidateSourceLinkLinks { } $ValidationFailures = 0 - foreach ($Job in $Jobs) { + foreach ($Job in @(Get-Job)) { $jobResult = Wait-Job -Id $Job.Id | Receive-Job if ($jobResult -ne "0") { $ValidationFailures++ diff --git a/eng/common/templates/post-build/channels/netcore-dev-5.yml b/eng/common/templates/post-build/channels/netcore-dev-5.yml index dab3a10e57d..812def31547 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-5.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-5.yml @@ -2,6 +2,7 @@ parameters: enableSymbolValidation: true symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false stages: - stage: NetCore_Dev5_Publish @@ -101,7 +102,12 @@ stages: /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release + /p:Configuration=Release + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 diff --git a/eng/common/templates/post-build/channels/netcore-tools-latest.yml b/eng/common/templates/post-build/channels/netcore-tools-latest.yml index 982ee006277..c2d2076730b 100644 --- a/eng/common/templates/post-build/channels/netcore-tools-latest.yml +++ b/eng/common/templates/post-build/channels/netcore-tools-latest.yml @@ -2,6 +2,7 @@ parameters: enableSymbolValidation: true symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false stages: - stage: NetCore_Tools_Latest_Publish @@ -101,7 +102,12 @@ stages: /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release + /p:Configuration=Release + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 diff --git a/eng/common/templates/post-build/channels/public-dev-release.yml b/eng/common/templates/post-build/channels/public-dev-release.yml index 36b28185581..afa95421480 100644 --- a/eng/common/templates/post-build/channels/public-dev-release.yml +++ b/eng/common/templates/post-build/channels/public-dev-release.yml @@ -2,6 +2,7 @@ parameters: enableSymbolValidation: true symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false stages: - stage: Publish @@ -102,6 +103,11 @@ stages: /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 diff --git a/eng/common/templates/post-build/channels/public-validation-release.yml b/eng/common/templates/post-build/channels/public-validation-release.yml index c62831095b0..12124d62157 100644 --- a/eng/common/templates/post-build/channels/public-validation-release.yml +++ b/eng/common/templates/post-build/channels/public-validation-release.yml @@ -1,5 +1,6 @@ parameters: artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false stages: - stage: PVR_Publish @@ -65,7 +66,12 @@ stages: /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' - /p:Configuration=Release + /p:Configuration=Release + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index 57aec719271..3f239fae2bb 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -98,22 +98,26 @@ stages: enableSymbolValidation: ${{ parameters.enableSymbolValidation }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - template: \eng\common\templates\post-build\channels\public-dev-release.yml parameters: enableSymbolValidation: ${{ parameters.enableSymbolValidation }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - template: \eng\common\templates\post-build\channels\netcore-tools-latest.yml parameters: enableSymbolValidation: ${{ parameters.enableSymbolValidation }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - template: \eng\common\templates\post-build\channels\public-validation-release.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - template: \eng\common\templates\post-build\channels\public-release.yml parameters: diff --git a/global.json b/global.json index 761c917141c..deb6db0e7cd 100644 --- a/global.json +++ b/global.json @@ -12,6 +12,6 @@ "version": "3.0.100-preview8-013656" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19416.16" + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19425.1" } } From e12d885aca9513ea428d696ebf74044f96fe3ec4 Mon Sep 17 00:00:00 2001 From: Brice Lambson Date: Mon, 26 Aug 2019 10:00:44 -0700 Subject: [PATCH 5/5] :arrow_up: Update NetTopologySuite packages --- eng/Versions.props | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 736da9f1b51..164eef699be 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -16,9 +16,9 @@ 2.8.0 2.8.0 4.3.0.1 - 2.0.0-pre001 - 2.0.0-pre001 - 2.0.0-pre001 + 2.0.0 + 2.0.0 + 2.0.0 2.0.0 2.0.0 2.0.0