diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 5a1e9c38382..428f2b6419a 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -6,23 +6,23 @@ This file should be imported by eng/Versions.props - 11.0.0-beta.26425.121 - 11.0.0-beta.26425.121 - 11.0.0-beta.26425.121 - 11.0.0-rc.2.26425.121 - 11.0.0-rc.2.26425.121 - 11.0.0-rc.2.26425.121 - 11.0.0-rc.2.26425.121 - 11.0.0-rc.2.26425.121 - 11.0.0-rc.2.26425.121 - 11.0.0-rc.2.26425.121 - 11.0.0-rc.2.26425.121 - 11.0.0-rc.2.26425.121 - 11.0.0-rc.2.26425.121 - 11.0.0-rc.2.26425.121 - 11.0.0-rc.2.26425.121 - 11.0.0-rc.2.26425.121 - 11.0.0-rc.2.26425.121 + 11.0.0-beta.26426.126 + 11.0.0-beta.26426.126 + 11.0.0-beta.26426.126 + 11.0.0-rc.2.26426.126 + 11.0.0-rc.2.26426.126 + 11.0.0-rc.2.26426.126 + 11.0.0-rc.2.26426.126 + 11.0.0-rc.2.26426.126 + 11.0.0-rc.2.26426.126 + 11.0.0-rc.2.26426.126 + 11.0.0-rc.2.26426.126 + 11.0.0-rc.2.26426.126 + 11.0.0-rc.2.26426.126 + 11.0.0-rc.2.26426.126 + 11.0.0-rc.2.26426.126 + 11.0.0-rc.2.26426.126 + 11.0.0-rc.2.26426.126 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 246b0c5a86b..75eae603184 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,76 +1,76 @@ - + - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 - + https://github.com/dotnet/dotnet - e20a5af9c83aaf22b041bc9911de0cbfff9c7317 + 100002779ceec649fcfd00c233f673b494130827 diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index 4f5653d73ac..ce077368e40 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -14,10 +14,11 @@ parameters: # exist, and any pipeline that sets this to '' fall back to PAT-based auth via the CeapexPat parameter. CeapexServiceConnection: 'dnceng-onelocbuild-ceapex' - # GitHub App authentication for the OneLoc check-in PR (dnceng/internal only). - # The infrastructure identifiers are centralized here and the App path is enabled by default. - # DevDiv requires its own project-scoped service connection before this path can be enabled there. + # GitHub App authentication for the OneLoc check-in PR. + # dnceng/internal and DevDiv/DevDiv are enabled by default with their project-scoped service + # connections. Other projects must explicitly opt in after provisioning equivalent infrastructure. UseGitHubAppAuthentication: true + UseGitHubAppAuthenticationInOtherProjects: false GitHubAppServiceConnection: 'dnceng-oneloc-githubapp' GitHubAppClientId: 'Iv23lijBU8x3gc9lDOc9' GitHubAppKeyVaultName: 'EngKeyVault' @@ -98,13 +99,16 @@ jobs: outputVariableName: 'CeapexEntraToken' condition: ${{ parameters.condition }} - # Mint a short-lived GitHub App installation token for the loc check-in PR (dnceng/internal only). - # All other projects fall back to PAT-based auth, since the app service connection is scoped to dnceng/internal. - - ${{ if and(eq(parameters.RepoType, 'gitHub'), eq(parameters.UseGitHubAppAuthentication, true), eq(variables['System.TeamProject'], 'internal')) }}: + # Mint a short-lived GitHub App installation token for the loc check-in PR. Use the connection + # provisioned in each supported project; other projects must explicitly opt in and override it. + - ${{ if and(eq(parameters.RepoType, 'gitHub'), eq(parameters.UseGitHubAppAuthentication, true), or(eq(variables['System.TeamProject'], 'internal'), eq(variables['System.TeamProject'], 'DevDiv'), eq(parameters.UseGitHubAppAuthenticationInOtherProjects, true))) }}: - template: /eng/common/core-templates/steps/get-github-app-token.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} - azureSubscription: ${{ parameters.GitHubAppServiceConnection }} + ${{ if and(eq(variables['System.TeamProject'], 'DevDiv'), eq(parameters.GitHubAppServiceConnection, 'dnceng-oneloc-githubapp')) }}: + azureSubscription: 'devdiv-oneloc-githubapp' + ${{ else }}: + azureSubscription: ${{ parameters.GitHubAppServiceConnection }} keyVaultName: ${{ parameters.GitHubAppKeyVaultName }} keyName: ${{ parameters.GitHubAppKeyName }} appClientId: ${{ parameters.GitHubAppClientId }} @@ -133,9 +137,9 @@ jobs: patVariable: ${{ parameters.CeapexPat }} ${{ if eq(parameters.RepoType, 'gitHub') }}: repoType: ${{ parameters.RepoType }} - ${{ if and(eq(parameters.UseGitHubAppAuthentication, true), eq(variables['System.TeamProject'], 'internal')) }}: + ${{ if and(eq(parameters.UseGitHubAppAuthentication, true), or(eq(variables['System.TeamProject'], 'internal'), eq(variables['System.TeamProject'], 'DevDiv'), eq(parameters.UseGitHubAppAuthenticationInOtherProjects, true))) }}: gitHubPatVariable: "$(GitHubAppInstallationToken)" - ${{ if or(eq(parameters.UseGitHubAppAuthentication, false), ne(variables['System.TeamProject'], 'internal')) }}: + ${{ else }}: gitHubPatVariable: "${{ parameters.GithubPat }}" ${{ if ne(parameters.MirrorRepo, '') }}: isMirrorRepoSelected: true diff --git a/eng/common/core-templates/steps/publish-logs.yml b/eng/common/core-templates/steps/publish-logs.yml index 3f0a9b9e6aa..244fef0890e 100644 --- a/eng/common/core-templates/steps/publish-logs.yml +++ b/eng/common/core-templates/steps/publish-logs.yml @@ -26,7 +26,7 @@ steps: # Sensitive data can as well be added to $(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt' # If the file exists - sensitive data for redaction will be sourced from it # (single entry per line, lines starting with '# ' are considered comments and skipped) - ${{ if and(parameters.enableInternalRuntimes, ne(variables['System.TeamProject'], 'public')) }}: + ${{ if and(eq(parameters.enableInternalRuntimes, true), ne(variables['System.TeamProject'], 'public')) }}: arguments: -InputPath '$(System.DefaultWorkingDirectory)/PostBuildLogs' -BinlogToolVersion '${{parameters.BinlogToolVersion}}' -TokensFilePath '$(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt' diff --git a/global.json b/global.json index ded06cc023a..760ff2ff280 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26425.121", - "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26425.121", + "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26426.126", + "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26426.126", "Microsoft.Build.NoTargets": "3.7.134" } } diff --git a/test/EFCore.Cosmos.FunctionalTests/Query/Associations/ComplexProperties/ComplexPropertiesProjectionCosmosTest.cs b/test/EFCore.Cosmos.FunctionalTests/Query/Associations/ComplexProperties/ComplexPropertiesProjectionCosmosTest.cs index 5c761851f61..d030b45a83e 100644 --- a/test/EFCore.Cosmos.FunctionalTests/Query/Associations/ComplexProperties/ComplexPropertiesProjectionCosmosTest.cs +++ b/test/EFCore.Cosmos.FunctionalTests/Query/Associations/ComplexProperties/ComplexPropertiesProjectionCosmosTest.cs @@ -435,7 +435,9 @@ public override async Task Select_nullable_value_type_with_Value(QueryTrackingBe { var ex = await Assert.ThrowsAsync(() => base.Select_nullable_value_type_with_Value(queryTrackingBehavior)); - Assert.Equal("Nullable object must have a value.", ex.Message); + Assert.Equal( + "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.", + ex.Message); AssertSql( """ diff --git a/test/EFCore.Cosmos.FunctionalTests/Query/JsonQueryCosmosTest.cs b/test/EFCore.Cosmos.FunctionalTests/Query/JsonQueryCosmosTest.cs index c922d40552e..5dd1971cee9 100644 --- a/test/EFCore.Cosmos.FunctionalTests/Query/JsonQueryCosmosTest.cs +++ b/test/EFCore.Cosmos.FunctionalTests/Query/JsonQueryCosmosTest.cs @@ -2364,7 +2364,9 @@ public virtual async Task Project_null_value_required_scalar() // Same as in 10.0 var ex = await Assert.ThrowsAsync(() => context.Set().Where(x => x.Id == 4).Select(x => x.RequiredReference.Number).ToListAsync()); - Assert.Equal("Nullable object must have a value.", ex.Message); + Assert.Equal( + "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.", + ex.Message); } public override Task Project_root_entity_with_missing_required_navigation(bool async) diff --git a/test/EFCore.InMemory.FunctionalTests/Query/GearsOfWarQueryInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/GearsOfWarQueryInMemoryTest.cs index ad8785acf74..ca356450238 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/GearsOfWarQueryInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/GearsOfWarQueryInMemoryTest.cs @@ -17,7 +17,7 @@ public override Task Client_member_and_unsupported_string_Equals_in_the_same_que public override async Task Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex(bool async) => Assert.Equal( - "Nullable object must have a value.", + "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.", (await Assert.ThrowsAsync(() => base .Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation_complex( async))).Message); @@ -126,7 +126,7 @@ public override Task Subquery_inside_Take_argument(bool async) public override async Task Find_underlying_property_after_GroupJoin_DefaultIfEmpty(bool async) => Assert.Equal( - "Nullable object must have a value.", + "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.", (await Assert.ThrowsAsync(() => base .Find_underlying_property_after_GroupJoin_DefaultIfEmpty( async))).Message); diff --git a/test/EFCore.InMemory.FunctionalTests/Query/NorthwindAggregateOperatorsQueryInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/NorthwindAggregateOperatorsQueryInMemoryTest.cs index 74ba71c6c58..91e768ca6b0 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/NorthwindAggregateOperatorsQueryInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/NorthwindAggregateOperatorsQueryInMemoryTest.cs @@ -39,7 +39,7 @@ public override async Task Average_on_nav_subquery_in_projection(bool async) public override async Task Sum_over_scalar_returning_subquery(bool async) => Assert.Equal( - "Nullable object must have a value.", + "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.", (await Assert.ThrowsAsync(() => base.Sum_over_scalar_returning_subquery(async))).Message); public override Task Collection_Last_member_access_in_projection_translated(bool async) diff --git a/test/EFCore.Relational.Specification.Tests/Query/AdHocMiscellaneousQueryRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/AdHocMiscellaneousQueryRelationalTestBase.cs index 522541a25a4..11b54b6b843 100644 --- a/test/EFCore.Relational.Specification.Tests/Query/AdHocMiscellaneousQueryRelationalTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Query/AdHocMiscellaneousQueryRelationalTestBase.cs @@ -967,7 +967,7 @@ public virtual async Task Plain_inner_no_aggregate_LeftJoin_whole_object() .OrderBy(e => e.PickupStatusId); var ex = await Assert.ThrowsAsync(() => query.ToListAsync()); - Assert.Contains("Nullable object must have a value", ex.Message); + Assert.Contains("Cannot read the Value property of a Nullable object that has no value", ex.Message); // #30915 TODO: currently throws on base; flip to assert results if/when fixed. } @@ -1428,7 +1428,7 @@ public virtual async Task RightJoin_whole_object_outer_nullable() // marker is injected for the INNER nullable side of LEFT JOIN / DefaultIfEmpty only, so this // RIGHT JOIN whole-object shape is not covered and still fails during materialization. var ex = await Assert.ThrowsAsync(() => query.ToListAsync()); - Assert.Contains("Nullable object must have a value", ex.Message); + Assert.Contains("Cannot read the Value property of a Nullable object that has no value", ex.Message); // #30915 TODO: RightJoin (outer-nullable) whole-object not yet covered; flip to assert results if/when fixed. } diff --git a/test/EFCore.Relational.Specification.Tests/Query/NorthwindAggregateOperatorsQueryRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/NorthwindAggregateOperatorsQueryRelationalTestBase.cs index 5fb36f534b5..58ef7246852 100644 --- a/test/EFCore.Relational.Specification.Tests/Query/NorthwindAggregateOperatorsQueryRelationalTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Query/NorthwindAggregateOperatorsQueryRelationalTestBase.cs @@ -26,26 +26,26 @@ public override async Task Contains_over_keyless_entity_throws(bool async) public override async Task Min_no_data_subquery(bool async) => Assert.Equal( - "Nullable object must have a value.", + "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.", (await Assert.ThrowsAsync(() => base.Min_no_data_subquery(async))).Message); public override async Task Max_no_data_subquery(bool async) => Assert.Equal( - "Nullable object must have a value.", + "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.", (await Assert.ThrowsAsync(() => base.Max_no_data_subquery(async))).Message); public override async Task MinBy_no_data_subquery_value_type(bool async) => Assert.Equal( - "Nullable object must have a value.", + "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.", (await Assert.ThrowsAsync(() => base.MinBy_no_data_subquery_value_type(async))).Message); public override async Task MaxBy_no_data_subquery_value_type(bool async) => Assert.Equal( - "Nullable object must have a value.", + "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.", (await Assert.ThrowsAsync(() => base.MaxBy_no_data_subquery_value_type(async))).Message); public override async Task Average_no_data_subquery(bool async) => Assert.Equal( - "Nullable object must have a value.", + "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.", (await Assert.ThrowsAsync(() => base.Average_no_data_subquery(async))).Message); } diff --git a/test/EFCore.Specification.Tests/CustomConvertersTestBase.cs b/test/EFCore.Specification.Tests/CustomConvertersTestBase.cs index 29d714700f6..780788f25d1 100644 --- a/test/EFCore.Specification.Tests/CustomConvertersTestBase.cs +++ b/test/EFCore.Specification.Tests/CustomConvertersTestBase.cs @@ -680,7 +680,7 @@ public virtual async Task Optional_owned_with_converter_reading_non_nullable_col { using var context = CreateContext(); Assert.Equal( - "Nullable object must have a value.", + "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.", (await Assert.ThrowsAsync(() => context.Set().Select(e => new { e.OwnedWithConverter!.Value }).ToListAsync())) .Message); diff --git a/test/EFCore.Specification.Tests/Query/NorthwindMiscellaneousQueryTestBase.cs b/test/EFCore.Specification.Tests/Query/NorthwindMiscellaneousQueryTestBase.cs index 2eb11236171..10b2d92dbd9 100644 --- a/test/EFCore.Specification.Tests/Query/NorthwindMiscellaneousQueryTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/NorthwindMiscellaneousQueryTestBase.cs @@ -4671,7 +4671,7 @@ private static int ClientMethod(int s) [Theory, MemberData(nameof(IsAsyncData))] public virtual async Task Non_nullable_property_through_optional_navigation(bool async) => Assert.Equal( - "Nullable object must have a value.", + "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.", (await Assert.ThrowsAsync(() => AssertQuery( async, ss => ss.Set().Select(e => new { e.Region!.Length })))).Message); diff --git a/test/EFCore.Specification.Tests/Query/OwnedQueryTestBase.cs b/test/EFCore.Specification.Tests/Query/OwnedQueryTestBase.cs index ed5d59c8e00..dfb99e88fc4 100644 --- a/test/EFCore.Specification.Tests/Query/OwnedQueryTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/OwnedQueryTestBase.cs @@ -675,7 +675,7 @@ public virtual Task GroupBy_with_multiple_aggregates_on_owned_navigation_propert [Theory, MemberData(nameof(IsAsyncData))] public virtual async Task Non_nullable_property_through_optional_navigation(bool async) => Assert.Equal( - "Nullable object must have a value.", + "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.", (await Assert.ThrowsAsync(() => AssertQuery( async, ss => ss.Set().Select(e => new { e.Throned!.Value })))).Message); diff --git a/test/EFCore.Specification.Tests/TestUtilities/QueryTestGeneration/ProceduralQueryExpressionGenerator.cs b/test/EFCore.Specification.Tests/TestUtilities/QueryTestGeneration/ProceduralQueryExpressionGenerator.cs index c3642499d2f..8886ba91a3b 100644 --- a/test/EFCore.Specification.Tests/TestUtilities/QueryTestGeneration/ProceduralQueryExpressionGenerator.cs +++ b/test/EFCore.Specification.Tests/TestUtilities/QueryTestGeneration/ProceduralQueryExpressionGenerator.cs @@ -175,7 +175,9 @@ static ProcedurallyGeneratedQueryExecutor() AddExpectedFailure("GroupBy_optional_navigation_member_Aggregate", "Incorrect syntax near '+'."); // 12656 AddExpectedFailure("GroupBy_Property_Select_Key_Max", "Incorrect syntax near '+'."); // 12656 - AddExpectedFailure("Collection_select_nav_prop_sum", "Nullable object must have a value."); // 12657 + AddExpectedFailure( + "Collection_select_nav_prop_sum", + "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value."); // 12657 AddExpectedFailure("Simple_owned_level1_level2_GroupBy_Having_Count", "Incorrect syntax near '+'."); // 12658