Skip to content
This repository was archived by the owner on Jul 30, 2024. It is now read-only.

Commit 68d9b5a

Browse files
author
Christy Henriksson
authored
Merge pull request #101 from NuGet/dev
Merging dev->master
2 parents 10194f6 + f78fa09 commit 68d9b5a

17 files changed

Lines changed: 410 additions & 66 deletions

File tree

.gitignore

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
nuget.exe
2+
13
## Ignore Visual Studio temporary files, build results, and
24
## files generated by popular Visual Studio add-ons.
35

@@ -13,11 +15,15 @@
1315
[Rr]eleases/
1416
x64/
1517
x86/
16-
build/
1718
bld/
1819
[Bb]in/
1920
[Oo]bj/
2021

22+
# Files created and used by our build scripts
23+
build/
24+
tools/
25+
.nuget/CredentialProviderBundle.zip
26+
2127
# Roslyn cache directories
2228
*.ide/
2329

@@ -189,5 +195,5 @@ FakesAssemblies/
189195
*.webtestresult
190196

191197
# Vs2015
192-
193-
.vs/config/applicationhost.config
198+
.vs/config/applicationhost.config
199+
*.jfm

.nuget/packages.config

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<packages>
3+
<package id="xunit.runner.console" version="2.1.0" />
4+
<package id="xunit.runner.visualstudio" version="2.1.0" />
5+
</packages>

.vs/config/applicationhost.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@
163163
</site>
164164
<site name="Validation.Callback.Vcs" id="2">
165165
<application path="/" applicationPool="Clr4IntegratedAppPool">
166-
<virtualDirectory path="/" physicalPath="C:\Users\scottbom\NuGet.Jobs\src\Validation.Callback.Vcs" />
166+
<virtualDirectory path="/" physicalPath="C:\src\NuGet.Jobs\src\Validation.Callback.Vcs" />
167167
</application>
168168
<bindings>
169169
<binding protocol="http" bindingInformation="*:8955:localhost" />

build.cmd

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1 @@
1-
@echo Off
2-
set config=%1
3-
if "%config%" == "" (
4-
set config=Release
5-
)
6-
set msbuild="%ProgramFiles(x86)%\MSBuild\14.0\bin\amd64\msbuild.exe"
7-
8-
REM Package restore
9-
Powershell.exe -NoProfile -ExecutionPolicy ByPass -Command "& '%cd%\restoreNuGetExe.ps1'"
10-
tools\nuget.exe restore NuGet.Jobs.sln -OutputDirectory %cd%\packages -NonInteractive -source "https://api.nuget.org/v3/index.json;https://www.myget.org/F/nugetbuild/api/v3/index.json"
11-
if not "%errorlevel%"=="0" goto failure
12-
13-
REM Build
14-
%msbuild% NuGet.Jobs.sln /p:Configuration="%config%" /m /v:M /fl /flp:LogFile=msbuild.log;Verbosity=Normal /nr:false
15-
if not "%errorlevel%"=="0" goto failure
16-
17-
REM Test
18-
tools\nuget.exe install xunit.runner.console -Version 2.0.0 -OutputDirectory packages
19-
packages\xunit.runner.console.2.0.0\tools\xunit.console.exe tests\Tests.Stats.CollectAzureCdnLogs\bin\%config%\Tests.Stats.CollectAzureCdnLogs.dll
20-
packages\xunit.runner.console.2.0.0\tools\xunit.console.exe tests\Tests.Stats.ImportAzureCdnStatistics\bin\%config%\Tests.Stats.ImportAzureCdnStatistics.dll
21-
if not "%errorlevel%"=="0" goto failure
22-
23-
:success
24-
exit 0
25-
26-
:failure
27-
exit -1
1+
PowerShell.exe -NoProfile -ExecutionPolicy ByPass ".\buildandtest.ps1 -Configuration 'Release' -Verbose"

build.ps1

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
[CmdletBinding(DefaultParameterSetName='RegularBuild')]
2+
param (
3+
[ValidateSet("debug", "release")]
4+
[string]$Configuration = 'debug',
5+
[ValidateSet("Release","rtm", "rc", "beta", "beta2", "final", "xprivate", "zlocal")]
6+
[string]$ReleaseLabel = 'zlocal',
7+
[int]$BuildNumber,
8+
[switch]$SkipRestore,
9+
[switch]$CleanCache,
10+
[string]$SimpleVersion = '1.0.0',
11+
[string]$SemanticVersion = '1.0.0-zlocal',
12+
[string]$Branch,
13+
[string]$CommitSHA,
14+
[string]$BuildBranch = 'a8c27302d8720d094c2dce87e00324d84b4697b2'
15+
)
16+
17+
# For TeamCity - If any issue occurs, this script fails the build. - By default, TeamCity returns an exit code of 0 for all powershell scripts, even if they fail
18+
trap {
19+
Write-Host "BUILD FAILED: $_" -ForegroundColor Red
20+
Write-Host "ERROR DETAILS:" -ForegroundColor Red
21+
Write-Host $_.Exception -ForegroundColor Red
22+
Write-Host ("`r`n" * 3)
23+
exit 1
24+
}
25+
26+
if (-not (Test-Path "$PSScriptRoot/build")) {
27+
New-Item -Path "$PSScriptRoot/build" -ItemType "directory"
28+
}
29+
wget -UseBasicParsing -Uri "https://raw.githubusercontent.com/NuGet/ServerCommon/$BuildBranch/build/init.ps1" -OutFile "$PSScriptRoot/build/init.ps1"
30+
. "$PSScriptRoot/build/init.ps1" -BuildBranch "$BuildBranch"
31+
32+
Function Clean-Tests {
33+
[CmdletBinding()]
34+
param()
35+
36+
Trace-Log 'Cleaning test results'
37+
38+
Remove-Item (Join-Path $PSScriptRoot "Results.*.xml")
39+
}
40+
41+
Function Prepare-Vcs-Callback {
42+
[CmdletBinding()]
43+
param()
44+
45+
Trace-Log 'Preparing Validation.Callback.Vcs Package'
46+
47+
$ZipPackagePath = "src\Validation.Callback.Vcs\obj\Validation.Callback.Vcs.zip"
48+
49+
if (Test-Path $ZipPackagePath) {
50+
Remove-Item $ZipPackagePath
51+
}
52+
53+
Build-Solution $Configuration $BuildNumber -MSBuildVersion "14" "src\Validation.Callback.Vcs\Validation.Callback.Vcs.csproj" -Target "Package" -MSBuildProperties "/P:PackageLocation=obj\Validation.Callback.Vcs.zip" -SkipRestore
54+
}
55+
56+
Write-Host ("`r`n" * 3)
57+
Trace-Log ('=' * 60)
58+
59+
$startTime = [DateTime]::UtcNow
60+
if (-not $BuildNumber) {
61+
$BuildNumber = Get-BuildNumber
62+
}
63+
Trace-Log "Build #$BuildNumber started at $startTime"
64+
65+
$BuildErrors = @()
66+
67+
Invoke-BuildStep 'Cleaning test results' { Clean-Tests } `
68+
-ev +BuildErrors
69+
70+
Invoke-BuildStep 'Installing NuGet.exe' { Install-NuGet } `
71+
-ev +BuildErrors
72+
73+
Invoke-BuildStep 'Clearing package cache' { Clear-PackageCache } `
74+
-skip:(-not $CleanCache) `
75+
-ev +BuildErrors
76+
77+
Invoke-BuildStep 'Clearing artifacts' { Clear-Artifacts } `
78+
-ev +BuildErrors
79+
80+
Invoke-BuildStep 'Restoring solution packages' { `
81+
Install-SolutionPackages -path (Join-Path $PSScriptRoot ".nuget\packages.config") -output (Join-Path $PSScriptRoot "packages") -ExcludeVersion } `
82+
-skip:$SkipRestore `
83+
-ev +BuildErrors
84+
85+
Invoke-BuildStep 'Building solution' {
86+
param($Configuration, $BuildNumber, $SolutionPath, $SkipRestore)
87+
Build-Solution $Configuration $BuildNumber -MSBuildVersion "14" $SolutionPath -SkipRestore:$SkipRestore `
88+
} `
89+
-args $Configuration, $BuildNumber, (Join-Path $PSScriptRoot "NuGet.Jobs.sln"), $SkipRestore `
90+
-ev +BuildErrors
91+
92+
Invoke-BuildStep 'Prepare Validation.Callback.Vcs Package' { Prepare-Vcs-Callback } `
93+
-ev +BuildErrors
94+
95+
Invoke-BuildStep 'Creating artifacts' {
96+
$Projects = "src/Stats.CollectAzureCdnLogs/Stats.CollectAzureCdnLogs.csproj", `
97+
"src/Stats.AggregateCdnDownloadsInGallery/Stats.AggregateCdnDownloadsInGallery.csproj", `
98+
"src/Stats.ImportAzureCdnStatistics/Stats.ImportAzureCdnStatistics.csproj", `
99+
"src/Stats.CreateAzureCdnWarehouseReports/Stats.CreateAzureCdnWarehouseReports.csproj", `
100+
"src/UpdateLicenseReports/UpdateLicenseReports.csproj", `
101+
"src/Gallery.CredentialExpiration/Gallery.CredentialExpiration.csproj", `
102+
"src/ArchivePackages/ArchivePackages.csproj", `
103+
"src/Search.GenerateAuxiliaryData/Search.GenerateAuxiliaryData.csproj", `
104+
"src/HandlePackageEdits/HandlePackageEdits.csproj", `
105+
"src/Stats.RollUpDownloadFacts/Stats.RollUpDownloadFacts.csproj", `
106+
"src/Validation.Callback.Vcs/Validation.Callback.Vcs.csproj", `
107+
"src/Validation.Runner/Validation.Runner.csproj"
108+
109+
Foreach ($Project in $Projects) {
110+
New-Package (Join-Path $PSScriptRoot "$Project") -Configuration $Configuration -BuildNumber $BuildNumber -ReleaseLabel $ReleaseLabel -Version $SemanticVersion -Branch $Branch
111+
}
112+
} `
113+
-ev +BuildErrors
114+
115+
Trace-Log ('-' * 60)
116+
117+
## Calculating Build time
118+
$endTime = [DateTime]::UtcNow
119+
Trace-Log "Build #$BuildNumber ended at $endTime"
120+
Trace-Log "Time elapsed $(Format-ElapsedTime ($endTime - $startTime))"
121+
122+
Trace-Log ('=' * 60)
123+
124+
if ($BuildErrors) {
125+
$ErrorLines = $BuildErrors | %{ ">>> $($_.Exception.Message)" }
126+
Error-Log "Builds completed with $($BuildErrors.Count) error(s):`r`n$($ErrorLines -join "`r`n")" -Fatal
127+
}
128+
129+
Write-Host ("`r`n" * 3)

buildandtest.ps1

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[CmdletBinding(DefaultParameterSetName='RegularBuild')]
2+
param (
3+
[ValidateSet("debug", "release")]
4+
[string]$Configuration = 'debug',
5+
[ValidateSet("Release","rtm", "rc", "beta", "beta2", "final", "xprivate", "zlocal")]
6+
[string]$ReleaseLabel = 'zlocal',
7+
[int]$BuildNumber,
8+
[switch]$SkipRestore,
9+
[switch]$CleanCache,
10+
[string]$SimpleVersion = '1.0.0',
11+
[string]$SemanticVersion = '1.0.0-zlocal',
12+
[string]$Branch,
13+
[string]$CommitSHA
14+
)
15+
16+
$ScriptPath = Split-Path $MyInvocation.InvocationName
17+
18+
& "$ScriptPath\build.ps1" -Configuration $Configuration -ReleaseLabel $ReleaseLabel -BuildNumber $BuildNumber -SkipRestore:$SkipRestore -CleanCache:$CleanCache -SimpleVersion "$SimpleVersion" -SemanticVersion "$SemanticVersion" -Branch "$Branch" -CommitSHA "$CommitSHA"
19+
& "$ScriptPath\test.ps1" -Configuration $Configuration -BuildNumber $BuildNumber

src/HandlePackageEdits/HandlePackageEdits.Job.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ FROM PackageEdits e
3333

3434
public const string DefaultSourceContainerName = "packages";
3535
public const string DefaultBackupContainerName = "package-backups";
36+
public const int DefaultMaxRetryCount = 10;
3637

3738
/// <summary>
3839
/// Gets or sets an Azure Storage Uri referring to a container to use as the source for package blobs
@@ -91,6 +92,8 @@ public override bool Init(IDictionary<string, string> jobArgsDictionary)
9192

9293
SourceContainer = Source.CreateCloudBlobClient().GetContainerReference(SourceContainerName);
9394
BackupsContainer = Backups.CreateCloudBlobClient().GetContainerReference(BackupsContainerName);
95+
96+
MaxTryCount = DefaultMaxRetryCount;
9497
}
9598
catch (Exception exception)
9699
{
@@ -147,7 +150,7 @@ public override async Task<bool> Run()
147150
}
148151
catch (Exception exception)
149152
{
150-
Trace.TraceError($"Error editing package {edit.Id} {edit.Version}! {exception}");
153+
Trace.TraceError($"Error editing package {edit.Id} {edit.Version} (try {edit.TriedCount + 1} / {MaxTryCount})! {exception}");
151154
await UpdatePackageEditDbWithError(exception, edit.Key);
152155
}
153156
}
@@ -257,6 +260,13 @@ private async Task ApplyEdit(PackageEdit edit)
257260

258261
private async Task UpdateDatabaseWithEdit(PackageEdit edit, string hash, long size)
259262
{
263+
// insert missing authors as empty in authors table for consistency with gallery
264+
// scenario is metadata edit during verification of package uploaded without authors
265+
if (string.IsNullOrWhiteSpace(edit.Authors))
266+
{
267+
edit.Authors = string.Empty;
268+
}
269+
260270
using (var connection = await PackageDatabase.ConnectTo())
261271
{
262272
var parameters = new DynamicParameters(new

src/Stats.AggregateCdnDownloadsInGallery/Job.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ await statisticsDatabase.QueryWithRetryAsync<DownloadCountData>(
125125
var reader = await command.ExecuteReaderAsync();
126126
aggregateCdnDownloadsInGalleryTable.Load(reader);
127127
aggregateCdnDownloadsInGalleryTable.Rows.Clear();
128+
aggregateCdnDownloadsInGalleryTable.TableName = $"dbo.{_tempTableName}";
128129
_logger.LogInformation("Created temporary table.");
129130

130131
// Populate temporary table in memory

src/Stats.AzureCdnLogs.Common/LogEvents.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,10 @@ public class LogEvents
1616
public static EventId FailedBlobLease = new EventId(506, "Failed to lease blob");
1717
public static EventId FailedDimensionRetrieval = new EventId(507, "Failed to retrieve dimension");
1818
public static EventId FailedToParseLogFileEntry = new EventId(508, "Failed to parse log file entry");
19+
public static EventId FailedToProcessLogStream = new EventId(509, "Error processing log stream");
20+
public static EventId UnknownAzureCdnPlatform = new EventId(510, "Unknown Azure CDN platform");
21+
public static EventId InvalidRawLogFileName = new EventId(511, "Invalid raw log filename");
22+
public static EventId FailedToGetFtpResponse = new EventId(512, "Failed to get FTP response");
23+
public static EventId JobRunFailed = new EventId(550, "Job run failed");
1924
}
2025
}

src/Stats.CollectAzureCdnLogs/Blob/CloudBlobRawLogClient.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,16 @@ public async Task<CloudBlobStream> OpenBlobForWriteAsync(CloudBlobContainer targ
6464
return await blob.OpenWriteAsync();
6565
}
6666

67-
public async Task<bool> CheckIfBlobExistsAsync(CloudBlobContainer targetContainer, RawLogFileInfo logFile)
67+
public async Task<bool> CheckIfBlobExistsAsync(CloudBlobContainer targetContainer, string fileName)
6868
{
69-
using (_logger.BeginScope("Checking if file '{FileName}' exists.", logFile.FileName))
69+
using (_logger.BeginScope("Checking if file '{FileName}' exists.", fileName))
7070
{
7171
try
7272
{
73-
var blob = targetContainer.GetBlockBlobReference(logFile.FileName);
73+
var blob = targetContainer.GetBlockBlobReference(fileName);
7474
var exists = await blob.ExistsAsync();
7575

76-
_logger.LogInformation("Finished checking if file '{FileName}' exists (exists = {FileExists}).", logFile.FileName, exists);
76+
_logger.LogInformation("Finished checking if file '{FileName}' exists (exists = {FileExists}).", fileName, exists);
7777

7878
return exists;
7979
}

0 commit comments

Comments
 (0)