diff --git a/.config/CredScanSuppressions.json b/.config/CredScanSuppressions.json
new file mode 100644
index 000000000..0e52eb402
--- /dev/null
+++ b/.config/CredScanSuppressions.json
@@ -0,0 +1,4 @@
+{
+ "tool": "Credential Scanner",
+ "suppressions": []
+}
diff --git a/.gitignore b/.gitignore
index 25bf790b2..62e02185d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,4 +41,20 @@ cmake/
.dotnet.payload
# MSBuild Logs
-**/MSBuild_Logs/MSBuild_pid-*.failure.txt
\ No newline at end of file
+**/MSBuild_Logs/MSBuild_pid-*.failure.txt
+
+###############################################################################
+# Eng branch specific files
+###############################################################################
+eng/
+!eng/common/
+!eng/pipelines/public.yml
+!eng/Publishing.props
+!eng/Signing.props
+!eng/Version.Details.xml
+!eng/Versions.props
+src/
+tools/
+Directory.Build.props
+Directory.Build.targets
+workload-versions.sln
\ No newline at end of file
diff --git a/Directory.Build.props b/Directory.Build.props
deleted file mode 100644
index e747638d0..000000000
--- a/Directory.Build.props
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
- net8.0
- $(CopyrightNetFoundation)
- MIT
- false
- Latest
- true
-
- true
-
-
-
\ No newline at end of file
diff --git a/Directory.Build.targets b/Directory.Build.targets
deleted file mode 100644
index 817af988c..000000000
--- a/Directory.Build.targets
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
- $(WorkloadsVersion)-$(VersionSuffix)
-
-
-
\ No newline at end of file
diff --git a/NuGet.config b/NuGet.config
index bbcd98f2b..205a37fab 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -7,43 +7,21 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
+
-
-
-
@@ -62,12 +40,7 @@
-
-
-
-
-
-
+
diff --git a/build.cmd b/build.cmd
index fe43bbf96..3898c8b0f 100644
--- a/build.cmd
+++ b/build.cmd
@@ -1,3 +1,7 @@
@echo off
+for /f %%i in ('git config --get remote.origin.url') do set REPO_URL=%%i
+git clone -b eng %REPO_URL% eng-branch
+robocopy "eng-branch" "." /E /XO /XD ".git" ".config" /XF ".gitignore" "build.cmd" "public.yml" /NJH /NJS /NP /NFL /NDL
+rmdir /s /q "eng-branch"
powershell -NoLogo -NoProfile -ExecutionPolicy ByPass -Command "& """%~dp0eng\common\build.ps1""" -restore -build -msbuildEngine vs %*"
exit /b %ErrorLevel%
diff --git a/documentation/release-process.md b/doc/release-process.md
similarity index 100%
rename from documentation/release-process.md
rename to doc/release-process.md
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 4e0d3d23a..07c2ed56b 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -1,48 +1,48 @@
-
+
https://github.com/dotnet/emsdk
- 2c27e405e17595694d91892159593d6dd10e61e2
+ b65413ac057eb0a54c51b76b1855bc377c2132c3
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-runtime
- 80aa709f5d919c6814726788dc6dabe23e79e672
+ fa7cdded37981a97cec9a3e233c4a6af58a91c57
-
+
https://github.com/dotnet/android
- 0ccdc57cf7fc59bd3f6cbf900c9cdbebadfe4609
+ 1dcfb6f8779c33b6f768c996495cb90ecd729329
-
- https://github.com/xamarin/xamarin-macios
- b3ee0f2422cd950a0c0c676fb8ac9e7dc5f98290
+
+ https://github.com/dotnet/macios
+ e5afbf5332820488c4a2d26dad02df88c0110136
-
- https://github.com/xamarin/xamarin-macios
- b3ee0f2422cd950a0c0c676fb8ac9e7dc5f98290
+
+ https://github.com/dotnet/macios
+ e5afbf5332820488c4a2d26dad02df88c0110136
-
- https://github.com/xamarin/xamarin-macios
- b3ee0f2422cd950a0c0c676fb8ac9e7dc5f98290
+
+ https://github.com/dotnet/macios
+ e5afbf5332820488c4a2d26dad02df88c0110136
-
- https://github.com/xamarin/xamarin-macios
- b3ee0f2422cd950a0c0c676fb8ac9e7dc5f98290
+
+ https://github.com/dotnet/macios
+ e5afbf5332820488c4a2d26dad02df88c0110136
-
+
https://github.com/dotnet/maui
- 85f2a06ecd11e4ba5a9e567d86f9d2fb49a2c5ca
+ 5531aa96fe88f40f612b4772fee56dceefc37932
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-sdk
- 96da45d427abd4d74c27960061daf18b51cd474f
+ 49aa03442a648a5064a4440f16109db773a9f9b5
-
+
https://github.com/dotnet/arcade
- bac7e1caea791275b7c3ccb4cb75fd6a04a26618
+ 6666973b629b24e259162dba03486c23af464bab
diff --git a/eng/Versions.props b/eng/Versions.props
index 248529b9a..1a71e3cad 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -10,7 +10,7 @@
1
- 03
+ 12
0
false
@@ -18,22 +18,6 @@
-
- 2
- 00
- 0
-
-
- 3
- 00
- 0
- false
-
- preview
- 0
-
$(VersionMajor).$(VersionSDKMinor)$(VersionFeature).$(VersionPatch)
@@ -60,19 +44,19 @@
- 9.0.2
+ 9.0.11
$(MicrosoftNETWorkloadEmscriptenCurrentManifest90100PackageVersion)
9.0.100$([System.Text.RegularExpressions.Regex]::Match($(EmscriptenWorkloadManifestVersion), `-[A-z]*[\.]*\d*`))
9.0.100
- 35.0.39
- 18.2.9173
- 18.2.9173
- 18.2.9173
- 15.2.9173
- 9.0.14
+ 35.0.105
+ 26.0.9766
+ 26.0.9766
+ 26.0.9766
+ 26.0.9766
+ 9.0.111
$(MicrosoftNETSdkMauiManifest90100PackageVersion)
$(MicrosoftNETSdkAndroidManifest90100PackageVersion)
$(MicrosoftNETSdkiOSManifest90100PackageVersion)
@@ -81,7 +65,7 @@
$(MicrosoftNETSdktvOSManifest90100PackageVersion)
- 9.0.2
+ 9.0.11
$(MicrosoftNETCoreAppRefPackageVersion)
@@ -92,4 +76,5 @@
8.2.2
$(MicrosoftNETSdkAspireManifest80100PackageVersion)
+
diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1
index 5db4ad71e..792b60b49 100644
--- a/eng/common/SetupNugetSources.ps1
+++ b/eng/common/SetupNugetSources.ps1
@@ -10,8 +10,8 @@
# displayName: Setup Private Feeds Credentials
# condition: eq(variables['Agent.OS'], 'Windows_NT')
# inputs:
-# filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
-# arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
+# filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1
+# arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $Env:Token
# env:
# Token: $(dn-bot-dnceng-artifact-feeds-rw)
#
diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh
index 4604b61b0..facb415ca 100755
--- a/eng/common/SetupNugetSources.sh
+++ b/eng/common/SetupNugetSources.sh
@@ -11,8 +11,8 @@
# - task: Bash@3
# displayName: Setup Internal Feeds
# inputs:
-# filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh
-# arguments: $(Build.SourcesDirectory)/NuGet.config
+# filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.sh
+# arguments: $(System.DefaultWorkingDirectory)/NuGet.config
# condition: ne(variables['Agent.OS'], 'Windows_NT')
# - task: NuGetAuthenticate@1
#
diff --git a/eng/common/core-templates/job/job.yml b/eng/common/core-templates/job/job.yml
index ba53ebfbd..8da43d3b5 100644
--- a/eng/common/core-templates/job/job.yml
+++ b/eng/common/core-templates/job/job.yml
@@ -19,6 +19,7 @@ parameters:
# publishing defaults
artifacts: ''
enableMicrobuild: false
+ microbuildUseESRP: true
enablePublishBuildArtifacts: false
enablePublishBuildAssets: false
enablePublishTestResults: false
@@ -134,6 +135,11 @@ jobs:
signType: $(_SignType)
zipSources: false
feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json
+ ${{ if eq(parameters.microbuildUseESRP, true) }}:
+ ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}:
+ ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea
+ ${{ else }}:
+ ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca
env:
TeamName: $(_TeamName)
MicroBuildOutputFolderOverride: '$(Agent.TempDirectory)'
@@ -160,7 +166,7 @@ jobs:
inputs:
languages: ${{ coalesce(parameters.richCodeNavigationLanguage, 'csharp') }}
environment: ${{ coalesce(parameters.richCodeNavigationEnvironment, 'internal') }}
- richNavLogOutputDirectory: $(Build.SourcesDirectory)/artifacts/bin
+ richNavLogOutputDirectory: $(System.DefaultWorkingDirectory)/artifacts/bin
uploadRichNavArtifacts: ${{ coalesce(parameters.richCodeNavigationUploadArtifacts, false) }}
continueOnError: true
@@ -183,7 +189,7 @@ jobs:
inputs:
testResultsFormat: 'xUnit'
testResultsFiles: '*.xml'
- searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)'
+ searchFolder: '$(System.DefaultWorkingDirectory)/artifacts/TestResults/$(_BuildConfig)'
testRunTitle: ${{ coalesce(parameters.testRunTitle, parameters.name, '$(System.JobName)') }}-xunit
mergeTestResults: ${{ parameters.mergeTestResults }}
continueOnError: true
@@ -194,7 +200,7 @@ jobs:
inputs:
testResultsFormat: 'VSTest'
testResultsFiles: '*.trx'
- searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)'
+ searchFolder: '$(System.DefaultWorkingDirectory)/artifacts/TestResults/$(_BuildConfig)'
testRunTitle: ${{ coalesce(parameters.testRunTitle, parameters.name, '$(System.JobName)') }}-trx
mergeTestResults: ${{ parameters.mergeTestResults }}
continueOnError: true
@@ -238,7 +244,7 @@ jobs:
- task: CopyFiles@2
displayName: Gather buildconfiguration for build retry
inputs:
- SourceFolder: '$(Build.SourcesDirectory)/eng/common/BuildConfiguration'
+ SourceFolder: '$(System.DefaultWorkingDirectory)/eng/common/BuildConfiguration'
Contents: '**'
TargetFolder: '$(Build.ArtifactStagingDirectory)/eng/common/BuildConfiguration'
continueOnError: true
diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml
index 00feec8eb..edefa789d 100644
--- a/eng/common/core-templates/job/onelocbuild.yml
+++ b/eng/common/core-templates/job/onelocbuild.yml
@@ -8,7 +8,7 @@ parameters:
CeapexPat: $(dn-bot-ceapex-package-r) # PAT for the loc AzDO instance https://dev.azure.com/ceapex
GithubPat: $(BotAccount-dotnet-bot-repo-PAT)
- SourcesDirectory: $(Build.SourcesDirectory)
+ SourcesDirectory: $(System.DefaultWorkingDirectory)
CreatePr: true
AutoCompletePr: false
ReusePr: true
@@ -68,7 +68,7 @@ jobs:
- ${{ if ne(parameters.SkipLocProjectJsonGeneration, 'true') }}:
- task: Powershell@2
inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/generate-locproject.ps1
+ filePath: $(System.DefaultWorkingDirectory)/eng/common/generate-locproject.ps1
arguments: $(_GenerateLocProjectArguments)
displayName: Generate LocProject.json
condition: ${{ parameters.condition }}
@@ -115,7 +115,7 @@ jobs:
is1ESPipeline: ${{ parameters.is1ESPipeline }}
args:
displayName: Publish LocProject.json
- pathToPublish: '$(Build.SourcesDirectory)/eng/Localize/'
+ pathToPublish: '$(System.DefaultWorkingDirectory)/eng/Localize/'
publishLocation: Container
artifactName: Loc
condition: ${{ parameters.condition }}
\ No newline at end of file
diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml
index 3d3356e31..a58c8a418 100644
--- a/eng/common/core-templates/job/publish-build-assets.yml
+++ b/eng/common/core-templates/job/publish-build-assets.yml
@@ -32,6 +32,10 @@ parameters:
is1ESPipeline: ''
+ repositoryAlias: self
+
+ officialBuildId: ''
+
jobs:
- job: Asset_Registry_Publish
@@ -54,6 +58,11 @@ jobs:
value: false
# unconditional - needed for logs publishing (redactor tool version)
- template: /eng/common/core-templates/post-build/common-variables.yml
+ - name: OfficialBuildId
+ ${{ if ne(parameters.officialBuildId, '') }}:
+ value: ${{ parameters.officialBuildId }}
+ ${{ else }}:
+ value: $(Build.BuildNumber)
pool:
# We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com)
@@ -72,7 +81,7 @@ jobs:
- 'Illegal entry point, is1ESPipeline is not defined. Repository yaml should not directly reference templates in core-templates folder.': error
- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- - checkout: self
+ - checkout: ${{ parameters.repositoryAlias }}
fetchDepth: 3
clean: true
@@ -93,12 +102,12 @@ jobs:
azureSubscription: "Darc: Maestro Production"
scriptType: ps
scriptLocation: scriptPath
- scriptPath: $(Build.SourcesDirectory)/eng/common/sdk-task.ps1
+ scriptPath: $(System.DefaultWorkingDirectory)/eng/common/sdk-task.ps1
arguments: -task PublishBuildAssets -restore -msbuildEngine dotnet
/p:ManifestsPath='$(Build.StagingDirectory)/Download/AssetManifests'
/p:MaestroApiEndpoint=https://maestro.dot.net
/p:PublishUsingPipelines=${{ parameters.publishUsingPipelines }}
- /p:OfficialBuildId=$(Build.BuildNumber)
+ /p:OfficialBuildId=$(OfficialBuildId)
condition: ${{ parameters.condition }}
continueOnError: ${{ parameters.continueOnError }}
@@ -113,7 +122,7 @@ jobs:
Add-Content -Path $filePath -Value "$(DefaultChannels)"
Add-Content -Path $filePath -Value $(IsStableBuild)
- $symbolExclusionfile = "$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt"
+ $symbolExclusionfile = "$(System.DefaultWorkingDirectory)/eng/SymbolPublishingExclusionsFile.txt"
if (Test-Path -Path $symbolExclusionfile)
{
Write-Host "SymbolExclusionFile exists"
@@ -142,7 +151,7 @@ jobs:
azureSubscription: "Darc: Maestro Production"
scriptType: ps
scriptLocation: scriptPath
- scriptPath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1
+ scriptPath: $(System.DefaultWorkingDirectory)/eng/common/post-build/publish-using-darc.ps1
arguments: >
-BuildId $(BARBuildId)
-PublishingInfraVersion 3
diff --git a/eng/common/core-templates/job/source-build.yml b/eng/common/core-templates/job/source-build.yml
index c4713c8b6..5baedac1e 100644
--- a/eng/common/core-templates/job/source-build.yml
+++ b/eng/common/core-templates/job/source-build.yml
@@ -26,11 +26,16 @@ parameters:
# Specifies the build script to invoke to perform the build in the repo. The default
# './build.sh' should work for typical Arcade repositories, but this is customizable for
# difficult situations.
+ # buildArguments: ''
+ # Specifies additional build arguments to pass to the build script.
# jobProperties: {}
# A list of job properties to inject at the top level, for potential extensibility beyond
# container and pool.
platform: {}
+ # Optional list of directories to ignore for component governance scans.
+ componentGovernanceIgnoreDirectories: []
+
is1ESPipeline: ''
# If set to true and running on a non-public project,
@@ -91,3 +96,4 @@ jobs:
parameters:
is1ESPipeline: ${{ parameters.is1ESPipeline }}
platform: ${{ parameters.platform }}
+ componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }}
diff --git a/eng/common/core-templates/job/source-index-stage1.yml b/eng/common/core-templates/job/source-index-stage1.yml
index 205fb5b3a..662b9fcce 100644
--- a/eng/common/core-templates/job/source-index-stage1.yml
+++ b/eng/common/core-templates/job/source-index-stage1.yml
@@ -1,7 +1,7 @@
parameters:
runAsPublic: false
- sourceIndexUploadPackageVersion: 2.0.0-20240522.1
- sourceIndexProcessBinlogPackageVersion: 1.0.1-20240522.1
+ sourceIndexUploadPackageVersion: 2.0.0-20250425.2
+ sourceIndexProcessBinlogPackageVersion: 1.0.1-20250425.2
sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json
sourceIndexBuildCommand: powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "eng/common/build.ps1 -restore -build -binarylog -ci"
preSteps: []
@@ -66,7 +66,7 @@ jobs:
- script: ${{ parameters.sourceIndexBuildCommand }}
displayName: Build Repository
- - script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i $(BinlogPath) -r $(Build.SourcesDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output
+ - script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i $(BinlogPath) -r $(System.DefaultWorkingDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output
displayName: Process Binlog into indexable sln
- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
diff --git a/eng/common/core-templates/jobs/codeql-build.yml b/eng/common/core-templates/jobs/codeql-build.yml
index f2144252c..4571a7864 100644
--- a/eng/common/core-templates/jobs/codeql-build.yml
+++ b/eng/common/core-templates/jobs/codeql-build.yml
@@ -25,7 +25,7 @@ jobs:
- name: DefaultGuardianVersion
value: 0.109.0
- name: GuardianPackagesConfigFile
- value: $(Build.SourcesDirectory)\eng\common\sdl\packages.config
+ value: $(System.DefaultWorkingDirectory)\eng\common\sdl\packages.config
- name: GuardianVersion
value: ${{ coalesce(parameters.overrideGuardianVersion, '$(DefaultGuardianVersion)') }}
diff --git a/eng/common/core-templates/jobs/jobs.yml b/eng/common/core-templates/jobs/jobs.yml
index ea69be434..bf33cdc2c 100644
--- a/eng/common/core-templates/jobs/jobs.yml
+++ b/eng/common/core-templates/jobs/jobs.yml
@@ -43,6 +43,8 @@ parameters:
artifacts: {}
is1ESPipeline: ''
+ repositoryAlias: self
+ officialBuildId: ''
# Internal resources (telemetry, microbuild) can only be accessed from non-public projects,
# and some (Microbuild) should only be applied to non-PR cases for internal builds.
@@ -117,3 +119,5 @@ jobs:
enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }}
artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }}
signingValidationAdditionalParameters: ${{ parameters.signingValidationAdditionalParameters }}
+ repositoryAlias: ${{ parameters.repositoryAlias }}
+ officialBuildId: ${{ parameters.officialBuildId }}
diff --git a/eng/common/core-templates/jobs/source-build.yml b/eng/common/core-templates/jobs/source-build.yml
index a10ccfbee..0b408a67b 100644
--- a/eng/common/core-templates/jobs/source-build.yml
+++ b/eng/common/core-templates/jobs/source-build.yml
@@ -21,6 +21,9 @@ parameters:
# one job runs on 'defaultManagedPlatform'.
platforms: []
+ # Optional list of directories to ignore for component governance scans.
+ componentGovernanceIgnoreDirectories: []
+
is1ESPipeline: ''
# If set to true and running on a non-public project,
@@ -47,6 +50,7 @@ jobs:
is1ESPipeline: ${{ parameters.is1ESPipeline }}
jobNamePrefix: ${{ parameters.jobNamePrefix }}
platform: ${{ platform }}
+ componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }}
enableInternalSources: ${{ parameters.enableInternalSources }}
- ${{ if eq(length(parameters.platforms), 0) }}:
@@ -55,4 +59,5 @@ jobs:
is1ESPipeline: ${{ parameters.is1ESPipeline }}
jobNamePrefix: ${{ parameters.jobNamePrefix }}
platform: ${{ parameters.defaultManagedPlatform }}
+ componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }}
enableInternalSources: ${{ parameters.enableInternalSources }}
diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml
index 454fd75c7..2ee8bbfff 100644
--- a/eng/common/core-templates/post-build/post-build.yml
+++ b/eng/common/core-templates/post-build/post-build.yml
@@ -44,6 +44,11 @@ parameters:
displayName: Publish installers and checksums
type: boolean
default: true
+
+ - name: requireDefaultChannels
+ displayName: Fail the build if there are no default channel(s) registrations for the current build
+ type: boolean
+ default: false
- name: SDLValidationParameters
type: object
@@ -144,7 +149,7 @@ stages:
- task: PowerShell@2
displayName: Validate
inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/nuget-validation.ps1
+ filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/nuget-validation.ps1
arguments: -PackagesPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/
- job:
@@ -201,7 +206,7 @@ stages:
filePath: eng\common\sdk-task.ps1
arguments: -task SigningValidation -restore -msbuildEngine vs
/p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts'
- /p:SignCheckExclusionsFile='$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt'
+ /p:SignCheckExclusionsFile='$(System.DefaultWorkingDirectory)/eng/SignCheckExclusionsFile.txt'
${{ parameters.signingValidationAdditionalParameters }}
- template: /eng/common/core-templates/steps/publish-logs.yml
@@ -251,7 +256,7 @@ stages:
- task: PowerShell@2
displayName: Validate
inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/sourcelink-validation.ps1
+ filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/sourcelink-validation.ps1
arguments: -InputPath $(Build.ArtifactStagingDirectory)/BlobArtifacts/
-ExtractPath $(Agent.BuildDirectory)/Extract/
-GHRepoName $(Build.Repository.Name)
@@ -306,11 +311,12 @@ stages:
azureSubscription: "Darc: Maestro Production"
scriptType: ps
scriptLocation: scriptPath
- scriptPath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1
+ scriptPath: $(System.DefaultWorkingDirectory)/eng/common/post-build/publish-using-darc.ps1
arguments: >
-BuildId $(BARBuildId)
-PublishingInfraVersion ${{ parameters.publishingInfraVersion }}
-AzdoToken '$(System.AccessToken)'
-WaitPublishingFinish true
+ -RequireDefaultChannels ${{ parameters.requireDefaultChannels }}
-ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}'
-SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}'
diff --git a/eng/common/core-templates/post-build/setup-maestro-vars.yml b/eng/common/core-templates/post-build/setup-maestro-vars.yml
index f7602980d..a7abd58c4 100644
--- a/eng/common/core-templates/post-build/setup-maestro-vars.yml
+++ b/eng/common/core-templates/post-build/setup-maestro-vars.yml
@@ -36,7 +36,7 @@ steps:
$AzureDevOpsBuildId = $Env:Build_BuildId
}
else {
- . $(Build.SourcesDirectory)\eng\common\tools.ps1
+ . $(System.DefaultWorkingDirectory)\eng\common\tools.ps1
$darc = Get-Darc
$buildInfo = & $darc get-build `
--id ${{ parameters.BARBuildId }} `
diff --git a/eng/common/core-templates/steps/enable-internal-sources.yml b/eng/common/core-templates/steps/enable-internal-sources.yml
index 64f881bff..4085512b6 100644
--- a/eng/common/core-templates/steps/enable-internal-sources.yml
+++ b/eng/common/core-templates/steps/enable-internal-sources.yml
@@ -17,8 +17,8 @@ steps:
- task: PowerShell@2
displayName: Setup Internal Feeds
inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
- arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
+ filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1
+ arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $Env:Token
env:
Token: ${{ parameters.legacyCredential }}
# If running on dnceng (internal project), just use the default behavior for NuGetAuthenticate.
@@ -29,8 +29,8 @@ steps:
- task: PowerShell@2
displayName: Setup Internal Feeds
inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
- arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config
+ filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1
+ arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config
- ${{ else }}:
- template: /eng/common/templates/steps/get-federated-access-token.yml
parameters:
@@ -39,8 +39,8 @@ steps:
- task: PowerShell@2
displayName: Setup Internal Feeds
inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
- arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $(dnceng-artifacts-feeds-read-access-token)
+ filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1
+ arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $(dnceng-artifacts-feeds-read-access-token)
# This is required in certain scenarios to install the ADO credential provider.
# It installed by default in some msbuild invocations (e.g. VS msbuild), but needs to be installed for others
# (e.g. dotnet msbuild).
diff --git a/eng/common/core-templates/steps/generate-sbom.yml b/eng/common/core-templates/steps/generate-sbom.yml
index d938b60e1..7f5b84c4c 100644
--- a/eng/common/core-templates/steps/generate-sbom.yml
+++ b/eng/common/core-templates/steps/generate-sbom.yml
@@ -6,7 +6,7 @@
parameters:
PackageVersion: 9.0.0
- BuildDropPath: '$(Build.SourcesDirectory)/artifacts'
+ BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts'
PackageName: '.NET'
ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom
IgnoreDirectories: ''
@@ -38,7 +38,7 @@ steps:
PackageName: ${{ parameters.packageName }}
BuildDropPath: ${{ parameters.buildDropPath }}
PackageVersion: ${{ parameters.packageVersion }}
- ManifestDirPath: ${{ parameters.manifestDirPath }}
+ ManifestDirPath: ${{ parameters.manifestDirPath }}/$(ARTIFACT_NAME)
${{ if ne(parameters.IgnoreDirectories, '') }}:
AdditionalComponentDetectorArgs: '--IgnoreDirectories ${{ parameters.IgnoreDirectories }}'
diff --git a/eng/common/core-templates/steps/publish-logs.yml b/eng/common/core-templates/steps/publish-logs.yml
index 80788c523..0623ac6e1 100644
--- a/eng/common/core-templates/steps/publish-logs.yml
+++ b/eng/common/core-templates/steps/publish-logs.yml
@@ -12,22 +12,22 @@ steps:
inputs:
targetType: inline
script: |
- New-Item -ItemType Directory $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/
- Move-Item -Path $(Build.SourcesDirectory)/artifacts/log/Debug/* $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/
+ New-Item -ItemType Directory $(System.DefaultWorkingDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/
+ Move-Item -Path $(System.DefaultWorkingDirectory)/artifacts/log/Debug/* $(System.DefaultWorkingDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/
continueOnError: true
condition: always()
- task: PowerShell@2
displayName: Redact Logs
inputs:
- filePath: $(Build.SourcesDirectory)/eng/common/post-build/redact-logs.ps1
+ filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/redact-logs.ps1
# For now this needs to have explicit list of all sensitive data. Taken from eng/publishing/v3/publish.yml
- # Sensitive data can as well be added to $(Build.SourcesDirectory)/eng/BinlogSecretsRedactionFile.txt'
+ # 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)
- arguments: -InputPath '$(Build.SourcesDirectory)/PostBuildLogs'
+ arguments: -InputPath '$(System.DefaultWorkingDirectory)/PostBuildLogs'
-BinlogToolVersion ${{parameters.BinlogToolVersion}}
- -TokensFilePath '$(Build.SourcesDirectory)/eng/BinlogSecretsRedactionFile.txt'
+ -TokensFilePath '$(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt'
'$(publishing-dnceng-devdiv-code-r-build-re)'
'$(MaestroAccessToken)'
'$(dn-bot-all-orgs-artifact-feeds-rw)'
@@ -42,7 +42,7 @@ steps:
- task: CopyFiles@2
displayName: Gather post build logs
inputs:
- SourceFolder: '$(Build.SourcesDirectory)/PostBuildLogs'
+ SourceFolder: '$(System.DefaultWorkingDirectory)/PostBuildLogs'
Contents: '**'
TargetFolder: '$(Build.ArtifactStagingDirectory)/PostBuildLogs'
diff --git a/eng/common/core-templates/steps/source-build.yml b/eng/common/core-templates/steps/source-build.yml
index 2915d29bb..0718e4ba9 100644
--- a/eng/common/core-templates/steps/source-build.yml
+++ b/eng/common/core-templates/steps/source-build.yml
@@ -11,6 +11,10 @@ parameters:
# for details. The entire object is described in the 'job' template for simplicity, even though
# the usage of the properties on this object is split between the 'job' and 'steps' templates.
platform: {}
+
+ # Optional list of directories to ignore for component governance scans.
+ componentGovernanceIgnoreDirectories: []
+
is1ESPipeline: false
steps:
@@ -79,6 +83,7 @@ steps:
${{ coalesce(parameters.platform.buildScript, './build.sh') }} --ci \
--configuration $buildConfig \
--restore --build --pack $publishArgs -bl \
+ ${{ parameters.platform.buildArguments }} \
$officialBuildArgs \
$internalRuntimeDownloadArgs \
$internalRestoreArgs \
@@ -96,7 +101,7 @@ steps:
- task: CopyFiles@2
displayName: Prepare BuildLogs staging directory
inputs:
- SourceFolder: '$(Build.SourcesDirectory)'
+ SourceFolder: '$(System.DefaultWorkingDirectory)'
Contents: |
**/*.log
**/*.binlog
@@ -125,5 +130,8 @@ steps:
parameters:
displayName: Component Detection (Exclude upstream cache)
is1ESPipeline: ${{ parameters.is1ESPipeline }}
- componentGovernanceIgnoreDirectories: '$(Build.SourcesDirectory)/artifacts/sb/src/artifacts/obj/source-built-upstream-cache'
+ ${{ if eq(length(parameters.componentGovernanceIgnoreDirectories), 0) }}:
+ componentGovernanceIgnoreDirectories: '$(System.DefaultWorkingDirectory)/artifacts/sb/src/artifacts/obj/source-built-upstream-cache'
+ ${{ else }}:
+ componentGovernanceIgnoreDirectories: ${{ join(',', parameters.componentGovernanceIgnoreDirectories) }}
disableComponentGovernance: ${{ eq(variables['System.TeamProject'], 'public') }}
diff --git a/eng/common/generate-sbom-prep.ps1 b/eng/common/generate-sbom-prep.ps1
index 3e5c1c74a..a0c7d792a 100644
--- a/eng/common/generate-sbom-prep.ps1
+++ b/eng/common/generate-sbom-prep.ps1
@@ -4,18 +4,26 @@ Param(
. $PSScriptRoot\pipeline-logging-functions.ps1
+# Normally - we'd listen to the manifest path given, but 1ES templates will overwrite if this level gets uploaded directly
+# with their own overwriting ours. So we create it as a sub directory of the requested manifest path.
+$ArtifactName = "${env:SYSTEM_STAGENAME}_${env:AGENT_JOBNAME}_SBOM"
+$SafeArtifactName = $ArtifactName -replace '["/:<>\\|?@*"() ]', '_'
+$SbomGenerationDir = Join-Path $ManifestDirPath $SafeArtifactName
+
+Write-Host "Artifact name before : $ArtifactName"
+Write-Host "Artifact name after : $SafeArtifactName"
+
Write-Host "Creating dir $ManifestDirPath"
+
# create directory for sbom manifest to be placed
-if (!(Test-Path -path $ManifestDirPath))
+if (!(Test-Path -path $SbomGenerationDir))
{
- New-Item -ItemType Directory -path $ManifestDirPath
- Write-Host "Successfully created directory $ManifestDirPath"
+ New-Item -ItemType Directory -path $SbomGenerationDir
+ Write-Host "Successfully created directory $SbomGenerationDir"
}
else{
Write-PipelineTelemetryError -category 'Build' "Unable to create sbom folder."
}
Write-Host "Updating artifact name"
-$artifact_name = "${env:SYSTEM_STAGENAME}_${env:AGENT_JOBNAME}_SBOM" -replace '["/:<>\\|?@*"() ]', '_'
-Write-Host "Artifact name $artifact_name"
-Write-Host "##vso[task.setvariable variable=ARTIFACT_NAME]$artifact_name"
+Write-Host "##vso[task.setvariable variable=ARTIFACT_NAME]$SafeArtifactName"
diff --git a/eng/common/generate-sbom-prep.sh b/eng/common/generate-sbom-prep.sh
index d5c76dc82..b8ecca72b 100755
--- a/eng/common/generate-sbom-prep.sh
+++ b/eng/common/generate-sbom-prep.sh
@@ -14,19 +14,24 @@ done
scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
. $scriptroot/pipeline-logging-functions.sh
+
+# replace all special characters with _, some builds use special characters like : in Agent.Jobname, that is not a permissible name while uploading artifacts.
+artifact_name=$SYSTEM_STAGENAME"_"$AGENT_JOBNAME"_SBOM"
+safe_artifact_name="${artifact_name//["/:<>\\|?@*$" ]/_}"
manifest_dir=$1
-if [ ! -d "$manifest_dir" ] ; then
- mkdir -p "$manifest_dir"
- echo "Sbom directory created." $manifest_dir
+# Normally - we'd listen to the manifest path given, but 1ES templates will overwrite if this level gets uploaded directly
+# with their own overwriting ours. So we create it as a sub directory of the requested manifest path.
+sbom_generation_dir="$manifest_dir/$safe_artifact_name"
+
+if [ ! -d "$sbom_generation_dir" ] ; then
+ mkdir -p "$sbom_generation_dir"
+ echo "Sbom directory created." $sbom_generation_dir
else
Write-PipelineTelemetryError -category 'Build' "Unable to create sbom folder."
fi
-artifact_name=$SYSTEM_STAGENAME"_"$AGENT_JOBNAME"_SBOM"
echo "Artifact name before : "$artifact_name
-# replace all special characters with _, some builds use special characters like : in Agent.Jobname, that is not a permissible name while uploading artifacts.
-safe_artifact_name="${artifact_name//["/:<>\\|?@*$" ]/_}"
echo "Artifact name after : "$safe_artifact_name
export ARTIFACT_NAME=$safe_artifact_name
echo "##vso[task.setvariable variable=ARTIFACT_NAME]$safe_artifact_name"
diff --git a/eng/common/internal/NuGet.config b/eng/common/internal/NuGet.config
index 19d3d311b..f70261ed6 100644
--- a/eng/common/internal/NuGet.config
+++ b/eng/common/internal/NuGet.config
@@ -4,4 +4,7 @@
+
+
+
diff --git a/eng/common/post-build/nuget-verification.ps1 b/eng/common/post-build/nuget-verification.ps1
index a365194a9..ac5c69ffc 100644
--- a/eng/common/post-build/nuget-verification.ps1
+++ b/eng/common/post-build/nuget-verification.ps1
@@ -30,7 +30,7 @@
[CmdletBinding(PositionalBinding = $false)]
param(
[string]$NuGetExePath,
- [string]$PackageSource = "https://api.nuget.org/v3/index.json",
+ [string]$PackageSource = "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json",
[string]$DownloadPath,
[Parameter(ValueFromRemainingArguments = $true)]
[string[]]$args
diff --git a/eng/common/post-build/publish-using-darc.ps1 b/eng/common/post-build/publish-using-darc.ps1
index 90b58e32a..a261517ef 100644
--- a/eng/common/post-build/publish-using-darc.ps1
+++ b/eng/common/post-build/publish-using-darc.ps1
@@ -5,7 +5,8 @@ param(
[Parameter(Mandatory=$false)][string] $MaestroApiEndPoint = 'https://maestro.dot.net/',
[Parameter(Mandatory=$true)][string] $WaitPublishingFinish,
[Parameter(Mandatory=$false)][string] $ArtifactsPublishingAdditionalParameters,
- [Parameter(Mandatory=$false)][string] $SymbolPublishingAdditionalParameters
+ [Parameter(Mandatory=$false)][string] $SymbolPublishingAdditionalParameters,
+ [Parameter(Mandatory=$false)][string] $RequireDefaultChannels
)
try {
@@ -33,6 +34,10 @@ try {
if ("false" -eq $WaitPublishingFinish) {
$optionalParams.Add("--no-wait") | Out-Null
}
+
+ if ("true" -eq $RequireDefaultChannels) {
+ $optionalParams.Add("--default-channels-required") | Out-Null
+ }
& $darc add-build-to-channel `
--id $buildId `
diff --git a/eng/common/template-guidance.md b/eng/common/template-guidance.md
index 98bbc1ded..4bf4cf41b 100644
--- a/eng/common/template-guidance.md
+++ b/eng/common/template-guidance.md
@@ -50,7 +50,7 @@ extends:
- task: CopyFiles@2
displayName: Gather build output
inputs:
- SourceFolder: '$(Build.SourcesDirectory)/artifacts/marvel'
+ SourceFolder: '$(System.DefaultWorkingDirectory)/artifacts/marvel'
Contents: '**'
TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/marvel'
```
diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml
index 605692d2f..81ea7a261 100644
--- a/eng/common/templates-official/job/job.yml
+++ b/eng/common/templates-official/job/job.yml
@@ -3,7 +3,7 @@ parameters:
enableSbom: true
runAsPublic: false
PackageVersion: 9.0.0
- BuildDropPath: '$(Build.SourcesDirectory)/artifacts'
+ BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts'
jobs:
- template: /eng/common/core-templates/job/job.yml
@@ -16,6 +16,7 @@ jobs:
parameters:
PackageVersion: ${{ parameters.packageVersion }}
BuildDropPath: ${{ parameters.buildDropPath }}
+ ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom
publishArtifacts: false
# publish artifacts
diff --git a/eng/common/templates-official/variables/sdl-variables.yml b/eng/common/templates-official/variables/sdl-variables.yml
index dbdd66d4a..f1311bbb1 100644
--- a/eng/common/templates-official/variables/sdl-variables.yml
+++ b/eng/common/templates-official/variables/sdl-variables.yml
@@ -4,4 +4,4 @@ variables:
- name: DefaultGuardianVersion
value: 0.109.0
- name: GuardianPackagesConfigFile
- value: $(Build.SourcesDirectory)\eng\common\sdl\packages.config
\ No newline at end of file
+ value: $(System.DefaultWorkingDirectory)\eng\common\sdl\packages.config
\ No newline at end of file
diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml
index d1aeb92fc..5bdd3dd85 100644
--- a/eng/common/templates/job/job.yml
+++ b/eng/common/templates/job/job.yml
@@ -6,7 +6,7 @@ parameters:
enableSbom: true
runAsPublic: false
PackageVersion: 9.0.0
- BuildDropPath: '$(Build.SourcesDirectory)/artifacts'
+ BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts'
jobs:
- template: /eng/common/core-templates/job/job.yml
@@ -75,7 +75,7 @@ jobs:
parameters:
is1ESPipeline: false
args:
- targetPath: '$(Build.SourcesDirectory)\eng\common\BuildConfiguration'
+ targetPath: '$(System.DefaultWorkingDirectory)\eng\common\BuildConfiguration'
artifactName: 'BuildConfiguration'
displayName: 'Publish build retry configuration'
continueOnError: true
diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1
index a46b6deb7..9b3ad8840 100644
--- a/eng/common/tools.ps1
+++ b/eng/common/tools.ps1
@@ -42,7 +42,7 @@
[bool]$useInstalledDotNetCli = if (Test-Path variable:useInstalledDotNetCli) { $useInstalledDotNetCli } else { $true }
# Enable repos to use a particular version of the on-line dotnet-install scripts.
-# default URL: https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.ps1
+# default URL: https://builds.dotnet.microsoft.com/dotnet/scripts/v1/dotnet-install.ps1
[string]$dotnetInstallScriptVersion = if (Test-Path variable:dotnetInstallScriptVersion) { $dotnetInstallScriptVersion } else { 'v1' }
# True to use global NuGet cache instead of restoring packages to repository-local directory.
@@ -262,7 +262,7 @@ function GetDotNetInstallScript([string] $dotnetRoot) {
if (!(Test-Path $installScript)) {
Create-Directory $dotnetRoot
$ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit
- $uri = "https://dotnet.microsoft.com/download/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.ps1"
+ $uri = "https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.ps1"
Retry({
Write-Host "GET $uri"
@@ -416,7 +416,7 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements =
# Locate Visual Studio installation or download x-copy msbuild.
$vsInfo = LocateVisualStudio $vsRequirements
- if ($vsInfo -ne $null) {
+ if ($vsInfo -ne $null -and $env:ForceUseXCopyMSBuild -eq $null) {
# Ensure vsInstallDir has a trailing slash
$vsInstallDir = Join-Path $vsInfo.installationPath "\"
$vsMajorVersion = $vsInfo.installationVersion.Split('.')[0]
diff --git a/eng/common/tools.sh b/eng/common/tools.sh
index 1159726a1..01b09b657 100755
--- a/eng/common/tools.sh
+++ b/eng/common/tools.sh
@@ -54,7 +54,7 @@ warn_as_error=${warn_as_error:-true}
use_installed_dotnet_cli=${use_installed_dotnet_cli:-true}
# Enable repos to use a particular version of the on-line dotnet-install scripts.
-# default URL: https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.sh
+# default URL: https://builds.dotnet.microsoft.com/dotnet/scripts/v1/dotnet-install.sh
dotnetInstallScriptVersion=${dotnetInstallScriptVersion:-'v1'}
# True to use global NuGet cache instead of restoring packages to repository-local directory.
@@ -295,7 +295,7 @@ function with_retries {
function GetDotNetInstallScript {
local root=$1
local install_script="$root/dotnet-install.sh"
- local install_script_url="https://dotnet.microsoft.com/download/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.sh"
+ local install_script_url="https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.sh"
if [[ ! -a "$install_script" ]]; then
mkdir -p "$root"
diff --git a/eng/create-workload-drops.ps1 b/eng/create-workload-drops.ps1
deleted file mode 100644
index c98fd02aa..000000000
--- a/eng/create-workload-drops.ps1
+++ /dev/null
@@ -1,91 +0,0 @@
-# Using the downloaded workloads, this creates the VS drops to upload for VS insertion.
-# It builds the Microsoft.NET.Workloads.Vsman.vsmanproj per workload ZIP, which creates the appropriate VSMAN file.
-
-# $workloadPath: The path to the directory containing the workload ZIPs, usually the output path used by DARC in the download-workloads.ps1 script.
-# - Example Value: "$(RepoRoot)artifacts\workloads"
-# $msBuildToolsPath: The path to the MSBuild tools directory, generally $(MSBuildToolsPath) in MSBuild.
-# - Example Value: 'C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin'
-
-param ([Parameter(Mandatory=$true)] [string] $workloadPath, [Parameter(Mandatory=$true)] [string] $msBuildToolsPath)
-
-# Extracts the workload drop zips.
-$workloads = Get-ChildItem $workloadPath -Include 'Workload.VSDrop.*.zip' -Recurse
-$workloadDropPath = (New-Item "$workloadPath\drops" -Type Container -Force).FullName
-$null = $workloads | ForEach-Object { Expand-Archive -Path $_.FullName -DestinationPath "$workloadDropPath\$([IO.Path]::GetFileNameWithoutExtension($_.Name))" -Force }
-
-# Extracts the workload drop metadata from the drop name and builds the .vsmanproj project.
-# - full: The full drop name, excluding the 'Workload.VSDrop.' prefix.
-# - short: The short name of the drop. Only contains the first word after 'Workload.VSDrop.'.
-# - type: Either 'pre.components', 'components', or 'packs'.
-$dropInfoRegex = '^Workload\.VSDrop\.(?(?\w*)\..*?(?(pre\.)?components$|packs$))'
-$primaryVSComponentJsonValues = ''
-$secondaryVSComponentJsonValues = ''
-Get-ChildItem -Path $workloadDropPath -Directory | ForEach-Object {
- $null = $_.Name -match $dropInfoRegex
- $assemblyName = "$($Matches.full)"
- $dropDir = "$($_.FullName)\"
-
- # Hash the files within the drop folder to create a unique identifier that represents this workload drop.
- # Example: 1E3EA4FE202394037253F57436A6EAD5DE1359792B618B9072014A98563A30FB
- # See: https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/get-filehash#example-4-compute-the-hash-of-a-string
- $contentStream = [System.IO.MemoryStream]::new()
- $writer = [System.IO.StreamWriter]::new($contentStream)
- $dropFiles = Get-ChildItem -Path $dropDir | Sort-Object
- # Note: We're using ASCII because when testing between PS 5.1 and PS 7.5, this would result in the same hash. Other encodings arrived at different hashes.
- $null = $dropFiles | Get-Content -Encoding ASCII -Raw | ForEach-Object { $writer.Write($_) }
- $writer.Flush()
- $contentStream.Position = 0
- $dropHash = (Get-FileHash -InputStream $contentStream).Hash
- $writer.Close()
-
- $vsDropName = "Products/dotnet/workloads/$assemblyName/$dropHash"
- # Reads the first line out of the .metadata file in the workload's output folder and sets it to the workload version.
- $workloadVersion = Get-Content "$dropDir.metadata" -First 1
- # This requires building via MSBuild.exe as there are .NET Framework dependencies necessary for building the .vsmanproj.
- # Additionally, even using the MSBuild task won't work as '/restore' must be used for it to restore properly when building the .vsmanproj.
- & "$msBuildToolsPath\MSBuild.exe" Microsoft.NET.Workloads.Vsman.vsmanproj /restore /t:Build `
- /p:AssemblyName=$assemblyName `
- /p:VstsDropNames=$vsDropName `
- /p:VsixOutputPath=$dropDir `
- /p:WorkloadVersion=$workloadVersion
-
- # While in CI, set the variables necessary for uploading the VS drop.
- if ($env:TF_BUILD) {
- $shortName = "$($Matches.short)"
- # Remove the '.' from 'pre.components'
- $dropType = $Matches.type.Replace('.', '')
- $dropUrl = "https://vsdrop.microsoft.com/file/v1/$vsDropName;$assemblyName.vsman"
-
- Write-Host "##vso[task.setvariable variable=$($shortName)_$($dropType)_name]$vsDropName"
- Write-Host "##vso[task.setvariable variable=$($shortName)_$($dropType)_dir]$dropDir"
- Write-Host "##vso[task.setvariable variable=$($shortName)_$($dropType)_url]$dropUrl"
-
- # Each vsman file is comma-separated. First .vsman is destination and the second is source.
- $vsComponentValue = "$assemblyName.vsman{$workloadVersion}=$dropUrl,"
- # All VS components are added to the primary VS component JSON string.
- $primaryVSComponentJsonValues += $vsComponentValue
-
- # Secondary VS components do not include (pre)components drop types.
- if ($dropType -ne 'components' -and $dropType -ne 'precomponents') {
- $secondaryVSComponentJsonValues += $vsComponentValue
- }
- }
-
- Write-Host '❗ After upload, your workload drop will be available at:'
- Write-Host "https://devdiv.visualstudio.com/_apps/hub/ms-vscs-artifact.build-tasks.drop-hub-group-explorer-hub?name=$vsDropName"
-}
-
-# Clean up intermediate build files in the workload drop folders.
-$null = Get-ChildItem -Path $workloadDropPath -Include *.json, *.vsmand, files.txt -Recurse | Remove-Item
-
-# Write the primary and secondary component strings for the vsman files to a variable for the pipeline to use for the VS insertion step.
-if ($primaryVSComponentJsonValues) {
- # Remove the trailing comma.
- $primaryVSComponentJsonValues = $primaryVSComponentJsonValues -replace '.$'
- Write-Host "##vso[task.setvariable variable=PrimaryVSComponentJsonValues]$primaryVSComponentJsonValues"
-}
-if ($secondaryVSComponentJsonValues) {
- # Remove the trailing comma.
- $secondaryVSComponentJsonValues = $secondaryVSComponentJsonValues -replace '.$'
- Write-Host "##vso[task.setvariable variable=SecondaryVSComponentJsonValues]$secondaryVSComponentJsonValues"
-}
\ No newline at end of file
diff --git a/eng/download-workloads.ps1 b/eng/download-workloads.ps1
deleted file mode 100644
index eaa2779da..000000000
--- a/eng/download-workloads.ps1
+++ /dev/null
@@ -1,88 +0,0 @@
-# This downloads the workloads using DARC.
-# In CI, we need to pass PATs to this, so it runs in Azure Pipelines only (not through MSBuild).
-# For local builds, some preconfiguration is necessary. Check the README.md for details.
-
-# $workloadPath: The path to the directory as output for the workload ZIPs. This is --output-dir in the DARC command.
-# - Example Value: "$(RepoRoot)artifacts\workloads"
-# $gitHubPat: The GitHub PAT to use for DARC (CI build only). See workload-build.yml for converting the PAT to SecureString.
-# $azDOPat: The Azure DevOps PAT to use for DARC (CI build only). See workload-build.yml for converting the PAT to SecureString.
-# $workloadListJson: The JSON string of the list of workload drop names to download. If not provided, all workloads found in Version.Details.xml will be downloaded.
-# - See the workloadDropNames parameter in official.yml for the list generally passed to this script.
-# - Example Value: '{["emsdk","mono"]}'
-# $usePreComponents:
-# - If $true, includes *pre.components.zip drops and excludes *components.zip drops.
-# - If $false, excludes *pre.components.zip drops and includes *components.zip drops.
-
-param ([Parameter(Mandatory=$true)] [string] $workloadPath, [SecureString] $gitHubPat, [SecureString] $azDOPat, [string] $workloadListJson = '', [bool] $usePreComponents = $false)
-
-### Local Build ###
-# Local build requires the installation of DARC. See: https://github.com/dotnet/arcade/blob/main/Documentation/Darc.md#setting-up-your-darc-client
-$darc = 'darc'
-$ciArguments = @()
-$ci = $gitHubPat -and $azDOPat
-
-### CI Build ###
-if ($ci) {
- # Darc access copied from: eng/common/post-build/publish-using-darc.ps1
- $disableConfigureToolsetImport = $true
- . $PSScriptRoot\common\tools.ps1
-
- $darc = Get-Darc
- $gitHubPatPlain = ConvertFrom-SecureString -SecureString $gitHubPat -AsPlainText
- $azDOPatPlain = ConvertFrom-SecureString -SecureString $azDOPat -AsPlainText
- $ciArguments = @(
- '--ci'
- '--github-pat'
- $gitHubPatPlain
- '--azdev-pat'
- $azDOPatPlain
- )
-}
-
-# Reads the Version.Details.xml file to get the workload builds.
-$versionDetailsPath = (Get-Item "$PSScriptRoot\Version.Details.xml").FullName
-$versionDetailsXml = [Xml.XmlDocument](Get-Content $versionDetailsPath)
-$versionDetails = $versionDetailsXml.Dependencies.ProductDependencies.Dependency | Select-Object -Property Uri, Sha -Unique
-
-# Construct the asset filter to only download the required workload drops.
-$workloadFilter = ''
-if ($workloadListJson) {
- $workloadList = ConvertFrom-Json -InputObject $workloadListJson
- if ($workloadList.Count -ne 0) {
- $workloadFilter = "($($workloadList | Join-String -Separator '|'))"
- }
-}
-# Note: The $ at the end of these filters are required for the positive/negative lookbehinds to function.
-# Exclude pre.components.zip.
-$componentFilter = '(?-
- eng/common/build.ps1
- -restore -build -pack -ci -msbuildEngine vs
- -configuration $(_BuildConfig)
- /p:DotNetSignType=$(_SignType)
- /p:TeamName=$(_TeamName)
- displayName: 🟣 Build solution
\ No newline at end of file
+- template: /eng/pipelines/templates/stages/workload-public-build.yml@eng
\ No newline at end of file
diff --git a/eng/pipelines/templates/jobs/workload-build.yml b/eng/pipelines/templates/jobs/workload-build.yml
deleted file mode 100644
index 2954be136..000000000
--- a/eng/pipelines/templates/jobs/workload-build.yml
+++ /dev/null
@@ -1,121 +0,0 @@
-parameters:
- # These types match the types handled in create-workload-drops.ps1. There is a RegEx in that script that parses the workload type out of the workload path.
- # If this list needs to be updated, the RegEx in the script also needs to be updated.
- # The hardcoded list here is necessary as these types need to be available during compilation of the pipeline.
- # The workload types become separate variables in the create-workload-drops.ps1 and this list is looped over to create multiple drop tasks.
- workloadDropTypes:
- - components
- - packs
- - precomponents
-
-jobs:
-# Note: jobs.yml automatically includes the Publish Assets job for pushing the artifacts to DARC.
-- template: /eng/common/templates-official/jobs/jobs.yml
- parameters:
- enableMicrobuild: true
- enablePublishBuildAssets: true
- enableTelemetry: true
- enablePublishUsingPipelines: true
- publishAssetsImmediately: true
- enableSbom: true
- artifacts:
- publish:
- artifacts: true
- logs: true
- manifests: true
- jobs:
- - job: buildRepo
- displayName: Build Repo
- timeoutInMinutes: 120
- pool:
- name: $(DncEngInternalBuildPool)
- image: 1es-windows-2022
- os: windows
- steps:
- - ${{ if eq(parameters.createVSInsertion, true) }}:
- - task: AzureCLI@2
- displayName: 🟣 Download workloads for VS insertion
- inputs:
- azureSubscription: DotNetStaging
- scriptType: pscore
- scriptPath: $(Build.SourcesDirectory)/eng/download-workloads.ps1
- # Note: The second $ for usePreComponents allows the value to resolve as `$true` or `$false`.
- arguments: >-
- -workloadPath '$(Build.SourcesDirectory)/artifacts/workloads'
- -gitHubPat (ConvertTo-SecureString -String '$(BotAccount-dotnet-bot-repo-PAT)' -AsPlainText -Force)
- -azDOPat (ConvertTo-SecureString -String '$(dn-bot-all-drop-rw-code-rw-release-all)' -AsPlainText -Force)
- -workloadListJson '${{ convertToJson(parameters.workloadDropNames) }}'
- -usePreComponents:$${{ parameters.usePreComponentsForVSInsertion }}
-
- # https://github.com/dotnet/arcade/blob/ccae251ef033746eb0213329953f5e3c1687693b/Documentation/CorePackages/Publishing.md#basic-onboarding-scenario-for-new-repositories-to-the-current-publishing-version-v3
- - powershell: >-
- eng/common/build.ps1
- -restore -build -sign -pack -publish -ci -msbuildEngine vs
- -configuration $(_BuildConfig)
- /p:CreateVSInsertion=${{ parameters.createVSInsertion }}
- /p:WorkloadDirectory=$(Build.SourcesDirectory)/artifacts/workloads
- /p:DotNetSignType=$(_SignType)
- /p:TeamName=$(_TeamName)
- /p:DotNetPublishUsingPipelines=true
- /p:OfficialBuildId=$(Build.BuildNumber)
- /p:StabilizePackageVersion=${{ parameters.stabilizePackageVersion }}
- displayName: 🟣 Build solution
-
- - ${{ if eq(parameters.publishToFeed, true) }}:
- - task: 1ES.PublishNuget@1
- displayName: 🟣 Publish NuGet package
- inputs:
- useDotNetTask: true
- packagesToPush: $(Build.SourcesDirectory)/artifacts/packages/**/*.nupkg
- packageParentPath: $(Build.SourcesDirectory)/artifacts/packages
- publishVstsFeed: ${{ parameters.feedForPublishing }}
- nuGetFeedType: internal
- allowPackageConflicts: false
- publishPackageMetadata: true
-
- - ${{ if eq(parameters.createVSInsertion, true) }}:
- # The variables comprised of workloadShortName and workloadType are set during create-workload-drops.ps1 in Microsoft.NET.Workloads.Vsman.csproj.
- - ${{ each workloadShortName in parameters.workloadDropNames }}:
- - ${{ each workloadType in parameters.workloadDropTypes }}:
- # Only create the drop if the workload drop directory exists.
- # Sets the PublishWorkloadDrop variable. See: https://stackoverflow.com/a/60630739/294804
- - pwsh: |
- # If the drop folder doesn't exist (not downloaded via DARC), the drop cannot be published.
- if (-not (Test-Path -Path '$(${{ workloadShortName }}_${{ workloadType }}_dir)')) {
- Write-Host "##vso[task.setvariable variable=PublishWorkloadDrop]False"
- Write-Host 'Drop "${{ workloadShortName }}_${{ workloadType }}" was not downloaded via DARC. Skipping VS drop publish...'
- return
- }
- Write-Host "PublishWorkloadDrop: True"
- Write-Host "##vso[task.setvariable variable=PublishWorkloadDrop]True"
- displayName: 🟣 Check if ${{ workloadShortName }}_${{ workloadType }} needs published
-
- # Docs: https://eng.ms/docs/cloud-ai-platform/devdiv/one-engineering-system-1es/1es-docs/1es-pipeline-templates/features/outputs/microbuild-vsts-drop
- # YAML reference (original task): https://dev.azure.com/devdiv/Engineering/_git/MicroBuild?path=/src/Tasks/UploadDrop/task.json
- - task: 1ES.MicroBuildVstsDrop@1
- displayName: '🟣 Publish VS insertion drop: ${{ workloadShortName }}_${{ workloadType }}'
- inputs:
- dropFolder: $(${{ workloadShortName }}_${{ workloadType }}_dir)
- dropName: $(${{ workloadShortName }}_${{ workloadType }}_name)
- # See: https://dev.azure.com/devdiv/DevDiv/_wiki/wikis/DevDiv.wiki/35351/Retain-Drops
- dropRetentionDays: 183
- accessToken: $(dn-bot-devdiv-drop-rw-code-rw)
- skipUploadIfExists: true
- condition: eq(variables['PublishWorkloadDrop'], 'True')
-
- - ${{ each primaryInsertionBranch in parameters.primaryVsInsertionBranches }}:
- # One PR is created per branch defined at the top of this file in the primaryVsInsertionBranches parameter.
- - template: /eng/pipelines/templates/steps/workload-insertion.yml@self
- parameters:
- targetBranch: ${{ primaryInsertionBranch }}
- topicBranch: ${{ parameters.vsTopicBranch }}
- # PrimaryVSComponentJsonValues variable is set during create-workload-drops.ps1 in Microsoft.NET.Workloads.Vsman.csproj.
- componentJsonValues: $(PrimaryVSComponentJsonValues)
- - ${{ each secondaryInsertionBranch in parameters.secondaryVsInsertionBranches }}:
- # One PR is created per branch defined at the top of this file in the secondaryVsInsertionBranches parameter.
- - template: /eng/pipelines/templates/steps/workload-insertion.yml@self
- parameters:
- targetBranch: ${{ secondaryInsertionBranch }}
- topicBranch: ${{ parameters.vsTopicBranch }}
- # SecondaryVSComponentJsonValues variable is set during create-workload-drops.ps1 in Microsoft.NET.Workloads.Vsman.csproj.
- componentJsonValues: $(SecondaryVSComponentJsonValues)
\ No newline at end of file
diff --git a/eng/pipelines/templates/steps/workload-insertion.yml b/eng/pipelines/templates/steps/workload-insertion.yml
deleted file mode 100644
index 4876a777a..000000000
--- a/eng/pipelines/templates/steps/workload-insertion.yml
+++ /dev/null
@@ -1,51 +0,0 @@
-parameters:
- targetBranch: main
- topicBranch: ''
- componentJsonValues: ''
-
-steps:
-# This allows setting the InsertionTopicBranch variable dynamically.
-# |default| represents normal operation, set to: temp/{team}/{target}/yyyy-MM
-# |temp| is only for pipeline testing, set to: temp/{team}/{target}/BuildNumber-JobAttempt
-- pwsh: |
- $topicBranch = '${{ parameters.topicBranch }}'
- if ($topicBranch -eq '|default|') {
- # Starting with 'temp' allows this branch to be cleaned up automatically by the VS repo branch policies.
- $topicBranch = "temp/$(_TeamName)/${{ parameters.targetBranch }}/$((Get-Date).ToString('yyyy-MM'))"
- }
- # Loosely based on:
- # https://devdiv.visualstudio.com/Engineering/_git/MicroBuild?path=/src/Tasks/InsertVsPayload/plugin.ps1&version=GCf10314b240d5f3d0899e80eb2feb5dc33b5f8c20&line=276&lineEnd=280&lineStartColumn=1&lineEndColumn=1&lineStyle=plain&_a=contents
- if ($topicBranch -eq '|temp|') {
- $topicBranch = 'temp/$(_TeamName)/${{ parameters.targetBranch }}/$(Build.BuildNumber)-$(System.JobAttempt)'
- }
- Write-Host "InsertionTopicBranch: $topicBranch"
- Write-Host "##vso[task.setvariable variable=InsertionTopicBranch]$topicBranch"
- displayName: 🟣 Set InsertionTopicBranch variable
-# Creates VS insertion PRs using the VS drops containing the workloads and vsman files.
-# Documentation: https://devdiv.visualstudio.com/DevDiv/_wiki/wikis/DevDiv.wiki/635/Overview?anchor=**build-pipeline**
-# YAML reference: https://dev.azure.com/devdiv/Engineering/_git/MicroBuild?path=/src/Tasks/InsertVsPayload/task.json
-- task: MicroBuildInsertVsPayload@5
- displayName: '🟣 Create VS insertion: ${{ parameters.targetBranch }}'
- inputs:
- # Connection: https://dnceng.visualstudio.com/internal/_settings/adminservices?resourceId=5708f1c1-8fb7-4722-a643-020cf89ee26f
- # Docs: https://devdiv.visualstudio.com/DevDiv/_wiki/wikis/DevDiv.wiki/40477/Insert-with-a-WIF-Service-Connection
- ConnectedServiceName: MicroBuildInsertionVS
- TargetBranch: ${{ parameters.targetBranch }}
- InsertionTopicBranch: $(InsertionTopicBranch)
- TeamName: $(_TeamName)
- TeamEmail: dotnetdevexcli@microsoft.com
- InsertionPayloadName: 'DotNet-SDK-Workloads ($(Build.SourceBranchName):$(Build.BuildNumber))'
- ComponentJsonValues: ${{ parameters.componentJsonValues }}
- AllowTopicBranchUpdate: true
- # This is the name of our DevDiv alias.
- InsertionReviewers: Dotnet Core SDK and CLI
- InsertionBuildPolicies: Request Perf DDRITs
- # Documentation: https://devdiv.visualstudio.com/DevDiv/_wiki/wikis/DevDiv.wiki/631/Copy-Commit-Details-to-PR
- AddCommitsToPR: true
- # Documentation: https://devdiv.visualstudio.com/DevDiv/_wiki/wikis/DevDiv.wiki/634/Link-Work-Items-to-PR
- LinkWorkItemsToPR: false
- # Documentation: https://devdiv.visualstudio.com/DevDiv/_wiki/wikis/DevDiv.wiki/638/Set-AutoComplete-on-an-Insertion
- InsertAutoComplete: true
- env:
- # This is required. See: https://devdiv.visualstudio.com/DevDiv/_wiki/wikis/DevDiv.wiki/40477/Insert-with-a-WIF-Service-Connection?anchor=steps-to-use-a-wif-service-connection-in-the-insert-vs-task
- SYSTEM_ACCESSTOKEN: $(System.AccessToken)
\ No newline at end of file
diff --git a/global.json b/global.json
index afecb397d..61115d92b 100644
--- a/global.json
+++ b/global.json
@@ -1,11 +1,11 @@
{
"tools": {
- "dotnet": "9.0.102"
+ "dotnet": "9.0.111"
},
"msbuild-sdks": {
"Microsoft.Build.NoTargets": "3.7.0",
- "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.25077.4",
- "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.23552.3"
+ "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.25515.2",
+ "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.23552.3",
"Microsoft.VisualStudio.Internal.MicroBuild.Vsman": "2.0.174"
}
-}
\ No newline at end of file
+}
diff --git a/src/GenerateTestWorkloadSets/GenerateTestWorkloadSets.csproj b/src/GenerateTestWorkloadSets/GenerateTestWorkloadSets.csproj
deleted file mode 100644
index 246bc2d99..000000000
--- a/src/GenerateTestWorkloadSets/GenerateTestWorkloadSets.csproj
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
- Exe
- net9.0
- enable
- annotations
-
-
-
-
-
-
-
diff --git a/src/GenerateTestWorkloadSets/Program.cs b/src/GenerateTestWorkloadSets/Program.cs
deleted file mode 100644
index 9d394baff..000000000
--- a/src/GenerateTestWorkloadSets/Program.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-// See https://aka.ms/new-console-template for more information
-using GenerateTestWorkloadSets;
-using System.Text;
-
-List workloadSetsToCreate = [
- new WorkloadSetInfo("9.0.100", ReleasedWorkloadVersions.Rollback9_0_100_preview7_24414_1),
- new WorkloadSetInfo("9.0.101-servicing.preview.1", ReleasedWorkloadVersions.Rollback9_0_100_preview7_and_rc1),
- new WorkloadSetInfo("9.0.101", ReleasedWorkloadVersions.Rollback9_0_100_rc1_24453_3)
- ];
-
-StringBuilder buildScript = new StringBuilder();
-
-foreach (var workloadSetInfo in workloadSetsToCreate)
-{
- ProcessWorkloadSet(workloadSetInfo, buildScript, Environment.CurrentDirectory);
-}
-
-buildScript.AppendLine("@echo Done");
-
-buildScript.AppendLine();
-buildScript.AppendLine(":End");
-
-
-var buildScriptPath = Path.GetFullPath("buildWorkloads.bat");
-
-File.WriteAllText(buildScriptPath, buildScript.ToString());
-
-Console.WriteLine("Build script path: " + buildScriptPath);
-
-
-void ProcessWorkloadSet(WorkloadSetInfo workloadSetInfo, StringBuilder buildScript, string outputPath)
-{
- string workloadsPropsOutput = Path.Combine(outputPath, $"workloads-{workloadSetInfo.WorkloadSetVersion}.props");
- File.WriteAllText(workloadsPropsOutput, workloadSetInfo.ToWorkloadsProps());
-
- List buildArgs = [
- ..WorkloadSetProperties.CreateFromWorkloadSetVersion(workloadSetInfo.WorkloadSetVersion).CreateCommandLineArgs(),
- $"/p:WorkloadsProps={workloadsPropsOutput}",
- ];
-
- buildScript.AppendLine("@echo Building workload set " + workloadSetInfo.WorkloadSetVersion);
- buildScript.AppendLine("call build -bl " + string.Join(' ', buildArgs));
- buildScript.AppendLine("IF ERRORLEVEL 1 GOTO END");
- buildScript.AppendLine();
-}
\ No newline at end of file
diff --git a/src/GenerateTestWorkloadSets/ReleasedWorkloadVersions.cs b/src/GenerateTestWorkloadSets/ReleasedWorkloadVersions.cs
deleted file mode 100644
index 846073835..000000000
--- a/src/GenerateTestWorkloadSets/ReleasedWorkloadVersions.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace GenerateTestWorkloadSets
-{
- internal class ReleasedWorkloadVersions
- {
- public static string Rollback9_0_100_preview7_24414_1 = """
- {
- "Microsoft.NET.Workload.Emscripten.Current": "9.0.0-preview.7.24373.5/9.0.100-preview.7",
- "Microsoft.NET.Workload.Emscripten.net6": "9.0.0-preview.7.24373.5/9.0.100-preview.7",
- "Microsoft.NET.Workload.Emscripten.net7": "9.0.0-preview.7.24373.5/9.0.100-preview.7",
- "Microsoft.NET.Workload.Emscripten.net8": "9.0.0-preview.7.24373.5/9.0.100-preview.7",
- "Microsoft.NET.Sdk.Android": "35.0.0-preview.7.41/9.0.100-preview.7",
- "Microsoft.NET.Sdk.iOS": "17.5.9231-net9-p7/9.0.100-preview.7",
- "Microsoft.NET.Sdk.MacCatalyst": "17.5.9231-net9-p7/9.0.100-preview.7",
- "Microsoft.NET.Sdk.macOS": "14.5.9231-net9-p7/9.0.100-preview.7",
- "Microsoft.NET.Sdk.Maui": "9.0.0-preview.7.24407.4/9.0.100-preview.7",
- "Microsoft.NET.Sdk.tvOS": "17.5.9231-net9-p7/9.0.100-preview.7",
- "Microsoft.NET.Workload.Mono.ToolChain.Current": "9.0.0-preview.7.24405.7/9.0.100-preview.7",
- "Microsoft.NET.Workload.Mono.ToolChain.net6": "9.0.0-preview.7.24405.7/9.0.100-preview.7",
- "Microsoft.NET.Workload.Mono.ToolChain.net7": "9.0.0-preview.7.24405.7/9.0.100-preview.7",
- "Microsoft.NET.Workload.Mono.ToolChain.net8": "9.0.0-preview.7.24405.7/9.0.100-preview.7",
- "Microsoft.NET.Sdk.Aspire": "8.1.0/8.0.100"
- }
- """;
-
- // A combination of preview 7 and rc1 manifest versions
- public static string Rollback9_0_100_preview7_and_rc1 = """
- {
- "Microsoft.NET.Workload.Emscripten.Current": "9.0.0-preview.7.24373.5/9.0.100-preview.7",
- "Microsoft.NET.Workload.Emscripten.net6": "9.0.0-preview.7.24373.5/9.0.100-preview.7",
- "Microsoft.NET.Workload.Emscripten.net7": "9.0.0-preview.7.24373.5/9.0.100-preview.7",
- "Microsoft.NET.Workload.Emscripten.net8": "9.0.0-preview.7.24373.5/9.0.100-preview.7",
- "Microsoft.NET.Sdk.Android": "35.0.0-preview.7.41/9.0.100-preview.7",
- "Microsoft.NET.Sdk.iOS": "17.5.9231-net9-p7/9.0.100-preview.7",
- "Microsoft.NET.Sdk.MacCatalyst": "17.5.9231-net9-p7/9.0.100-preview.7",
- "Microsoft.NET.Sdk.macOS": "14.5.9231-net9-p7/9.0.100-preview.7",
- "Microsoft.NET.Sdk.Maui": "9.0.0-preview.7.24407.4/9.0.100-preview.7",
- "Microsoft.NET.Sdk.tvOS": "17.5.9231-net9-p7/9.0.100-preview.7",
- "Microsoft.NET.Workload.Mono.ToolChain.Current": "9.0.0-preview.7.24405.7/9.0.100-preview.7",
- "Microsoft.NET.Workload.Mono.ToolChain.net6": "9.0.0-preview.7.24405.7/9.0.100-preview.7",
- "Microsoft.NET.Workload.Mono.ToolChain.net7": "9.0.0-preview.7.24405.7/9.0.100-preview.7",
- "Microsoft.NET.Workload.Mono.ToolChain.net8": "9.0.0-preview.7.24405.7/9.0.100-preview.7",
- "Microsoft.NET.Sdk.Aspire": "8.2.0/8.0.100"
- }
- """;
-
- public static string Rollback9_0_100_rc1_24453_3 = """
- {
- "Microsoft.NET.Workload.Emscripten.Current": "9.0.0-rc.1.24430.3/9.0.100-rc.1",
- "Microsoft.NET.Workload.Emscripten.net6": "9.0.0-rc.1.24430.3/9.0.100-rc.1",
- "Microsoft.NET.Workload.Emscripten.net7": "9.0.0-rc.1.24430.3/9.0.100-rc.1",
- "Microsoft.NET.Workload.Emscripten.net8": "9.0.0-rc.1.24430.3/9.0.100-rc.1",
- "Microsoft.NET.Sdk.Android": "35.0.0-rc.1.80/9.0.100-rc.1",
- "Microsoft.NET.Sdk.iOS": "17.5.9270-net9-rc1/9.0.100-rc.1",
- "Microsoft.NET.Sdk.MacCatalyst": "17.5.9270-net9-rc1/9.0.100-rc.1",
- "Microsoft.NET.Sdk.macOS": "14.5.9270-net9-rc1/9.0.100-rc.1",
- "Microsoft.NET.Sdk.Maui": "9.0.0-rc.1.24453.9/9.0.100-rc.1",
- "Microsoft.NET.Sdk.tvOS": "17.5.9270-net9-rc1/9.0.100-rc.1",
- "Microsoft.NET.Workload.Mono.ToolChain.Current": "9.0.0-rc.1.24431.7/9.0.100-rc.1",
- "Microsoft.NET.Workload.Mono.ToolChain.net6": "9.0.0-rc.1.24431.7/9.0.100-rc.1",
- "Microsoft.NET.Workload.Mono.ToolChain.net7": "9.0.0-rc.1.24431.7/9.0.100-rc.1",
- "Microsoft.NET.Workload.Mono.ToolChain.net8": "9.0.0-rc.1.24431.7/9.0.100-rc.1",
- "Microsoft.NET.Sdk.Aspire": "8.2.0/8.0.100"
- }
- """;
- }
-}
diff --git a/src/GenerateTestWorkloadSets/SdkFeatureBand.cs b/src/GenerateTestWorkloadSets/SdkFeatureBand.cs
deleted file mode 100644
index 336f5d0f1..000000000
--- a/src/GenerateTestWorkloadSets/SdkFeatureBand.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.Deployment.DotNet.Releases;
-
-namespace Microsoft.NET.Sdk.WorkloadManifestReader
-{
- public struct SdkFeatureBand : IEquatable, IComparable
- {
- private ReleaseVersion _featureBand;
-
- public SdkFeatureBand(string? version) : this(new ReleaseVersion(version) ?? throw new ArgumentNullException(nameof(version))) { }
-
- public SdkFeatureBand(ReleaseVersion version)
- {
- var fullVersion = version ?? throw new ArgumentNullException(nameof(version));
- if (string.IsNullOrEmpty(version.Prerelease) || version.Prerelease.Contains("dev") || version.Prerelease.Contains("ci") || version.Prerelease.Contains("rtm"))
- {
- _featureBand = new ReleaseVersion(fullVersion.Major, fullVersion.Minor, fullVersion.SdkFeatureBand);
- }
- else
- {
- // Treat preview versions as their own feature bands
- var prereleaseComponents = fullVersion.Prerelease.Split('.');
- var formattedPrerelease = prereleaseComponents.Length > 1 ?
- $"{prereleaseComponents[0]}.{prereleaseComponents[1]}"
- : prereleaseComponents[0];
- _featureBand = new ReleaseVersion(fullVersion.Major, fullVersion.Minor, fullVersion.SdkFeatureBand, formattedPrerelease);
- }
- }
-
- public int Major => _featureBand.Major;
- public int Minor => _featureBand.Minor;
-
- public bool Equals(SdkFeatureBand other)
- {
- return _featureBand.Equals(other._featureBand);
- }
-
- public int CompareTo(SdkFeatureBand other)
- {
- return _featureBand.CompareTo(other._featureBand);
- }
-
- public override bool Equals(object? obj)
- {
- return obj is SdkFeatureBand featureBand && Equals(featureBand);
- }
-
- public override int GetHashCode()
- {
- return _featureBand.GetHashCode();
- }
-
- public override string ToString()
- {
- return _featureBand.ToString();
- }
-
- public string ToStringWithoutPrerelease()
- {
- return new ReleaseVersion(_featureBand.Major, _featureBand.Minor, _featureBand.SdkFeatureBand).ToString();
- }
-
- public static bool operator >(SdkFeatureBand a, SdkFeatureBand b) => a.CompareTo(b) > 0;
-
- public static bool operator <(SdkFeatureBand a, SdkFeatureBand b) => a.CompareTo(b) < 0;
- }
-}
diff --git a/src/GenerateTestWorkloadSets/WorkloadSetInfo.cs b/src/GenerateTestWorkloadSets/WorkloadSetInfo.cs
deleted file mode 100644
index 5928db347..000000000
--- a/src/GenerateTestWorkloadSets/WorkloadSetInfo.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-using Microsoft.DotNet.Workloads.Workload;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Text.Json;
-using System.Threading.Tasks;
-
-namespace GenerateTestWorkloadSets
-{
- internal class WorkloadSetInfo
- {
-
- public string WorkloadSetVersion { get; set; }
-
-
- public List Manifests { get; set; } = new();
-
- public WorkloadSetInfo()
- {
-
- }
-
- public WorkloadSetInfo(string workloadSetVersion, string rollbackJson)
- {
- WorkloadSetVersion = workloadSetVersion;
- LoadManifests(rollbackJson);
- }
-
- public void LoadManifests(string rollbackJson)
- {
- Manifests.Clear();
-
- var jsonDictionary = JsonSerializer.Deserialize>(rollbackJson);
-
- foreach (var kvp in jsonDictionary)
- {
- string name = kvp.Key;
- var valueParts = kvp.Value.Split('/');
- string version = valueParts[0];
- string featureBand = valueParts[1];
-
- Manifests.Add(new WorkloadManifestInfo(name, featureBand, version));
- }
- }
-
- public string ToWorkloadsProps()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.AppendLine("");
- sb.AppendLine(" ");
- foreach (var manifest in Manifests)
- {
- sb.AppendLine($""" """);
- }
- sb.AppendLine(" ");
- sb.AppendLine("");
-
- return sb.ToString();
- }
- }
-
- internal class WorkloadSetProperties
- {
- public string WorkloadSetVersion { get; set; }
- public string VersionMajor { get; set; }
- public string VersionMinor { get; set; }
- public string VersionSdkMinor { get; set; }
- public string VersionFeature { get; set; }
- public string VersionPatch { get; set; }
- public string SdkFeatureBand { get; set; }
-
- public string Version { get; set; }
-
- public static WorkloadSetProperties CreateFromWorkloadSetVersion(string workloadSetVersion)
- {
- WorkloadSetProperties ret = new WorkloadSetProperties();
- ret.WorkloadSetVersion = workloadSetVersion;
-
- string[] sections = workloadSetVersion.Split(new char[] { '-', '+' }, 2);
- string versionCore = sections[0];
- string? preReleaseOrBuild = sections.Length > 1 ? sections[1] : null;
-
- string[] coreComponents = versionCore.Split('.');
- string major = coreComponents[0];
- string minor = coreComponents[1];
- string patch = coreComponents[2];
-
- ret.VersionMajor = major;
- ret.VersionMinor = minor;
- ret.VersionSdkMinor = (int.Parse(patch) / 100).ToString();
- ret.VersionFeature = (int.Parse(patch) % 100).ToString("d2");
-
- if (coreComponents.Length == 3)
- {
- ret.VersionPatch = "0";
- }
- else
- {
- ret.VersionPatch = coreComponents[3];
- }
-
- ret.SdkFeatureBand = Microsoft.DotNet.Workloads.Workload.WorkloadSetVersion.GetFeatureBand(workloadSetVersion).ToString();
- ret.Version = Microsoft.DotNet.Workloads.Workload.WorkloadSetVersion.ToWorkloadSetPackageVersion(workloadSetVersion, out _);
-
- return ret;
- }
-
- public string[] CreateCommandLineArgs()
- {
- return
- [
- $"/p:VersionMajor={VersionMajor}",
- $"/p:VersionMinor={VersionMinor}",
- $"/p:VersionSdkMinor={VersionSdkMinor}",
- $"/p:VersionFeature={VersionFeature}",
- $"/p:VersionPatch={VersionPatch}",
- $"/p:Version={Version}",
- $"/p:SdkFeatureBand={SdkFeatureBand}",
- $"/p:WorkloadsVersion={WorkloadSetVersion}",
- ];
- }
-
- }
-
- internal record WorkloadManifestInfo(string Name, string FeatureBand, string Version);
-
-}
diff --git a/src/GenerateTestWorkloadSets/WorkloadSetVersion.cs b/src/GenerateTestWorkloadSets/WorkloadSetVersion.cs
deleted file mode 100644
index 2057b0620..000000000
--- a/src/GenerateTestWorkloadSets/WorkloadSetVersion.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Microsoft.Deployment.DotNet.Releases;
-using Microsoft.NET.Sdk.WorkloadManifestReader;
-
-namespace Microsoft.DotNet.Workloads.Workload
-{
- static class WorkloadSetVersion
- {
- public static string ToWorkloadSetPackageVersion(string workloadSetVersion, out SdkFeatureBand sdkFeatureBand)
- {
- string[] sections = workloadSetVersion.Split(new char[] { '-', '+' }, 2);
- string versionCore = sections[0];
- string? preReleaseOrBuild = sections.Length > 1 ? sections[1] : null;
-
- string[] coreComponents = versionCore.Split('.');
- string major = coreComponents[0];
- string minor = coreComponents[1];
- string patch = coreComponents[2];
-
- string packageVersion = $"{major}.{patch}.";
- if (coreComponents.Length == 3)
- {
- // No workload set patch version
- packageVersion += "0";
-
- // Use preview specifier (if any) from workload set version as part of SDK feature band
- sdkFeatureBand = new SdkFeatureBand(workloadSetVersion);
- }
- else
- {
- // Workload set version has workload patch version (ie 4 components)
- packageVersion += coreComponents[3];
-
- // Don't include any preview specifiers in SDK feature band
- sdkFeatureBand = new SdkFeatureBand($"{major}.{minor}.{patch}");
- }
-
- if (preReleaseOrBuild != null)
- {
- // Figure out if we split on a '-' or '+'
- char separator = workloadSetVersion[sections[0].Length];
- packageVersion += separator + preReleaseOrBuild;
- }
-
- return packageVersion;
- }
-
- public static SdkFeatureBand GetFeatureBand(string workloadSetVersion)
- {
- ToWorkloadSetPackageVersion(workloadSetVersion, out SdkFeatureBand sdkFeatureBand);
- return sdkFeatureBand;
- }
-
- public static string FromWorkloadSetPackageVersion(SdkFeatureBand sdkFeatureBand, string packageVersion)
- {
- var releaseVersion = new ReleaseVersion(packageVersion);
- var patch = releaseVersion.Patch > 0 ? $".{releaseVersion.Patch}" : string.Empty;
- var release = string.IsNullOrWhiteSpace(releaseVersion.Prerelease) ? string.Empty : $"-{releaseVersion.Prerelease}";
- return $"{sdkFeatureBand.Major}.{sdkFeatureBand.Minor}.{releaseVersion.Minor}{patch}{release}";
- }
- }
-}
diff --git a/src/Microsoft.NET.Workloads.Vsman/Microsoft.NET.Workloads.Vsman.csproj b/src/Microsoft.NET.Workloads.Vsman/Microsoft.NET.Workloads.Vsman.csproj
deleted file mode 100644
index b10244922..000000000
--- a/src/Microsoft.NET.Workloads.Vsman/Microsoft.NET.Workloads.Vsman.csproj
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
- $(SdkTargetFramework)
-
-
-
-
-
-
- $(ArtifactsDir)workloads\
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.NET.Workloads.Vsman/Microsoft.NET.Workloads.Vsman.vsmanproj b/src/Microsoft.NET.Workloads.Vsman/Microsoft.NET.Workloads.Vsman.vsmanproj
deleted file mode 100644
index b137e463a..000000000
--- a/src/Microsoft.NET.Workloads.Vsman/Microsoft.NET.Workloads.Vsman.vsmanproj
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- $(SdkTargetFramework)
-
-
-
-
-
-
-
-
-
-
- $(WorkloadVersion)
-
-
-
-
\ No newline at end of file
diff --git a/src/Microsoft.NET.Workloads/Microsoft.NET.Workloads.csproj b/src/Microsoft.NET.Workloads/Microsoft.NET.Workloads.csproj
deleted file mode 100644
index 73227f5d4..000000000
--- a/src/Microsoft.NET.Workloads/Microsoft.NET.Workloads.csproj
+++ /dev/null
@@ -1,162 +0,0 @@
-
-
-
-
- $(SdkTargetFramework)
-
- true
-
-
- true
-
-
- true
- $(MSBuildProjectName).$(SDKFeatureBand)
-
-
- README.md
- $(IntermediateOutputPath)README.md
-
-
- LGHT1105
-
-
-
-
-
-
-
-
-
-
-
-
- $(PkgMicrosoft_Signed_Wix)\tools
- $(PkgMicrosoft_VisualStudioEng_MicroBuild_Plugins_SwixBuild)
- $(SwixPluginPath)\build\Microsoft.VisualStudioEng.MicroBuild.Plugins.SwixBuild.targets
- $(ArtifactsObjDir)workloads/
- $(ArtifactsBinDir)workloads/
- $(WorkloadIntermediateOutputPath)VS/
-
-
-
-
-
- $(ArtifactsObjDir)/LightCommandPackages
-
- $(ArtifactsNonShippingPackagesDir)
-
-
-
-
-
-
-
-
-
- workloads.props
-
-
-
-
-
-
-
-
- @(WorkloadManifest->'%20%20"%(Identity)": "%(Version)/%(FeatureBand)"', ',;')
-
-
-
-
-
-
- 5
-
- 1996-04-01
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <_WixObj Include="$(_WixObjDir)\**\*.wixobj" />
-
-
-
-
-
-
-
-
diff --git a/src/Microsoft.NET.Workloads/README.md b/src/Microsoft.NET.Workloads/README.md
deleted file mode 100644
index a2bba031b..000000000
--- a/src/Microsoft.NET.Workloads/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-## .NET SDK Workload Versions manifest
-
-This package contains .NET SDK Workloads version {SDKWVersion}. This package is not meant to be directly referenced but instead used with the .NET SDK CLI.
\ No newline at end of file
diff --git a/src/Microsoft.NET.Workloads/workloads.props b/src/Microsoft.NET.Workloads/workloads.props
deleted file mode 100644
index 06bcf762d..000000000
--- a/src/Microsoft.NET.Workloads/workloads.props
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/workload-versions.sln b/workload-versions.sln
deleted file mode 100644
index cd44f22f3..000000000
--- a/workload-versions.sln
+++ /dev/null
@@ -1,42 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.7.33920.267
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.NET.Workloads", "src\Microsoft.NET.Workloads\Microsoft.NET.Workloads.csproj", "{7EDB5924-188D-472F-B95B-C5BF6461DB41}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenerateTestWorkloadSets", "src\GenerateTestWorkloadSets\GenerateTestWorkloadSets.csproj", "{55BC9CC1-37A9-4472-B1FE-6B4B94DAA363}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{BF919689-7AF6-4B39-B6C8-0D5ADFE3D484}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.NET.Workloads.Vsman", "src\Microsoft.NET.Workloads.Vsman\Microsoft.NET.Workloads.Vsman.csproj", "{083601A3-E571-454B-809C-7DCA8D535EFF}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {7EDB5924-188D-472F-B95B-C5BF6461DB41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7EDB5924-188D-472F-B95B-C5BF6461DB41}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7EDB5924-188D-472F-B95B-C5BF6461DB41}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7EDB5924-188D-472F-B95B-C5BF6461DB41}.Release|Any CPU.Build.0 = Release|Any CPU
- {55BC9CC1-37A9-4472-B1FE-6B4B94DAA363}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {55BC9CC1-37A9-4472-B1FE-6B4B94DAA363}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {55BC9CC1-37A9-4472-B1FE-6B4B94DAA363}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {55BC9CC1-37A9-4472-B1FE-6B4B94DAA363}.Release|Any CPU.Build.0 = Release|Any CPU
- {083601A3-E571-454B-809C-7DCA8D535EFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {083601A3-E571-454B-809C-7DCA8D535EFF}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {083601A3-E571-454B-809C-7DCA8D535EFF}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {083601A3-E571-454B-809C-7DCA8D535EFF}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {DAEFAB38-2A02-457B-A3D1-3575DF493CE1}
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {083601A3-E571-454B-809C-7DCA8D535EFF} = {BF919689-7AF6-4B39-B6C8-0D5ADFE3D484}
- EndGlobalSection
-EndGlobal