Skip to content

Commit 923741d

Browse files
authored
Move to 5.0.0-*, put all dependency packages in NuGet.Server.Common.sln (#10130)
Run simple validations on the .csproj: - Test projects should only be in one solution (all solutions are tests in CI, reduce duplication) - Determine whether a dependency package project common vs. gallery vs. jobs dynamically - Verify AssemblyInfo.g.cs is only written once per project
1 parent 978a209 commit 923741d

8 files changed

Lines changed: 611 additions & 475 deletions

File tree

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,9 @@ tests/functionaltests.*.xml
414414
*.trx
415415
*.g.txt
416416

417+
# launch settings for running jobs locally
418+
**/Properties/launchSettings.json
419+
417420
# The applicationhost.config is ignored, but already comitted on purpose
418421
# Reason: The localtest.me setting needs to be configured in the <sites>-section.
419422
# See ReadMe.md for more information

.pipelines/NuGetGallery-CI.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@ variables:
1818
- name: CommonPackageVersion
1919
value: $(CommonAssemblyVersion)-$(NuGetGalleryBranch)-$(Build.BuildId)
2020
- name: CommonAssemblyVersion
21-
value: 3.0.0
21+
value: 5.0.0
2222
- name: GalleryPackageVersion
2323
value: $(GalleryAssemblyVersion)-$(NuGetGalleryBranch)-$(Build.BuildId)
2424
- name: GalleryAssemblyVersion
25-
value: 4.4.5
25+
value: 5.0.0
2626
- name: JobsPackageVersion
2727
value: $(JobsAssemblyVersion)-$(NuGetGalleryBranch)-$(Build.BuildId)
2828
- name: JobsAssemblyVersion
29-
value: 4.3.0
29+
value: 5.0.0
3030
- name: NuGetGalleryDirectory
3131
value: ng
3232
- name: NuGetGalleryPath

NuGet.Server.Common.sln

Lines changed: 426 additions & 300 deletions
Large diffs are not rendered by default.

build.ps1

Lines changed: 23 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,16 @@ param (
66
[switch]$SkipRestore,
77
[switch]$SkipArtifacts,
88
[switch]$SkipCommon,
9-
[string]$CommonAssemblyVersion = '3.0.0',
10-
[string]$CommonPackageVersion = '3.0.0-zlocal',
9+
[string]$CommonAssemblyVersion = '5.0.0',
10+
[string]$CommonPackageVersion = '5.0.0-zlocal',
1111
[switch]$SkipGallery,
12-
[string]$GalleryAssemblyVersion = '4.4.5',
13-
[string]$GalleryPackageVersion = '4.4.5-zlocal',
12+
[string]$GalleryAssemblyVersion = '5.0.0',
13+
[string]$GalleryPackageVersion = '5.0.0-zlocal',
1414
[switch]$SkipJobs,
15-
[string]$JobsAssemblyVersion = '4.3.0',
16-
[string]$JobsPackageVersion = '4.3.0-zlocal',
15+
[string]$JobsAssemblyVersion = '5.0.0',
16+
[string]$JobsPackageVersion = '5.0.0-zlocal',
1717
[string]$Branch,
1818
[string]$CommitSHA,
19-
[string]$BuildBranchCommit = '8ea7f23faa289682fd02284a14959ab2c67ad546', #DevSkim: ignore DS173237. Not a secret/token. It is a commit hash.
2019
[string]$VerifyMicrosoftPackageVersion = $null
2120
)
2221

@@ -42,29 +41,17 @@ if (-not $BuildNumber) {
4241
Trace-Log "Build #$BuildNumber started at $startTime"
4342

4443
$BuildErrors = @()
45-
$CommonSolution = Join-Path $PSScriptRoot "NuGet.Server.Common.sln"
46-
$CommonProjects = Get-SolutionProjects $CommonSolution
47-
$SharedCommonProjects = $CommonProjects | Where-Object { $_.IsSrc } | ForEach-Object { $_.RelativePath }
48-
$GallerySolution = Join-Path $PSScriptRoot "NuGetGallery.sln"
49-
$GalleryProjects = Get-SolutionProjects $GallerySolution
50-
$SharedGalleryProjects =
51-
"src\NuGet.Services.Entities\NuGet.Services.Entities.csproj",
52-
"src\NuGetGallery.Core\NuGetGallery.Core.csproj"
53-
$JobsSolution = Join-Path $PSScriptRoot "NuGet.Jobs.sln"
54-
$JobsProjects = Get-SolutionProjects $JobsSolution
55-
$JobsFunctionalTestsSolution = Join-Path $PSScriptRoot "NuGet.Jobs.FunctionalTests.sln"
56-
$SharedJobsProjects =
57-
"src\NuGet.Jobs.Common\NuGet.Jobs.Common.csproj",
58-
"src\Validation.Common.Job\Validation.Common.Job.csproj"
5944

60-
Invoke-BuildStep 'Getting private build tools' { Install-PrivateBuildTools } `
61-
-ev +BuildErrors
62-
63-
Invoke-BuildStep 'Installing NuGet.exe' { Install-NuGet } `
64-
-ev +BuildErrors
65-
66-
Invoke-BuildStep 'Clearing artifacts' { Clear-Artifacts } `
67-
-ev +BuildErrors
45+
. (Join-Path $PSScriptRoot "build.shared.ps1") `
46+
-SkipCommon:$SkipCommon `
47+
-CommonAssemblyVersion $CommonAssemblyVersion `
48+
-CommonPackageVersion $CommonPackageVersion `
49+
-SkipGallery:$SkipGallery `
50+
-GalleryAssemblyVersion $GalleryAssemblyVersion `
51+
-GalleryPackageVersion $GalleryPackageVersion `
52+
-SkipJobs:$SkipJobs `
53+
-JobsAssemblyVersion $JobsAssemblyVersion `
54+
-JobsPackageVersion $JobsPackageVersion
6855

6956
Invoke-BuildStep 'Restoring solution packages' {
7057
$SolutionPath = Join-Path $PSScriptRoot "packages.config"
@@ -74,45 +61,6 @@ Invoke-BuildStep 'Restoring solution packages' {
7461
-skip:$SkipRestore `
7562
-ev +BuildErrors
7663

77-
Invoke-BuildStep 'Setting common version metadata in AssemblyInfo.cs' {
78-
$CommonAssemblyInfo = $CommonProjects `
79-
| Where-Object { !$_.IsTest } `
80-
| Where-Object { !$SkipCommon -or $SharedCommonProjects -contains $_.RelativePath } `
81-
| Where-Object { $SharedGalleryProjects -notcontains $_.RelativePath } `
82-
| Where-Object { $SharedJobsProjects -notcontains $_.RelativePath };
83-
$CommonAssemblyInfo | ForEach-Object {
84-
$Path = Join-Path $_.Directory "Properties\AssemblyInfo.g.cs"
85-
Set-VersionInfo $Path -AssemblyVersion $CommonAssemblyVersion -PackageVersion $CommonPackageVersion -Branch $Branch -Commit $CommitSHA
86-
}
87-
} `
88-
-ev +BuildErrors
89-
90-
Invoke-BuildStep 'Setting gallery version metadata in AssemblyInfo.cs' {
91-
$GalleryAssemblyInfo = $GalleryProjects `
92-
| Where-Object { !$_.IsTest } `
93-
| Where-Object { $SharedCommonProjects -notcontains $_.RelativePath } `
94-
| Where-Object { !$SkipGallery -or $SharedGalleryProjects -contains $_.RelativePath } `
95-
| Where-Object { $SharedJobsProjects -notcontains $_.RelativePath };
96-
$GalleryAssemblyInfo | ForEach-Object {
97-
$Path = Join-Path $_.Directory "Properties\AssemblyInfo.g.cs"
98-
Set-VersionInfo $Path -AssemblyVersion $GalleryAssemblyVersion -PackageVersion $GalleryPackageVersion -Branch $Branch -Commit $CommitSHA
99-
}
100-
} `
101-
-ev +BuildErrors
102-
103-
Invoke-BuildStep 'Setting job version metadata in AssemblyInfo.cs' {
104-
$JobsAssemblyInfo = $JobsProjects `
105-
| Where-Object { !$_.IsTest } `
106-
| Where-Object { $SharedCommonProjects -notcontains $_.RelativePath } `
107-
| Where-Object { $SharedGalleryProjects -notcontains $_.RelativePath } `
108-
| Where-Object { !$SkipJobs -or $SharedJobsProjects -contains $_.RelativePath };
109-
$JobsAssemblyInfo | ForEach-Object {
110-
$Path = Join-Path $_.Directory "Properties\AssemblyInfo.g.cs"
111-
Set-VersionInfo $Path -AssemblyVersion $JobsAssemblyVersion -PackageVersion $JobsPackageVersion -Branch $Branch -Commit $CommitSHA
112-
}
113-
} `
114-
-ev +BuildErrors
115-
11664
Invoke-BuildStep 'Building common solution' {
11765
Build-Solution -Configuration $Configuration -BuildNumber $BuildNumber -SolutionPath $CommonSolution -SkipRestore:$SkipRestore
11866
} `
@@ -144,32 +92,22 @@ Invoke-BuildStep 'Signing the binaries' {
14492
-skip:$SkipArtifacts `
14593
-ev +BuildErrors
14694

147-
$packageVersions = "/p:CommonPackageVersion=$CommonPackageVersion;GalleryPackageVersion=$GalleryPackageVersion;JobsPackageVersion=$JobsPackageVersion"
148-
149-
Invoke-BuildStep 'Creating common artifacts' {
150-
$CommonPackages = $CommonProjects | Where-Object { $_.IsSrc }
95+
Invoke-BuildStep 'Creating dependency packages from all solutions' {
96+
$packageVersions = "/p:CommonPackageVersion=$CommonPackageVersion;GalleryPackageVersion=$GalleryPackageVersion;JobsPackageVersion=$JobsPackageVersion"
97+
98+
$CommonPackages = $CommonProjects | Where-Object { $_.IsSrc } | ForEach-Object { $_.RelativePath }
15199
$CommonPackages | ForEach-Object {
152-
New-ProjectPackage $_.Path -Configuration $Configuration -Symbols -Options $packageVersions
100+
New-ProjectPackage (Join-Path $PSScriptRoot $_) -Configuration $Configuration -Symbols -Options $packageVersions
153101
}
154102
} `
155103
-skip:($SkipCommon -or $SkipArtifacts) `
156104
-ev +BuildErrors
157105

158-
Invoke-BuildStep 'Creating gallery artifacts' { `
159-
$GalleryProjects =
160-
"src\NuGet.Services.DatabaseMigration\NuGet.Services.DatabaseMigration.csproj",
161-
"src\NuGet.Services.Entities\NuGet.Services.Entities.csproj",
162-
"src\NuGetGallery.Core\NuGetGallery.Core.csproj",
163-
"src\NuGetGallery.Services\NuGetGallery.Services.csproj"
164-
$GalleryProjects | ForEach-Object {
165-
New-ProjectPackage (Join-Path $PSScriptRoot $_) -Configuration $Configuration -Symbols -Options $packageVersions
166-
}
167-
106+
Invoke-BuildStep 'Creating job packages from gallery solution' { `
168107
$GalleryNuspecProjects =
169108
"src\DatabaseMigrationTools\DatabaseMigration.Gallery.nuspec",
170109
"src\DatabaseMigrationTools\DatabaseMigration.SupportRequest.nuspec",
171110
"src\DatabaseMigrationTools\DatabaseMigration.Validation.nuspec",
172-
"src\AccountDeleter\Gallery.AccountDeleter.nuspec",
173111
"src\GitHubVulnerabilities2Db\GitHubVulnerabilities2Db.nuspec",
174112
"src\GitHubVulnerabilities2v3\GitHubVulnerabilities2v3.nuspec",
175113
"src\GalleryTools\Gallery.GalleryTools.nuspec",
@@ -184,24 +122,7 @@ Invoke-BuildStep 'Creating gallery artifacts' { `
184122
-skip:($SkipGallery -or $SkipArtifacts) `
185123
-ev +BuildErrors
186124

187-
Invoke-BuildStep 'Creating jobs artifacts' {
188-
$JobsProjects =
189-
"src\Catalog\NuGet.Services.Metadata.Catalog.csproj",
190-
"src\Microsoft.PackageManagement.Search.Web\Microsoft.PackageManagement.Search.Web.csproj",
191-
"src\NuGet.Jobs.Common\NuGet.Jobs.Common.csproj",
192-
"src\NuGet.Protocol.Catalog\NuGet.Protocol.Catalog.csproj",
193-
"src\NuGet.Services.AzureSearch\NuGet.Services.AzureSearch.csproj",
194-
"src\NuGet.Services.Metadata.Catalog.Monitoring\NuGet.Services.Metadata.Catalog.Monitoring.csproj",
195-
"src\NuGet.Services.V3\NuGet.Services.V3.csproj",
196-
"src\Stats.LogInterpretation\Stats.LogInterpretation.csproj",
197-
"src\Validation.Common.Job\Validation.Common.Job.csproj",
198-
"src\Validation.ContentScan.Core\Validation.ContentScan.Core.csproj",
199-
"src\Validation.ScanAndSign.Core\Validation.ScanAndSign.Core.csproj",
200-
"src\Validation.Symbols.Core\Validation.Symbols.Core.csproj"
201-
$JobsProjects | ForEach-Object {
202-
New-ProjectPackage (Join-Path $PSScriptRoot $_) -Configuration $Configuration -Symbols -Options $packageVersions
203-
}
204-
125+
Invoke-BuildStep 'Creating job packages from jobs solution' {
205126
$JobsNuspecProjects =
206127
"src\ArchivePackages\ArchivePackages.nuspec",
207128
"src\CopyAzureContainer\CopyAzureContainer.nuspec",

build.shared.ps1

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
param (
2+
[switch]$SkipCommon,
3+
[string]$CommonAssemblyVersion,
4+
[string]$CommonPackageVersion,
5+
[switch]$SkipGallery,
6+
[string]$GalleryAssemblyVersion,
7+
[string]$GalleryPackageVersion,
8+
[switch]$SkipJobs,
9+
[string]$JobsAssemblyVersion,
10+
[string]$JobsPackageVersion
11+
)
12+
13+
# These are build steps that can be shared with our internal release builds
14+
# It assumes the common build tools have already been imported (e.g. build/common.ps1)
15+
16+
$CommonSolution = Join-Path $PSScriptRoot "NuGet.Server.Common.sln"
17+
$CommonProjects = Get-SolutionProjects $CommonSolution
18+
$GallerySolution = Join-Path $PSScriptRoot "NuGetGallery.sln"
19+
$GalleryProjects = Get-SolutionProjects $GallerySolution
20+
$GalleryFunctionalTestsSolution = Join-Path $PSScriptRoot "NuGetGallery.FunctionalTests.sln"
21+
$GalleryFunctionalTestsProjects = Get-SolutionProjects $GalleryFunctionalTestsSolution
22+
$JobsSolution = Join-Path $PSScriptRoot "NuGet.Jobs.sln"
23+
$JobsProjects = Get-SolutionProjects $JobsSolution
24+
$JobsFunctionalTestsSolution = Join-Path $PSScriptRoot "NuGet.Jobs.FunctionalTests.sln"
25+
$JobsFunctionalTestsProjects = Get-SolutionProjects $JobsFunctionalTestsSolution
26+
27+
$SharedCommonProjects = New-Object System.Collections.ArrayList
28+
$SharedGalleryProjects = New-Object System.Collections.ArrayList
29+
$SharedJobsProjects = New-Object System.Collections.ArrayList
30+
31+
Invoke-BuildStep 'Analyzing project files' {
32+
# Projects are shared between the solutions. Find all projects shared between the solutions
33+
$solutions =
34+
$CommonProjects,
35+
$GalleryProjects,
36+
$GalleryFunctionalTestsProjects,
37+
$JobsProjects,
38+
$JobsFunctionalTestsProjects
39+
$all = @()
40+
$shared = @()
41+
foreach ($solutionProjects in $solutions) {
42+
if ($all.Count -gt 0) {
43+
$shared += $solutionProjects | Where-Object { ($all | ForEach-Object { $_.RelativePath }) -contains $_.RelativePath }
44+
}
45+
$all += $solutionProjects
46+
}
47+
$all = $all | Sort-Object -Property RelativePath | Get-Unique -AsString
48+
Trace-Log "Total projects: $($all.Count)"
49+
$shared = $shared | Sort-Object -Property RelativePath | Get-Unique -AsString
50+
Trace-Log "Total shared projects: $($shared.Count)"
51+
52+
# Split them into gallery, jobs, and common sets based on version property in the .csproj
53+
# Use of MSBuild variable 'GalleryPackageVersion' marks a gallery package
54+
# Use of MSBuild variable 'JobsPackageVersion' marks a jobs package
55+
# All others are common packages
56+
$unversionedCount = 0
57+
foreach ($SharedProject in $shared) {
58+
$versionLine = Get-Content $SharedProject.Path | Where-Object { $_ -like '*<PackageVersion*>*' }
59+
if ($versionLine -like '*GalleryPackageVersion*') {
60+
$SharedGalleryProjects.Add($SharedProject.RelativePath) | Out-Null
61+
} elseif ($versionLine -like '*JobsPackageVersion*') {
62+
$SharedJobsProjects.Add($SharedProject.RelativePath) | Out-Null
63+
} elseif ($versionLine -like '*CommonPackageVersion*') {
64+
$SharedCommonProjects.Add($SharedProject.RelativePath) | Out-Null
65+
} else {
66+
Trace-Log "Shared project without a <PackageVersion> set: $($SharedProject.RelativePath)"
67+
$unversionedCount++
68+
}
69+
}
70+
71+
if ($unversionedCount -gt 0) {
72+
throw "$($unversionedCount) shared projects have no <PackageVersion> set based on GalleryPackageVersion, JobsPackageVersion, or CommonPackageVersion."
73+
}
74+
75+
Trace-Log "Total shared common projects: $($SharedCommonProjects.Count)"
76+
Trace-Log "Total shared gallery projects: $($SharedGalleryProjects.Count)"
77+
Trace-Log "Total shared jobs projects: $($SharedJobsProjects.Count)"
78+
79+
# Validate that only src projects are shared. No need to shared tests since they would run multiple times.
80+
$sharedNonSrc = $shared | Where-Object { !$_.IsSrc }
81+
if ($sharedNonSrc.Count -gt 0) {
82+
$sharedNonSrc | ForEach-Object { Trace-Log "Shared project not in src directory: $($_.RelativePath)" }
83+
throw "$($sharedNonSrc.Count) projects are shared between solutions but are non in the src directory. Only src projects should be shared."
84+
}
85+
86+
# Validate all .csproj files are in a solution
87+
Trace-Log "Checking for .csproj files not included in any solution..."
88+
$allCsproj = Get-ChildItem $PSScriptRoot -Recurse -Filter "*.csproj" | ForEach-Object { $_.FullName }
89+
Trace-Log "Found $($allCsproj.Count) .csproj files"
90+
$missingCsproj = $allCsproj | Where-Object { ($all | ForEach-Object { $_.Path }) -notcontains $_ }
91+
if ($missingCsproj.Count -gt 0) {
92+
$missingCsproj | ForEach-Object { Trace-Log "Project not in any solution file: $_" }
93+
throw "$($missingCsproj.Count) projects are not in any solution file."
94+
}
95+
} `
96+
-ev +BuildErrors
97+
98+
$WrittenAssemblyInfo = New-Object System.Collections.ArrayList
99+
function Confirm-NoDuplicateAssemblyInfo($Path) {
100+
if ($WrittenAssemblyInfo -contains $Path) {
101+
throw "Duplicate AssemblyInfo.g.cs: $Path"
102+
} else {
103+
$WrittenAssemblyInfo.Add($Path) | Out-Null
104+
}
105+
}
106+
107+
Invoke-BuildStep 'Setting common version metadata in AssemblyInfo.cs' {
108+
$CommonAssemblyInfo = $CommonProjects `
109+
| Where-Object { !$_.IsTest } `
110+
| Where-Object { !$SkipCommon -or $SharedCommonProjects -contains $_.RelativePath } `
111+
| Where-Object { $SharedGalleryProjects -notcontains $_.RelativePath } `
112+
| Where-Object { $SharedJobsProjects -notcontains $_.RelativePath };
113+
$CommonAssemblyInfo | ForEach-Object {
114+
$Path = Join-Path $_.Directory "Properties\AssemblyInfo.g.cs"
115+
Set-VersionInfo $Path -AssemblyVersion $CommonAssemblyVersion -PackageVersion $CommonPackageVersion -Branch $Branch -Commit $CommitSHA
116+
Confirm-NoDuplicateAssemblyInfo $Path
117+
}
118+
} `
119+
-ev +BuildErrors
120+
121+
Invoke-BuildStep 'Setting gallery version metadata in AssemblyInfo.cs' {
122+
$GalleryAssemblyInfo = $GalleryProjects `
123+
| Where-Object { !$_.IsTest } `
124+
| Where-Object { $SharedCommonProjects -notcontains $_.RelativePath } `
125+
| Where-Object { !$SkipGallery -or $SharedGalleryProjects -contains $_.RelativePath } `
126+
| Where-Object { $SharedJobsProjects -notcontains $_.RelativePath };
127+
$GalleryAssemblyInfo | ForEach-Object {
128+
$Path = Join-Path $_.Directory "Properties\AssemblyInfo.g.cs"
129+
Set-VersionInfo $Path -AssemblyVersion $GalleryAssemblyVersion -PackageVersion $GalleryPackageVersion -Branch $Branch -Commit $CommitSHA
130+
Confirm-NoDuplicateAssemblyInfo $Path
131+
}
132+
} `
133+
-ev +BuildErrors
134+
135+
Invoke-BuildStep 'Setting job version metadata in AssemblyInfo.cs' {
136+
$JobsAssemblyInfo = $JobsProjects `
137+
| Where-Object { !$_.IsTest } `
138+
| Where-Object { $SharedCommonProjects -notcontains $_.RelativePath } `
139+
| Where-Object { $SharedGalleryProjects -notcontains $_.RelativePath } `
140+
| Where-Object { !$SkipJobs -or $SharedJobsProjects -contains $_.RelativePath };
141+
$JobsAssemblyInfo | ForEach-Object {
142+
$Path = Join-Path $_.Directory "Properties\AssemblyInfo.g.cs"
143+
Set-VersionInfo $Path -AssemblyVersion $JobsAssemblyVersion -PackageVersion $JobsPackageVersion -Branch $Branch -Commit $CommitSHA
144+
Confirm-NoDuplicateAssemblyInfo $Path
145+
}
146+
} `
147+
-ev +BuildErrors
148+
149+
Invoke-BuildStep 'Getting private build tools' { Install-PrivateBuildTools } `
150+
-ev +BuildErrors
151+
152+
Invoke-BuildStep 'Installing NuGet.exe' { Install-NuGet } `
153+
-ev +BuildErrors
154+
155+
Invoke-BuildStep 'Clearing artifacts' { Clear-Artifacts } `
156+
-ev +BuildErrors

src/Bootstrap/nuget/MyGet.ps1

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)