diff --git a/.vault-config/dnceng-partners-kv.yaml b/.vault-config/dnceng-partners-kv.yaml index ee789347dec..9bf642c2c19 100644 --- a/.vault-config/dnceng-partners-kv.yaml +++ b/.vault-config/dnceng-partners-kv.yaml @@ -5,12 +5,6 @@ storageLocation: name: dnceng-partners-kv references: - dotnetbuildskeys: - type: azure-key-vault - parameters: - subscription: 11c6037b-227b-4d63-bee1-18c7b68c3a40 - name: dotnetbuildskeys - dotnetstagekeys: type: azure-key-vault parameters: @@ -30,15 +24,6 @@ references: name: helixkv secrets: - dotnetbuilds-internal-container-read-token: - type: azure-storage-container-sas-token - parameters: - connectionString: - name: dotnetbuilds-connection-string - location: dotnetbuildskeys - permissions: rl - container: internal - dotnetstage-account-sas-read-token: type: azure-storage-account-sas-token parameters: diff --git a/.vault-config/dotnetbuildskeys.yaml b/.vault-config/dotnetbuildskeys.yaml deleted file mode 100644 index 90a841b6763..00000000000 --- a/.vault-config/dotnetbuildskeys.yaml +++ /dev/null @@ -1,18 +0,0 @@ -storageLocation: - type: azure-key-vault - parameters: - subscription: 11c6037b-227b-4d63-bee1-18c7b68c3a40 - name: dotnetbuildskeys - -secrets: - dotnetbuilds-access-key: - type: azure-storage-key - parameters: - subscription: 11c6037b-227b-4d63-bee1-18c7b68c3a40 - account: dotnetbuilds - - dotnetbuilds-connection-string: - type: azure-storage-connection-string - parameters: - storageKeySecret: dotnetbuilds-access-key - account: dotnetbuilds diff --git a/.vault-config/dotnetbuildstokens.yaml b/.vault-config/dotnetbuildstokens.yaml deleted file mode 100644 index d5df0158a5d..00000000000 --- a/.vault-config/dotnetbuildstokens.yaml +++ /dev/null @@ -1,126 +0,0 @@ -storageLocation: - type: azure-key-vault - parameters: - subscription: 11c6037b-227b-4d63-bee1-18c7b68c3a40 - name: dotnetbuildstokens - -references: - dotnetbuildskeys: - type: azure-key-vault - parameters: - subscription: 11c6037b-227b-4d63-bee1-18c7b68c3a40 - name: dotnetbuildskeys - -secrets: - dotnetbuilds-internal-container-read-uri: - type: azure-storage-container-sas-uri - parameters: - connectionString: - name: dotnetbuilds-connection-string - location: dotnetbuildskeys - permissions: rl - container: internal - - dotnetbuilds-internal-container-read-uri-base64: - type: base64-encoder - parameters: - secret: dotnetbuilds-internal-container-read-uri - - dotnetbuilds-internal-container-read-token: - type: azure-storage-container-sas-token - parameters: - connectionString: - name: dotnetbuilds-connection-string - location: dotnetbuildskeys - permissions: rl - container: internal - - dotnetbuilds-internal-container-read-token-base64: - type: base64-encoder - parameters: - secret: dotnetbuilds-internal-container-read-token - - dotnetbuilds-internal-checksums-container-read-token: - type: azure-storage-container-sas-token - parameters: - connectionString: - name: dotnetbuilds-connection-string - location: dotnetbuildskeys - permissions: rl - container: internal-checksums - - dotnetbuilds-internal-checksums-container-read-token-base64: - type: base64-encoder - parameters: - secret: dotnetbuilds-internal-checksums-container-read-token - - dotnetbuilds-internal-container-uri: - type: azure-storage-container-sas-uri - parameters: - connectionString: - name: dotnetbuilds-connection-string - location: dotnetbuildskeys - permissions: rlwc - container: internal - - dotnetbuilds-internal-container-uri-base64: - type: base64-encoder - parameters: - secret: dotnetbuilds-internal-container-uri - - dotnetbuilds-internal-container-checksum-uri: - type: azure-storage-container-sas-uri - parameters: - connectionString: - name: dotnetbuilds-connection-string - location: dotnetbuildskeys - permissions: rlwc - container: internal-checksums - - dotnetbuilds-internal-container-checksum-uri-base64: - type: base64-encoder - parameters: - secret: dotnetbuilds-internal-container-checksum-uri - - dotnetbuilds-public-container-uri: - type: azure-storage-container-sas-uri - parameters: - connectionString: - name: dotnetbuilds-connection-string - location: dotnetbuildskeys - permissions: rlwc - container: public - - dotnetbuilds-public-container-uri-base64: - type: base64-encoder - parameters: - secret: dotnetbuilds-public-container-uri - - dotnetbuilds-public-container-checksum-uri: - type: azure-storage-container-sas-uri - parameters: - connectionString: - name: dotnetbuilds-connection-string - location: dotnetbuildskeys - permissions: rlwc - container: public-checksums - - dotnetbuilds-public-container-checksum-uri-base64: - type: base64-encoder - parameters: - secret: dotnetbuilds-public-container-checksum-uri - - - dotnetbuilds-account-read-sas-token: - type: azure-storage-account-sas-token - parameters: - connectionString: - name: dotnetbuilds-connection-string - location: dotnetbuildskeys - permissions: rl - service: blob - - dotnetbuilds-account-read-sas-token-base64: - type: base64-encoder - parameters: - secret: dotnetbuilds-account-read-sas-token diff --git a/.vault-config/product-builds-dnceng-pipeline-secrets.yaml b/.vault-config/product-builds-dnceng-pipeline-secrets.yaml index df07df86120..22eafdf8df0 100644 --- a/.vault-config/product-builds-dnceng-pipeline-secrets.yaml +++ b/.vault-config/product-builds-dnceng-pipeline-secrets.yaml @@ -30,17 +30,6 @@ secrets: name: BotAccount-dotnet-comment-bot gitHubBotAccountName: dotnet-comment-bot - #DotNet-DotNetCli-Storage - dotnetcli-storage-key: - type: text - parameters: - description: set to never expire - - dotnetclichecksums-storage-key: - type: text - parameters: - description: set to never expire - # Service Principal used by the Guardian APIScan build task apiscan-service-principal-app-id: type: text diff --git a/.vault-config/product-builds-engkeyvault.yaml b/.vault-config/product-builds-engkeyvault.yaml index e8d866c5d1c..4148c58dbf3 100644 --- a/.vault-config/product-builds-engkeyvault.yaml +++ b/.vault-config/product-builds-engkeyvault.yaml @@ -10,12 +10,6 @@ references: parameters: subscription: a4fc5514-21a9-4296-bfaf-5c7ee7fa35d1 name: helixkv - - dotnetbuildskeys: - type: azure-key-vault - parameters: - subscription: 11c6037b-227b-4d63-bee1-18c7b68c3a40 - name: dotnetbuildskeys secrets: BotAccount-dotnet-maestro-bot: @@ -28,13 +22,6 @@ secrets: parameters: Name: dotnet-bot - #DotNet-Blob-Feed - dotnetfeed-storage-access-key-1: - type: azure-storage-key - parameters: - subscription: a4fc5514-21a9-4296-bfaf-5c7ee7fa35d1 - account: dotnetfeed - #Publish-Build-Assets BotAccount-dotnet-maestro-bot-PAT: type: github-access-token @@ -59,19 +46,10 @@ secrets: organizations: dnceng scopes: build_execute code_write - akams: - type: ad-application - - publishing-dnceng-devdiv-code-r-build-re: - type: azure-devops-access-token + akams-client-id: + type: text parameters: - domainAccountName: dn-bot - domainAccountSecret: - location: helixkv - name: dn-bot-account-redmond - name: publishing-dnceng-devdiv-code - organizations: dnceng devdiv - scopes: code build_execute + description: Client id for akams app dn-bot-dotnet-build-rw-code-rw: type: azure-devops-access-token @@ -162,66 +140,7 @@ secrets: name: dn-bot-account-redmond name: dn-symweb-symbol-server-pat organizations: microsoft - scopes: symbols_write - - dotnetfeedmsrc-storage-access-key-1: - type: text - parameters: - description: Also located in dnceng-pipeline-secrets keyvault. - - dotnetfeedmsrc-connection-string: - type: azure-storage-connection-string - parameters: - storageKeySecret: dotnetfeedmsrc-storage-access-key-1 - account: dotnetfeedmsrc - - dotnetfeedmsrc-read-sas-token: - type: azure-storage-container-sas-token - parameters: - connectionString: dotnetfeedmsrc-connection-string - permissions: r - container: $root - - dotnetfeedmsrc-read-sas-token-base64: - type: base64-encoder - parameters: - secret: dotnetfeedmsrc-read-sas-token - - dotnetbuilds-internal-container-read-token: - type: azure-storage-container-sas-token - parameters: - connectionString: - name: dotnetbuilds-connection-string - location: dotnetbuildskeys - permissions: rl - container: internal - - dotnetbuilds-public-container-read-token: - type: azure-storage-container-sas-token - parameters: - connectionString: - name: dotnetbuilds-connection-string - location: dotnetbuildskeys - permissions: rl - container: public - - dotnetbuilds-internal-checksums-container-read-token: - type: azure-storage-container-sas-token - parameters: - connectionString: - name: dotnetbuilds-connection-string - location: dotnetbuildskeys - permissions: rl - container: internal-checksums - - dotnetbuilds-public-checksums-container-read-token: - type: azure-storage-container-sas-token - parameters: - connectionString: - name: dotnetbuilds-connection-string - location: dotnetbuildskeys - permissions: rl - container: public-checksums + scopes: symbols_write #OneLocBuildVariables dn-bot-ceapex-package-r: diff --git a/Directory.Packages.props b/Directory.Packages.props index d1472f99509..8936cf01970 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -15,9 +15,9 @@ 3.14.1-8722.20240403.1 - 2.8.1 - 1.14.0 - 2.8.1 + 2.9.0 + 1.15.0 + 2.8.2 diff --git a/Documentation/AzureDevOps/SendingJobsToHelix.md b/Documentation/AzureDevOps/SendingJobsToHelix.md index 2822cbc8294..02a60202384 100644 --- a/Documentation/AzureDevOps/SendingJobsToHelix.md +++ b/Documentation/AzureDevOps/SendingJobsToHelix.md @@ -83,7 +83,7 @@ The simplest Helix use-case is zipping up a single folder containing your projec Simply specify the xUnit project(s) you wish to run (semicolon delimited) with the `XUnitProjects` parameter. Then, specify: * the `XUnitPublishTargetFramework` – this is the framework your **test projects are targeting**, e.g. `netcoreapp3.1`. * the `XUnitRuntimeTargetFramework` – this is the framework version of xUnit you want to use from the xUnit NuGet package, e.g. `netcoreapp2.0`. Notably, the xUnit console runner only supports up to netcoreapp2.0 as of 14 March 2018, so this is the target that should be specified for running against any higher version test projects. -* the `XUnitRunnerVersion` (the version of the xUnit nuget package you want to use, e.g. `2.8.1`). +* the `XUnitRunnerVersion` (the version of the xUnit nuget package you want to use, e.g. `2.9.0`). Finally, set `IncludeDotNetCli` to true and specify which `DotNetCliPackageType` (`sdk`, `runtime` or `aspnetcore-runtime`) and `DotNetCliVersion` you wish to use. (For a full list of .NET CLI versions/package types, see these links: [3.0](https://dotnet.microsoft.com/download/dotnet-core/3.0), [2.1](https://dotnet.microsoft.com/download/dotnet-core/2.1), [2.2](https://dotnet.microsoft.com/download/dotnet-core/2.2).) @@ -104,7 +104,7 @@ The list of available Helix queues can be found on the [Helix homepage](https:// # XUnitWorkItemTimeout: '00:05:00' -- a timeout (specified as a System.TimeSpan string) for all work items created from XUnitProjects XUnitPublishTargetFramework: netcoreapp3.1 # specify your publish target framework here XUnitRuntimeTargetFramework: netcoreapp2.0 # specify the framework you want to use for the xUnit runner - XUnitRunnerVersion: 2.8.1 # specify the version of xUnit runner you wish to use here + XUnitRunnerVersion: 2.9.0 # specify the version of xUnit runner you wish to use here # WorkItemDirectory: '' -- payload directory to zip up and send to Helix; requires WorkItemCommand; incompatible with XUnitProjects # WorkItemCommand: '' -- a command to execute on the payload; requires WorkItemDirectory; incompatible with XUnitProjects # WorkItemTimeout: '' -- a timeout (specified as a System.TimeSpan string) for the work item command; requires WorkItemDirectory; incompatible with XUnitProjects diff --git a/Documentation/Darc.md b/Documentation/Darc.md index 4caebb998ee..e017c78876e 100644 --- a/Documentation/Darc.md +++ b/Documentation/Darc.md @@ -964,8 +964,8 @@ There are a few common parameters available on every command: checked. This setting overrides whatever GitHub PAT was provided through `darc authenticate`. - `--azdev-pat` - Personal access token used to authenticate to Azure DevOps. - This token should have Code Read permissions. This setting overrides whatever - Azure DevOps PAT was provided through `darc authenticate`. + This token should have Build Execute and Code Read permissions. This setting overrides whatever + Azure DevOps PAT was provided through `darc authenticate`. If no PAT is set, local credentials are used. - `--bar-uri` - URI of the build asset registry service to use. Typically left as its default (https://maestro.dot.net) This setting overrides the Build Asset Registry URI provided through `darc authenticate`. diff --git a/NuGet.config b/NuGet.config index 01795d609b5..792ee1f6c03 100644 --- a/NuGet.config +++ b/NuGet.config @@ -11,9 +11,6 @@ - - - diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 5c37e187a7c..dcfae36062d 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -22,29 +22,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-symuploader d617bc8ed2787c235a57cf0dcdfd087b86ff9521 - + https://github.com/dotnet/templating - 81ab22e8bf15861237b11d3900ff49de07ee3844 + b3723277b14aa6ab1da489363e25fed0ef6ab575 - + https://github.com/dotnet/arcade - 731d793be2d0a66bafc96b1a79dc96b4d1f0301b + b4e499d1f6e6b3a981feabfed290d99261762382 - + https://github.com/dotnet/arcade - 731d793be2d0a66bafc96b1a79dc96b4d1f0301b + b4e499d1f6e6b3a981feabfed290d99261762382 - + https://github.com/dotnet/arcade-services - 78939636941717922c23c0c73279602159853de6 + b3c285272c410ee6bb00534cd970017e0c005c04 - + https://github.com/dotnet/arcade-services - 78939636941717922c23c0c73279602159853de6 + b3c285272c410ee6bb00534cd970017e0c005c04 - + https://github.com/dotnet/xharness - c1a7044cbe36ea67281412766a417eece02fb3a5 + 2c5fdbed5ea74da70649c03084bc01035f35a3fe https://github.com/dotnet/roslyn @@ -60,45 +60,45 @@ - + https://github.com/dotnet/runtime - 2874d26cb343fc55be295a628b3ee474e19ff95e + 573461dc897731c11d6166574b77a8c3aabba220 - + https://github.com/dotnet/runtime - 2874d26cb343fc55be295a628b3ee474e19ff95e + 573461dc897731c11d6166574b77a8c3aabba220 - + https://github.com/dotnet/runtime - 2874d26cb343fc55be295a628b3ee474e19ff95e + 573461dc897731c11d6166574b77a8c3aabba220 - + https://github.com/dotnet/runtime - 2874d26cb343fc55be295a628b3ee474e19ff95e + 573461dc897731c11d6166574b77a8c3aabba220 - + https://github.com/dotnet/runtime - 2874d26cb343fc55be295a628b3ee474e19ff95e + 573461dc897731c11d6166574b77a8c3aabba220 - + https://github.com/dotnet/runtime - 2874d26cb343fc55be295a628b3ee474e19ff95e + 573461dc897731c11d6166574b77a8c3aabba220 - + https://github.com/dotnet/runtime - 2874d26cb343fc55be295a628b3ee474e19ff95e + 573461dc897731c11d6166574b77a8c3aabba220 - + https://github.com/dotnet/runtime - 2874d26cb343fc55be295a628b3ee474e19ff95e + 573461dc897731c11d6166574b77a8c3aabba220 - + https://github.com/dotnet/arcade - 731d793be2d0a66bafc96b1a79dc96b4d1f0301b + b4e499d1f6e6b3a981feabfed290d99261762382 @@ -136,60 +136,60 @@ - + https://github.com/dotnet/deployment-tools - b60c95e1ce736630d17e16626c59e3dd85ebae2b + d882ae4af9fb09a89e36487a9c8cb7dfde713927 - + https://github.com/dotnet/runtime - 2874d26cb343fc55be295a628b3ee474e19ff95e + 573461dc897731c11d6166574b77a8c3aabba220 - + https://github.com/dotnet/sdk - 39aef81ec6cffa06da9964b46d4b9e3bf2fc9979 + ef4c24166691977558e5312758df4313ab310dc0 - + https://github.com/dotnet/source-build-externals - 52c45e529d6a5956136ba3cddf849a16b65eb1f2 + 26c52d02b67816269e647cc584f6b5db9a91970f - + https://github.com/dotnet/source-build-reference-packages - 815f91338b1c4485b50bc0da9518b7b8433c75c1 + 4d5ba7206ed1d56612b36560334494652ed486b2 - + https://github.com/dotnet/runtime - 2874d26cb343fc55be295a628b3ee474e19ff95e + 573461dc897731c11d6166574b77a8c3aabba220 https://github.com/dotnet/command-line-api 5ea97af07263ea3ef68a18557c8aa3f7e3200bda - + https://github.com/dotnet/runtime - 2874d26cb343fc55be295a628b3ee474e19ff95e + 573461dc897731c11d6166574b77a8c3aabba220 - + https://github.com/dotnet/runtime - 2874d26cb343fc55be295a628b3ee474e19ff95e + 573461dc897731c11d6166574b77a8c3aabba220 - + https://github.com/dotnet/runtime - 2874d26cb343fc55be295a628b3ee474e19ff95e + 573461dc897731c11d6166574b77a8c3aabba220 - + https://github.com/dotnet/runtime - 2874d26cb343fc55be295a628b3ee474e19ff95e + 573461dc897731c11d6166574b77a8c3aabba220 diff --git a/eng/Versions.props b/eng/Versions.props index 9d3ad5f046d..57980e6a46a 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -12,8 +12,8 @@ 9.0.0-beta.24223.1 - 1.1.0-beta.24361.11 - 1.1.0-beta.24361.11 + 1.1.0-beta.24368.3 + 1.1.0-beta.24368.3 2.0.0-beta4.24126.1 @@ -21,7 +21,7 @@ 4.5.5 4.3.0 - 1.0.0-preview6.1.23159.4 + 2.0.0-preview.1.24305.1 2.0.0-preview.1.23470.14 2.0.0-preview.1.23470.14 @@ -44,13 +44,13 @@ 4.8.0 4.8.0 - 9.0.0-alpha.1.24059.2 - 9.0.0-alpha.1.24059.2 - 9.0.0-alpha.1.24059.2 - 9.0.0-alpha.1.24059.2 - 9.0.0-alpha.1.24059.2 - 9.0.0-alpha.1.24059.2 - 9.0.0-alpha.1.24059.2 + 9.0.0-preview.6.24327.7 + 9.0.0-preview.6.24327.7 + 9.0.0-preview.6.24327.7 + 9.0.0-preview.6.24327.7 + 9.0.0-preview.6.24327.7 + 9.0.0-preview.6.24327.7 + 9.0.0-preview.6.24327.7 5.0.0 6.0.4 6.0.4 @@ -64,15 +64,15 @@ 6.0.22 15.2.302-preview.14.122 16.0.527 - 9.0.0-alpha.1.24059.2 - 9.0.0-alpha.1.24059.2 - 9.0.0-alpha.1.24059.2 - 9.0.0-alpha.1.24059.2 - 9.0.0-alpha.1.24059.2 - 9.0.0-alpha.1.24059.2 - 9.0.0-alpha.1.24059.2 + 9.0.0-preview.6.24327.7 + 9.0.0-preview.6.24327.7 + 9.0.0-preview.6.24327.7 + 9.0.0-preview.6.24327.7 + 9.0.0-preview.6.24327.7 + 9.0.0-preview.6.24327.7 + 9.0.0-preview.6.24327.7 - 8.0.100-preview.3.23178.3 + 9.0.100-preview.6.24328.19 2.22.0 @@ -80,10 +80,10 @@ 1.1.0-beta2-19575-01 - 9.0.100-preview.7.24330.2 + 9.0.100-preview.7.24364.1 17.5.0 - 9.0.0-prerelease.24326.1 + 9.0.0-prerelease.24358.1 diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index ec3cd14191a..3d3356e3196 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -143,9 +143,10 @@ jobs: scriptType: ps scriptLocation: scriptPath scriptPath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1 - arguments: -BuildId $(BARBuildId) + arguments: > + -BuildId $(BARBuildId) -PublishingInfraVersion 3 - -AzdoToken '$(publishing-dnceng-devdiv-code-r-build-re)' + -AzdoToken '$(System.AccessToken)' -WaitPublishingFinish true -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' diff --git a/eng/common/core-templates/job/source-index-stage1.yml b/eng/common/core-templates/job/source-index-stage1.yml index 945c1c19e82..205fb5b3a39 100644 --- a/eng/common/core-templates/job/source-index-stage1.yml +++ b/eng/common/core-templates/job/source-index-stage1.yml @@ -34,10 +34,12 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $(DncEngPublicBuildPool) - image: windows.vs2022.amd64.open + image: 1es-windows-2022-open + os: windows ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $(DncEngInternalBuildPool) - image: windows.vs2022.amd64 + image: 1es-windows-2022 + os: windows steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index 20924366b8a..454fd75c7af 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -307,9 +307,10 @@ stages: scriptType: ps scriptLocation: scriptPath scriptPath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1 - arguments: -BuildId $(BARBuildId) + arguments: > + -BuildId $(BARBuildId) -PublishingInfraVersion ${{ parameters.publishingInfraVersion }} - -AzdoToken '$(publishing-dnceng-devdiv-code-r-build-re)' + -AzdoToken '$(System.AccessToken)' -WaitPublishingFinish true -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' diff --git a/eng/common/core-templates/steps/get-federated-access-token.yml b/eng/common/core-templates/steps/get-federated-access-token.yml index c8c49cc0e8f..3a4d4410c48 100644 --- a/eng/common/core-templates/steps/get-federated-access-token.yml +++ b/eng/common/core-templates/steps/get-federated-access-token.yml @@ -3,6 +3,14 @@ parameters: type: string - name: outputVariableName type: string +- name: is1ESPipeline + type: boolean +- name: stepName + type: string + default: 'getFederatedAccessToken' +- name: condition + type: string + default: '' # Resource to get a token for. Common values include: # - '499b84ac-1321-427f-aa17-267ca6975798' for Azure DevOps # - 'https://storage.azure.com/' for storage @@ -10,10 +18,16 @@ parameters: - name: resource type: string default: '499b84ac-1321-427f-aa17-267ca6975798' +- name: isStepOutputVariable + type: boolean + default: false steps: - task: AzureCLI@2 displayName: 'Getting federated access token for feeds' + name: ${{ parameters.stepName }} + ${{ if ne(parameters.condition, '') }}: + condition: ${{ parameters.condition }} inputs: azureSubscription: ${{ parameters.federatedServiceConnection }} scriptType: 'pscore' @@ -25,4 +39,4 @@ steps: exit 1 } Write-Host "Setting '${{ parameters.outputVariableName }}' with the access token value" - Write-Host "##vso[task.setvariable variable=${{ parameters.outputVariableName }};issecret=true]$accessToken" \ No newline at end of file + Write-Host "##vso[task.setvariable variable=${{ parameters.outputVariableName }};issecret=true;isOutput=${{ parameters.isStepOutputVariable }}]$accessToken" \ No newline at end of file diff --git a/eng/common/core-templates/steps/publish-logs.yml b/eng/common/core-templates/steps/publish-logs.yml index 8c5ea77b586..80788c52319 100644 --- a/eng/common/core-templates/steps/publish-logs.yml +++ b/eng/common/core-templates/steps/publish-logs.yml @@ -32,7 +32,6 @@ steps: '$(MaestroAccessToken)' '$(dn-bot-all-orgs-artifact-feeds-rw)' '$(akams-client-id)' - '$(akams-client-secret)' '$(microsoft-symbol-server-pat)' '$(symweb-symbol-server-pat)' '$(dn-bot-all-orgs-build-rw-code-rw)' diff --git a/eng/common/cross/build-rootfs.sh b/eng/common/cross/build-rootfs.sh index 6d99d1263c0..4b5e8d7166b 100755 --- a/eng/common/cross/build-rootfs.sh +++ b/eng/common/cross/build-rootfs.sh @@ -605,18 +605,18 @@ elif [[ "$__CodeName" == "illumos" ]]; then fi echo "Building binutils. Please wait.." if [[ "$__hasWget" == 1 ]]; then - wget -O- https://ftp.gnu.org/gnu/binutils/binutils-2.33.1.tar.bz2 | tar -xjf - + wget -O- https://ftp.gnu.org/gnu/binutils/binutils-2.42.tar.xz | tar -xJf - else - curl -SL https://ftp.gnu.org/gnu/binutils/binutils-2.33.1.tar.bz2 | tar -xjf - + curl -SL https://ftp.gnu.org/gnu/binutils/binutils-2.42.tar.xz | tar -xJf - fi mkdir build-binutils && cd build-binutils - ../binutils-2.33.1/configure --prefix="$__RootfsDir" --target="${__illumosArch}-sun-solaris2.10" --program-prefix="${__illumosArch}-illumos-" --with-sysroot="$__RootfsDir" + ../binutils-2.42/configure --prefix="$__RootfsDir" --target="${__illumosArch}-sun-solaris2.11" --program-prefix="${__illumosArch}-illumos-" --with-sysroot="$__RootfsDir" make -j "$JOBS" && make install && cd .. echo "Building gcc. Please wait.." if [[ "$__hasWget" == 1 ]]; then - wget -O- https://ftp.gnu.org/gnu/gcc/gcc-8.4.0/gcc-8.4.0.tar.xz | tar -xJf - + wget -O- https://ftp.gnu.org/gnu/gcc/gcc-13.3.0/gcc-13.3.0.tar.xz | tar -xJf - else - curl -SL https://ftp.gnu.org/gnu/gcc/gcc-8.4.0/gcc-8.4.0.tar.xz | tar -xJf - + curl -SL https://ftp.gnu.org/gnu/gcc/gcc-13.3.0/gcc-13.3.0.tar.xz | tar -xJf - fi CFLAGS="-fPIC" CXXFLAGS="-fPIC" @@ -624,7 +624,7 @@ elif [[ "$__CodeName" == "illumos" ]]; then CFLAGS_FOR_TARGET="-fPIC" export CFLAGS CXXFLAGS CXXFLAGS_FOR_TARGET CFLAGS_FOR_TARGET mkdir build-gcc && cd build-gcc - ../gcc-8.4.0/configure --prefix="$__RootfsDir" --target="${__illumosArch}-sun-solaris2.10" --program-prefix="${__illumosArch}-illumos-" --with-sysroot="$__RootfsDir" --with-gnu-as \ + ../gcc-13.3.0/configure --prefix="$__RootfsDir" --target="${__illumosArch}-sun-solaris2.11" --program-prefix="${__illumosArch}-illumos-" --with-sysroot="$__RootfsDir" --with-gnu-as \ --with-gnu-ld --disable-nls --disable-libgomp --disable-libquadmath --disable-libssp --disable-libvtv --disable-libcilkrts --disable-libada --disable-libsanitizer \ --disable-libquadmath-support --disable-shared --enable-tls make -j "$JOBS" && make install && cd .. @@ -632,7 +632,7 @@ elif [[ "$__CodeName" == "illumos" ]]; then if [[ "$__UseMirror" == 1 ]]; then BaseUrl=https://pkgsrc.smartos.skylime.net fi - BaseUrl="$BaseUrl/packages/SmartOS/trunk/${__illumosArch}/All" + BaseUrl="$BaseUrl/packages/SmartOS/2019Q4/${__illumosArch}/All" echo "Downloading manifest" if [[ "$__hasWget" == 1 ]]; then wget "$BaseUrl" diff --git a/eng/common/native/init-compiler.sh b/eng/common/native/init-compiler.sh index 62900e12b21..9a0e1f2b456 100644 --- a/eng/common/native/init-compiler.sh +++ b/eng/common/native/init-compiler.sh @@ -19,11 +19,9 @@ case "$compiler" in # clangx.y or clang-x.y version="$(echo "$compiler" | tr -d '[:alpha:]-=')" majorVersion="${version%%.*}" - [ -z "${version##*.*}" ] && minorVersion="${version#*.}" - if [ -z "$minorVersion" ] && [ -n "$majorVersion" ] && [ "$majorVersion" -le 6 ]; then - minorVersion=0; - fi + # LLVM based on v18 released in early 2024, with two releases per year + maxVersion="$((18 + ((($(date +%Y) - 2024) * 12 + $(date +%-m) - 3) / 6)))" compiler=clang ;; @@ -31,7 +29,9 @@ case "$compiler" in # gccx.y or gcc-x.y version="$(echo "$compiler" | tr -d '[:alpha:]-=')" majorVersion="${version%%.*}" - [ -z "${version##*.*}" ] && minorVersion="${version#*.}" + + # GCC based on v14 released in early 2024, with one release per year + maxVersion="$((14 + ((($(date +%Y) - 2024) * 12 + $(date +%-m) - 3) / 12)))" compiler=gcc ;; esac @@ -49,12 +49,10 @@ check_version_exists() { desired_version=-1 # Set up the environment to be used for building with the desired compiler. - if command -v "$compiler-$1.$2" > /dev/null; then - desired_version="-$1.$2" - elif command -v "$compiler$1$2" > /dev/null; then - desired_version="$1$2" - elif command -v "$compiler-$1$2" > /dev/null; then - desired_version="-$1$2" + if command -v "$compiler-$1" > /dev/null; then + desired_version="-$1" + elif command -v "$compiler$1" > /dev/null; then + desired_version="$1" fi echo "$desired_version" @@ -75,7 +73,7 @@ set_compiler_version_from_CC() { fi # gcc and clang often display 3 part versions. However, gcc can show only 1 part in some environments. - IFS=. read -r majorVersion minorVersion _ < /dev/null; then - echo "Error: No usable version of $compiler found." + echo "Error: No compatible version of $compiler was found within the range of $minVersion to $maxVersion. Please upgrade your toolchain or specify the compiler explicitly using CLR_CC and CLR_CXX environment variables." exit 1 fi CC="$(command -v "$compiler" 2> /dev/null)" CXX="$(command -v "$cxxCompiler" 2> /dev/null)" set_compiler_version_from_CC - else - if [ "$compiler" = "clang" ] && [ "$majorVersion" -lt 5 ] && { [ "$build_arch" = "arm" ] || [ "$build_arch" = "armel" ]; }; then - # If a major version was provided explicitly, and it was too old, find a newer compiler instead - if ! command -v "$compiler" > /dev/null; then - echo "Error: Found clang version $majorVersion which is not supported on arm/armel architectures, and there is no clang in PATH." - exit 1 - fi - - CC="$(command -v "$compiler" 2> /dev/null)" - CXX="$(command -v "$cxxCompiler" 2> /dev/null)" - set_compiler_version_from_CC - fi fi else - desired_version="$(check_version_exists "$majorVersion" "$minorVersion")" + desired_version="$(check_version_exists "$majorVersion")" if [ "$desired_version" = "-1" ]; then - echo "Error: Could not find specific version of $compiler: $majorVersion $minorVersion." + echo "Error: Could not find specific version of $compiler: $majorVersion." exit 1 fi fi diff --git a/eng/common/post-build/publish-using-darc.ps1 b/eng/common/post-build/publish-using-darc.ps1 index 4ff587ca46a..90b58e32a87 100644 --- a/eng/common/post-build/publish-using-darc.ps1 +++ b/eng/common/post-build/publish-using-darc.ps1 @@ -42,6 +42,7 @@ try { --azdev-pat "$AzdoToken" ` --bar-uri "$MaestroApiEndPoint" ` --ci ` + --verbose ` @optionalParams if ($LastExitCode -ne 0) { diff --git a/global.json b/global.json index 4eacb35b9e2..6a6c0a2a57e 100644 --- a/global.json +++ b/global.json @@ -7,8 +7,8 @@ "dotnet": "9.0.100-preview.5.24307.3" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.24360.4", - "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.24360.4", + "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.24368.9", + "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.24368.9", "Microsoft.Build.NoTargets": "3.7.0" } } diff --git a/src/Microsoft.DotNet.Arcade.Sdk/tools/DefaultVersions.props b/src/Microsoft.DotNet.Arcade.Sdk/tools/DefaultVersions.props index 3b6f2ba186c..231bc124ee7 100644 --- a/src/Microsoft.DotNet.Arcade.Sdk/tools/DefaultVersions.props +++ b/src/Microsoft.DotNet.Arcade.Sdk/tools/DefaultVersions.props @@ -83,12 +83,12 @@ 16.5.0 - 2.8.1 - 1.14.0 + 2.9.0 + 1.15.0 $(XUnitVersion) - 2.8.1 + 2.8.2 - 2.0.0 + 3.5.0 $(MSTestVersion) $(MSTestVersion) $(ArcadeSdkVersion) diff --git a/src/Microsoft.DotNet.Arcade.Sdk/tools/MSTest/MSTest.targets b/src/Microsoft.DotNet.Arcade.Sdk/tools/MSTest/MSTest.targets index c41571d3e9c..df9defd2cf0 100644 --- a/src/Microsoft.DotNet.Arcade.Sdk/tools/MSTest/MSTest.targets +++ b/src/Microsoft.DotNet.Arcade.Sdk/tools/MSTest/MSTest.targets @@ -1,12 +1,32 @@ - - - - + + false + false + false + + + + + + + + + + - + + + + + + + + + + + diff --git a/src/Microsoft.DotNet.Arcade.Sdk/tools/Microsoft.Testing.Platform.targets b/src/Microsoft.DotNet.Arcade.Sdk/tools/Microsoft.Testing.Platform.targets new file mode 100644 index 00000000000..212abfe0a8d --- /dev/null +++ b/src/Microsoft.DotNet.Arcade.Sdk/tools/Microsoft.Testing.Platform.targets @@ -0,0 +1,91 @@ + + + + <_TestEnvironment>%(TestToRun.EnvironmentDisplay) + <_TestAssembly>%(TestToRun.Identity) + <_TestRuntime>%(TestToRun.TestRuntime) + <_TestTimeout>%(TestToRun.TestTimeout) + <_TestRunnerAdditionalArguments>%(TestToRun.TestRunnerAdditionalArguments) + + + + <_TestResultDirectory>$([System.IO.Path]::GetDirectoryName('%(TestToRun.ResultsTrxPath)')) + <_TestResultTrxFileName>$([System.IO.Path]::GetFileName('%(TestToRun.ResultsTrxPath)')) + + + + <_TargetFileNameNoExt>$([System.IO.Path]::GetFileNameWithoutExtension('$(_TestAssembly)')) + <_TargetDir>$([System.IO.Path]::GetDirectoryName('$(_TestAssembly)'))\ + <_CoreRuntimeConfigPath>$(_TargetDir)$(_TargetFileNameNoExt).runtimeconfig.json + <_CoreDepsPath>$(_TargetDir)$(_TargetFileNameNoExt).deps.json + + <_TestRunner Condition="'%(TestToRun.Architecture)'=='x86' And Exists('$(DotNetRoot)x86\dotnet.exe')">$(DotNetRoot)x86\dotnet.exe + <_TestRunner Condition="'$(_TestRunner)'==''">$(DotNetTool) + + <_TestRunnerArgs>exec --depsfile "$(_CoreDepsPath)" --runtimeconfig "$(_CoreRuntimeConfigPath)" $(TestRuntimeAdditionalArguments) "$(_TestAssembly)" --report-trx --report-trx-filename "$(_TestResultTrxFileName)" --results-directory "$(_TestResultDirectory)" $(_TestRunnerAdditionalArguments) + + + + <_TestRunner Condition="'$(_TestRunner)'==''">$(_TestAssembly) + <_TestRunnerArgs>--results-directory "$(_TestResultDirectory)" $(_TestRunnerAdditionalArguments) + + + + <_TestRunnerCommand>"$(_TestRunner)" $(_TestRunnerArgs) + + + <_TestRunnerCommand Condition="'$(TestCaptureOutput)' != 'false'">$(_TestRunnerCommand) > "%(TestToRun.ResultsStdOutPath)" 2>&1 + + + + <_OutputFiles Include="%(TestToRun.ResultsTrxPath)" /> + <_OutputFiles Include="%(TestToRun.ResultsHtmlPath)" /> + <_OutputFiles Include="%(TestToRun.ResultsStdOutPath)" /> + + + + + + + + + + + + + + + + + + <_ResultsFileToDisplay>%(TestToRun.ResultsHtmlPath) + <_ResultsFileToDisplay Condition="!Exists('$(_ResultsFileToDisplay)')">%(TestToRun.ResultsStdOutPath) + + + + + + + + + + diff --git a/src/Microsoft.DotNet.Arcade.Sdk/tools/Tools.proj b/src/Microsoft.DotNet.Arcade.Sdk/tools/Tools.proj index 618af66f7d3..345ee92f6dd 100644 --- a/src/Microsoft.DotNet.Arcade.Sdk/tools/Tools.proj +++ b/src/Microsoft.DotNet.Arcade.Sdk/tools/Tools.proj @@ -11,6 +11,11 @@ .NETFramework .NETFramework,Version=v4.7.2 $(BaseIntermediateOutputPath) + + + + true + Restore - + <_Args Include="SetupOutputPath=$(VisualStudioSetupInsertionPath)"/> <_Args Include="ComponentIntermediateOutputPath=$(VisualStudioSetupIntermediateOutputPath)$(_ComponentName)\"/> - <_Args Include="SwixBuildPath=$(NuGetPackageRoot)microsoft.visualstudioeng.microbuild.plugins.swixbuild\$(MicrosoftVisualStudioEngMicroBuildPluginsSwixBuildVersion)\"/> + <_Args Include="SwixBuildPath=$(NuGetPackageRoot)microsoft.visualstudioeng.microbuild.plugins.swixbuild\$(MicrosoftVisualStudioEngMicroBuildPluginsSwixBuildVersion)\" /> <_Args Include="VisualStudioDropName=$(VisualStudioDropName)" /> <_Args Include="DotNetTool=$(DotNetTool)" /> - <_Args Include="ManifestTool=$(NuGetPackageRoot)microsoft.manifesttool.crossplatform\$(MicrosoftManifestToolCrossPlatformVersion)\Content\Microsoft.ManifestTool.dll"/> + <_Args Include="ManifestTool=$(NuGetPackageRoot)microsoft.manifesttool.crossplatform\$(MicrosoftManifestToolCrossPlatformVersion)\Content\Microsoft.ManifestTool.dll" /> <_Args Include="GenerateSbom=$(GenerateSbom)" /> diff --git a/src/Microsoft.DotNet.Arcade.Sdk/tools/VisualStudio.SetupPackage.vsmanproj b/src/Microsoft.DotNet.Arcade.Sdk/tools/VisualStudio.SetupPackage.vsmanproj index 64a58a3a35c..e94c181e4e2 100644 --- a/src/Microsoft.DotNet.Arcade.Sdk/tools/VisualStudio.SetupPackage.vsmanproj +++ b/src/Microsoft.DotNet.Arcade.Sdk/tools/VisualStudio.SetupPackage.vsmanproj @@ -24,7 +24,7 @@ false - + true @@ -44,7 +44,7 @@ <_PackageStubFiles Include="$(ComponentIntermediateOutputPath)*.stub"/> - + @@ -100,6 +100,9 @@ Condition="'$(GenerateSbom)' != 'false'"> + + diff --git a/src/Microsoft.DotNet.Build.Tasks.Feed/src/AssetPublisherFactory.cs b/src/Microsoft.DotNet.Build.Tasks.Feed/src/AssetPublisherFactory.cs index 455f7ce8ad5..e9c8996917f 100644 --- a/src/Microsoft.DotNet.Build.Tasks.Feed/src/AssetPublisherFactory.cs +++ b/src/Microsoft.DotNet.Build.Tasks.Feed/src/AssetPublisherFactory.cs @@ -28,7 +28,12 @@ public virtual IAssetPublisher CreateAssetPublisher(TargetFeedConfig feedConfig, case FeedType.AzureStorageContainer: return new AzureStorageContainerAssetTokenCredentialPublisher( new Uri(feedConfig.TargetURL), - new DefaultAzureCredential(new DefaultAzureCredentialOptions { ManagedIdentityClientId = task.ManagedIdentityClientId }), + new DefaultAzureCredential( + new DefaultAzureCredentialOptions + { + ManagedIdentityClientId = task.ManagedIdentityClientId, + CredentialProcessTimeout = TimeSpan.FromSeconds(60.0) + }), _log); default: throw new NotImplementedException(); diff --git a/src/Microsoft.DotNet.Build.Tasks.Feed/src/PublishArtifactsInManifest.cs b/src/Microsoft.DotNet.Build.Tasks.Feed/src/PublishArtifactsInManifest.cs index 3c9960288f0..8781402bcc5 100644 --- a/src/Microsoft.DotNet.Build.Tasks.Feed/src/PublishArtifactsInManifest.cs +++ b/src/Microsoft.DotNet.Build.Tasks.Feed/src/PublishArtifactsInManifest.cs @@ -351,7 +351,9 @@ internal PublishArtifactsInManifestBase ConstructPublishingV3Task(BuildModel bui SkipSafetyChecks = this.SkipSafetyChecks, AkaMSClientId = this.AkaMSClientId, AkaMSClientCertificate = !string.IsNullOrEmpty(AkaMSClientCertificate) ? +#pragma warning disable SYSLIB0057 // https://github.com/dotnet/arcade/issues/14936 new X509Certificate2(Convert.FromBase64String(File.ReadAllText(AkaMSClientCertificate))) : null, +#pragma warning restore AkaMSCreatedBy = this.AkaMSCreatedBy, AkaMSGroupOwner = this.AkaMSGroupOwner, AkaMsOwners = this.AkaMsOwners, diff --git a/src/Microsoft.DotNet.Deployment.Tasks.Links/src/AkaMSLinksBase.cs b/src/Microsoft.DotNet.Deployment.Tasks.Links/src/AkaMSLinksBase.cs index 013ea538c98..927d5037a71 100644 --- a/src/Microsoft.DotNet.Deployment.Tasks.Links/src/AkaMSLinksBase.cs +++ b/src/Microsoft.DotNet.Deployment.Tasks.Links/src/AkaMSLinksBase.cs @@ -24,7 +24,9 @@ protected AkaMSLinkManager CreateAkaMSLinksManager() AkaMSLinkManager manager; if (!string.IsNullOrEmpty(ClientCertificate)) { +#pragma warning disable SYSLIB0057 // https://github.com/dotnet/arcade/issues/14936 manager = new AkaMSLinkManager(ClientId, new X509Certificate2(Convert.FromBase64String(File.ReadAllText(ClientCertificate))), Tenant, Log); +#pragma warning restore } else if (!string.IsNullOrEmpty(ClientSecret)) { diff --git a/src/Microsoft.DotNet.Helix/Sdk/Readme.md b/src/Microsoft.DotNet.Helix/Sdk/Readme.md index 811bd0ad1ba..3296a10be49 100644 --- a/src/Microsoft.DotNet.Helix/Sdk/Readme.md +++ b/src/Microsoft.DotNet.Helix/Sdk/Readme.md @@ -228,7 +228,7 @@ Given a local folder `$(TestFolder)` containing `runtests.cmd`, this will run `r netcoreapp2.0 - 2.8.1 + 2.9.0 diff --git a/src/Microsoft.DotNet.Helix/Sdk/tools/xunit-runner/XUnitRunner.targets b/src/Microsoft.DotNet.Helix/Sdk/tools/xunit-runner/XUnitRunner.targets index 7d2df05364a..9a131adb0a6 100644 --- a/src/Microsoft.DotNet.Helix/Sdk/tools/xunit-runner/XUnitRunner.targets +++ b/src/Microsoft.DotNet.Helix/Sdk/tools/xunit-runner/XUnitRunner.targets @@ -5,7 +5,7 @@ net9.0 netcoreapp2.0 - 2.8.1 + 2.9.0 <_XUnitPublishTargetsPath>$(MSBuildThisFileDirectory)XUnitPublish.targets diff --git a/src/Microsoft.DotNet.XUnitAssert/src/Sdk/ArgumentFormatter.cs b/src/Microsoft.DotNet.XUnitAssert/src/Sdk/ArgumentFormatter.cs index f767b0691b6..b2df927faf8 100644 --- a/src/Microsoft.DotNet.XUnitAssert/src/Sdk/ArgumentFormatter.cs +++ b/src/Microsoft.DotNet.XUnitAssert/src/Sdk/ArgumentFormatter.cs @@ -323,7 +323,7 @@ static string FormatDoubleValue(object value) => string.Format(CultureInfo.CurrentCulture, "{0:G17}", value); static string FormatEnumValue(object value) => -#if NETCOREAPP2_0_OR_GREATER +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER value.ToString()?.Replace(", ", " | ", StringComparison.Ordinal) ?? "null"; #else value.ToString()?.Replace(", ", " | ") ?? "null"; @@ -370,7 +370,7 @@ static string FormatFloatValue(object value) => static string FormatStringValue(string value) { -#if NETCOREAPP2_0_OR_GREATER +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER value = EscapeString(value).Replace(@"""", @"\""", StringComparison.Ordinal); // escape double quotes #else value = EscapeString(value).Replace(@"""", @"\"""); // escape double quotes @@ -453,7 +453,7 @@ public static string FormatTypeName( if (result == null) return typeInfo.Name; -#if NETCOREAPP2_1_OR_GREATER +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER var tickIdx = result.IndexOf('`', StringComparison.Ordinal); #else var tickIdx = result.IndexOf('`'); @@ -518,7 +518,7 @@ static bool IsAnonymousType(this TypeInfo typeInfo) if (typeInfo.GetCustomAttribute(typeof(CompilerGeneratedAttribute)) == null) return false; -#if NETCOREAPP2_1_OR_GREATER +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER return typeInfo.Name.Contains("AnonymousType", StringComparison.Ordinal); #else return typeInfo.Name.Contains("AnonymousType"); diff --git a/src/Microsoft.DotNet.XUnitAssert/src/Sdk/AssertEqualityComparer.cs b/src/Microsoft.DotNet.XUnitAssert/src/Sdk/AssertEqualityComparer.cs index 2944e7df0a8..30bf4bf92bb 100644 --- a/src/Microsoft.DotNet.XUnitAssert/src/Sdk/AssertEqualityComparer.cs +++ b/src/Microsoft.DotNet.XUnitAssert/src/Sdk/AssertEqualityComparer.cs @@ -196,6 +196,10 @@ internal bool Equals( if (x == null || y == null) return false; + // If you point at the same thing, you're equal + if (ReferenceEquals(x, y)) + return true; + // Implements IEquatable? var equatable = x as IEquatable; if (equatable != null) diff --git a/src/Microsoft.DotNet.XUnitAssert/src/Sdk/AssertHelper.cs b/src/Microsoft.DotNet.XUnitAssert/src/Sdk/AssertHelper.cs index 40105cc5c0e..f4659c37ff6 100644 --- a/src/Microsoft.DotNet.XUnitAssert/src/Sdk/AssertHelper.cs +++ b/src/Microsoft.DotNet.XUnitAssert/src/Sdk/AssertHelper.cs @@ -8,6 +8,7 @@ #pragma warning disable CS8604 #pragma warning disable CS8621 #pragma warning disable CS8625 +#pragma warning disable CS8767 #endif using System; @@ -90,6 +91,8 @@ internal static class AssertHelper #endif }); + static readonly IEqualityComparer referenceEqualityComparer = new ReferenceEqualityComparer(); + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2111: Method 'lambda expression' with parameters or return value with `DynamicallyAccessedMembersAttribute` is accessed via reflection. Trimmer can't guarantee availability of the requirements of the method.", Justification = "The lambda will only be called by the value in the type parameter, which has the same requirements.")] #if XUNIT_NULLABLE static Dictionary> GetGettersForType([DynamicallyAccessedMembers( @@ -124,7 +127,15 @@ static Dictionary> GetGettersForType([DynamicallyAc var propertyGetters = _type .GetRuntimeProperties() - .Where(p => p.CanRead && p.GetMethod != null && p.GetMethod.IsPublic && !p.GetMethod.IsStatic && p.GetIndexParameters().Length == 0) + .Where(p => + p.CanRead + && p.GetMethod != null + && p.GetMethod.IsPublic + && !p.GetMethod.IsStatic + && p.GetIndexParameters().Length == 0 + && !p.GetCustomAttributes(typeof(ObsoleteAttribute)).Any() + && !p.GetMethod.GetCustomAttributes(typeof(ObsoleteAttribute)).Any() + ) #if XUNIT_NULLABLE .Select(p => new { name = p.Name, getter = (Func)p.GetValue }); #else @@ -307,7 +318,7 @@ public static EquivalentException VerifyEquivalence( #endif bool strict) { - return VerifyEquivalence(expected, actual, strict, string.Empty, new HashSet(), new HashSet(), 1); + return VerifyEquivalence(expected, actual, strict, string.Empty, new HashSet(referenceEqualityComparer), new HashSet(referenceEqualityComparer), 1); } #if XUNIT_NULLABLE @@ -615,4 +626,24 @@ static T WaitForValueTask(ValueTask valueTask) #endif } + + sealed class ReferenceEqualityComparer : IEqualityComparer + { + public new bool Equals( +#if XUNIT_NULLABLE + object? x, + object? y) => +#else + object x, + object y) => +#endif + ReferenceEquals(x, y); + +#if XUNIT_NULLABLE + public int GetHashCode([DisallowNull] object obj) => +#else + public int GetHashCode(object obj) => +#endif + obj.GetHashCode(); + } } diff --git a/src/Microsoft.DotNet.XUnitAssert/src/Sdk/Exceptions/AllException.cs b/src/Microsoft.DotNet.XUnitAssert/src/Sdk/Exceptions/AllException.cs index ae707a8fbfc..bb58847d5c3 100644 --- a/src/Microsoft.DotNet.XUnitAssert/src/Sdk/Exceptions/AllException.cs +++ b/src/Microsoft.DotNet.XUnitAssert/src/Sdk/Exceptions/AllException.cs @@ -58,14 +58,14 @@ public static AllException ForFailures( CultureInfo.CurrentCulture, "{0}Item: {1}{2}{3}Error: {4}", string.Format(CultureInfo.CurrentCulture, "[{0}]:", error.Item1).PadRight(maxItemIndexLength), -#if NETCOREAPP2_0_OR_GREATER +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER error.Item2.Replace(Environment.NewLine, wrapSpaces, StringComparison.Ordinal), #else error.Item2.Replace(Environment.NewLine, wrapSpaces), #endif Environment.NewLine, indexSpaces, -#if NETCOREAPP2_0_OR_GREATER +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER error.Item3.Message.Replace(Environment.NewLine, wrapSpaces, StringComparison.Ordinal) #else error.Item3.Message.Replace(Environment.NewLine, wrapSpaces) diff --git a/src/Microsoft.DotNet.XUnitAssert/src/Sdk/Exceptions/EqualException.cs b/src/Microsoft.DotNet.XUnitAssert/src/Sdk/Exceptions/EqualException.cs index 8a94e09c370..4116bbc2468 100644 --- a/src/Microsoft.DotNet.XUnitAssert/src/Sdk/Exceptions/EqualException.cs +++ b/src/Microsoft.DotNet.XUnitAssert/src/Sdk/Exceptions/EqualException.cs @@ -230,13 +230,13 @@ public static EqualException ForMismatchedValuesWithError( "{0}{1}Expected: {2}{3}Actual: {4}", message, Environment.NewLine, -#if NETCOREAPP2_0_OR_GREATER +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER expectedText.Replace(Environment.NewLine, newLineAndIndent, StringComparison.Ordinal), #else expectedText.Replace(Environment.NewLine, newLineAndIndent), #endif Environment.NewLine, -#if NETCOREAPP2_0_OR_GREATER +#if NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER actualText.Replace(Environment.NewLine, newLineAndIndent, StringComparison.Ordinal) #else actualText.Replace(Environment.NewLine, newLineAndIndent)