diff --git a/configs/filelist.txt b/configs/filelist.txt new file mode 100644 index 0000000000..bd76140b74 --- /dev/null +++ b/configs/filelist.txt @@ -0,0 +1 @@ +**/*.dll \ No newline at end of file diff --git a/images/odata.png b/images/odata.png new file mode 100644 index 0000000000..77f9f5706f Binary files /dev/null and b/images/odata.png differ diff --git a/pipelines/azure_pipelines.yml b/pipelines/azure_pipelines.yml new file mode 100644 index 0000000000..b8b4840cf6 --- /dev/null +++ b/pipelines/azure_pipelines.yml @@ -0,0 +1,29 @@ +trigger: + branches: + include: + - master + +resources: + repositories: + - repository: self + type: git + ref: master + +pr: + - master +variables: + BuildPlatform: 'Any Cpu' + BuildConfiguration: 'Release' +stages: +- stage: Build + jobs: + - job: Main + displayName: Main Build + # setting a 3hour timeout as webapi tests normally take about 2hr 30 mins + timeoutInMinutes: 180 + + pool: + vmImage: windows-latest + + steps: + - template: ./common.yml diff --git a/pipelines/azure_pipelines_nightly.yml b/pipelines/azure_pipelines_nightly.yml new file mode 100644 index 0000000000..f91bd4b6ad --- /dev/null +++ b/pipelines/azure_pipelines_nightly.yml @@ -0,0 +1,107 @@ +schedules: +- cron: "0 0 * * *" + displayName: Daily Nightly build + branches: + include: + - master +resources: + repositories: + - repository: self + type: git + ref: master +variables: + BuildPlatform: 'Any Cpu' + BuildConfiguration: 'Release' + RootDir: '$(Build.SourcesDirectory)' + ProductBinPath: '$(RootDir)\bin\$(BuildConfiguration)' + RELEASE_SEMANTICS: '$(ReleaseSemantics)' + SourcesRoot: '$(RootDir)' +stages: +- stage: Build + variables: + - group: SigningConfig + jobs: + - job: Main + displayName: Main Build + # setting a 3hour timeout as webapi tests normally take about 2hr 30 mins + timeoutInMinutes: 180 + pool: + vmImage: windows-latest + steps: + - template: ./common.yml + - task: MSBuild@1 + displayName: 'Get Nuget Package Metadata' + inputs: + solution: tools/GetNugetPackageMetadata.proj + platform: '$(BuildPlatform)' + configuration: '$(BuildConfiguration)' + - pwsh: | + $date = Get-Date + $NightlyBuildVersion = $date.ToString('yyyyMMddHHmm') + echo "##vso[task.setvariable variable=NightlyBuildVersion]$NightlyBuildVersion" + displayName: Generate Nightly Build version + - task: DotNetCoreCLI@2 + displayName: Packing ASP.NET Core OData + inputs: + command: custom + custom: pack + arguments: > + $(RootDir)\src\Microsoft.AspNetCore.OData\Microsoft.AspNetCore.OData.csproj + /p:NuspecFile=$(rootDir)\src\Microsoft.AspNetCore.OData\Microsoft.AspNetCore.OData.$(RELEASE_SEMANTICS).nuspec + --configuration=$(buildConfiguration) + --output=$(Build.ArtifactStagingDirectory)\Packages + -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg + + - task: NuGetCommand@2 + displayName: 'Packing AspNet.OData' + inputs: + command: custom + arguments: pack $(RootDir)\src\Microsoft.AspNet.OData\Microsoft.AspNet.OData.$(RELEASE_SEMANTICS).nuspec -NonInteractive -OutputDirectory $(Build.ArtifactStagingDirectory)\Packages -Properties Configuration=$(BuildConfiguration);ProductRoot=$(ProductBinPath);SourcesRoot=$(Build.SourcesDirectory);VersionNuGetSemantic=$(VersionNuGetSemantic);NightlyBuildVersion=$(NightlyBuildVersion);AspNetPackageDependency="$(AspNetPackageDependency)";DependencyInjection1PackageDependency="$(DependencyInjection1PackageDependency)";ODataLibPackageDependency="$(ODataLibPackageDependency)" -Verbosity Detailed -Symbols -SymbolPackageFormat snupkg + - publish: $(Build.ArtifactStagingDirectory)\Packages + displayName: Publish Build Artifacts + artifact: BuildPackages + - pwsh: | + $config = "{""SignClient"":{""AzureAd"":{""AADInstance"":""$(AADInstance)"",""ClientId"":""$(ClientId)"",""TenantId"":""$(TenantId)""},""Service"":{""Url"":""https://codesign.dotnetfoundation.org/"",""ResourceId"":""$(ResourceId)""}}}" + $config > .\configs\SignClient.json + displayName: Generate Sign config + - publish: configs + displayName: Publish Signing Scripts + artifact: configs + +- stage: CodeSign + condition: and(succeeded('Build'), not(eq(variables['build.reason'], 'PullRequest'))) + jobs: + - deployment: CodeSign + displayName: Code Signing + pool: + vmImage: windows-latest + environment: Code Sign - Approvals + variables: + - group: Code Signing + strategy: + runOnce: + deploy: + steps: + - task: DotNetCoreCLI@2 + inputs: + command: custom + custom: tool + arguments: install --tool-path . SignClient + displayName: Install SignTool tool + + - pwsh: | + .\SignClient "Sign" ` + --baseDirectory "$(Pipeline.Workspace)\BuildPackages" ` + --input "**/*.nupkg" ` + --config "$(Pipeline.Workspace)\configs\SignClient.json" ` + --filelist "$(Pipeline.Workspace)\configs\filelist.txt" ` + --user "$(SignClientUser)" ` + --secret "$(SignClientSecret)" ` + --name "Code Sign packages" ` + --description "Signing packages" ` + --descriptionUrl "https://github.com/OData/WebApi" + displayName: Sign packages + + - publish: $(Pipeline.Workspace)/BuildPackages + displayName: Publish Signed Packages + artifact: SignedPackages diff --git a/pipelines/common.yml b/pipelines/common.yml new file mode 100644 index 0000000000..d158498172 --- /dev/null +++ b/pipelines/common.yml @@ -0,0 +1,121 @@ +steps: +- checkout: self + +- task: NuGetToolInstaller@1 + displayName: Use NuGet >=5.2.0 + inputs: + versionSpec: '>=5.2.0' + checkLatest: true + +- task: UseDotNet@2 + displayName: Use .NET Core sdk 3.1 + inputs: + version: 3.x + +- task: UseDotNet@2 + displayName: Use .NET Core sdk 2.0.x + inputs: + version: 2.0.x + +- task: UseDotNet@2 + displayName: Use .NET Core sdk 5.x + inputs: + version: 5.x + includePreviewVersions: true + +- task: NuGetCommand@2 + displayName: 'NuGet restore **\*.sln' + inputs: + restoreSolution: 'sln/WebApiOData.AspNet.sln;sln/WebApiOData.AspNetCore.sln;sln/WebApiOData.E2E.AspNet.sln;sln/WebApiOData.E2E.AspNetCore.sln' + +- task: VSBuild@1 + displayName: 'Build solution sln\WebApiOData.AspNet.sln' + inputs: + solution: 'sln\WebApiOData.AspNet.sln ' + platform: '$(BuildPlatform)' + configuration: '$(BuildConfiguration)' + +- task: VSBuild@1 + displayName: 'Build solution sln\WebApiOData.E2E.AspNet.sln' + inputs: + solution: 'sln\WebApiOData.E2E.AspNet.sln' + platform: '$(BuildPlatform)' + configuration: '$(BuildConfiguration)' + +- task: DotNetCoreCLI@2 + displayName: 'Build Microsoft.AspNetCore.OData.csproj ' + inputs: + projects: '$(Build.SourcesDirectory)\src\Microsoft.AspNetCore.OData\Microsoft.AspNetCore.OData.csproj' + arguments: '--configuration $(BuildConfiguration) --no-incremental' + +- task: DotNetCoreCLI@2 + displayName: 'Build .NET Core Unit test project' + inputs: + projects: '$(Build.SourcesDirectory)\test\UnitTest\Microsoft.AspNetCore.OData.Test\Microsoft.AspNetCore.OData.Test.csproj' + arguments: '--configuration $(BuildConfiguration) --no-incremental' + +- task: DotNetCoreCLI@2 + displayName: 'Build .NET Core E2E test project' + inputs: + projects: '$(Build.SourcesDirectory)\test\E2ETest\Microsoft.Test.E2E.AspNet.OData\Build.AspNetCore\Microsoft.Test.E2E.AspNetCore.OData.csproj' + arguments: '--configuration $(BuildConfiguration) --no-incremental' + +- task: DotNetCoreCLI@2 + displayName: 'Build .NET Core 3x E2E test project' + inputs: + projects: '$(Build.SourcesDirectory)\test\E2ETest\Microsoft.Test.E2E.AspNet.OData\Build.AspNetCore3x\Microsoft.Test.E2E.AspNetCore3x.OData.csproj' + arguments: '--configuration $(BuildConfiguration) --no-incremental' + +- powershell: | + $PROGRAMFILESX86 = [Environment]::GetFolderPath("ProgramFilesX86") + + $SN = $PROGRAMFILESX86 + "\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\sn.exe" + $SNx64 = $PROGRAMFILESX86 + "\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\sn.exe" + + & $SN /Vr $(Build.SourcesDirectory)\bin\Release\Microsoft.AspNet.OData.dll + & $SNx64 /Vr $(Build.SourcesDirectory)\bin\Release\Microsoft.AspNet.OData.dll + + & $SN /Vr $(Build.SourcesDirectory)\bin\release\netstandard2.0\Microsoft.AspNetCore.OData.dll + & $SNx64 /Vr $(Build.SourcesDirectory)\bin\release\netstandard2.0\Microsoft.AspNetCore.OData.dll + + & $SN /Vr $(Build.SourcesDirectory)\bin\Release\UnitTest\AspNet\Microsoft.AspNet.OData.Test.dll + & $SNx64 /Vr $(Build.SourcesDirectory)\bin\Release\UnitTest\AspNet\Microsoft.AspNet.OData.Test.dll + + & $SN /Vr $(Build.SourcesDirectory)\bin\Release\E2ETest\AspNet\Microsoft.Test.E2E.AspNet.OData.dll + & $SNx64 /Vr $(Build.SourcesDirectory)\bin\Release\E2ETest\AspNet\Microsoft.Test.E2E.AspNet.OData.dll + + & $SN /Vr $(Build.SourcesDirectory)\bin\release\E2ETest\AspNetCore\Microsoft.Test.E2E.AspNetCore.OData.dll + & $SNx64 /Vr $(Build.SourcesDirectory)\bin\release\E2ETest\AspNetCore\Microsoft.Test.E2E.AspNetCore.OData.dll + displayName: 'Skip StrongName for Classic' + +- task: DotNetCoreCLI@2 + displayName: 'Core E2E Tests (Microsoft.Test.E2E.AspNetCore.OData.csproj)' + inputs: + command: test + projects: '$(Build.SourcesDirectory)\test\E2ETest\Microsoft.Test.E2E.AspNet.OData\Build.AspNetCore\Microsoft.Test.E2E.AspNetCore.OData.csproj' + arguments: '--configuration $(BuildConfiguration) --no-build' + +- task: DotNetCoreCLI@2 + displayName: 'Core E2E 3x Tests (Microsoft.Test.E2E.AspNetCore3x.OData.csproj)' + inputs: + command: test + projects: '$(Build.SourcesDirectory)\test\E2ETest\Microsoft.Test.E2E.AspNet.OData\Build.AspNetCore3x\Microsoft.Test.E2E.AspNetCore3x.OData.csproj' + arguments: '--configuration $(BuildConfiguration) --no-build --filter FullyQualifiedName!=Microsoft.Test.E2E.AspNet.OData.QueryComposition.SelectExpandEFTests.QueryForLongSelectList -v diag' + +- task: VSTest@2 + displayName: 'Classic Unit Tests (Microsoft.AspNet.OData.Test.dll)' + inputs: + testAssemblyVer2: '**\bin\**\UnitTest\**\Microsoft.AspNet.OData.Test.dll' + +- task: DotNetCoreCLI@2 + displayName: 'Core Unit Tests (Microsoft.AspNetCore.OData.Test.csproj) ' + inputs: + command: test + projects: '$(Build.SourcesDirectory)\test\UnitTest\Microsoft.AspNetCore.OData.Test\Microsoft.AspNetCore.OData.Test.csproj' + arguments: '--configuration $(BuildConfiguration) --no-build' + +- task: VSTest@2 + displayName: 'Classic E2E Tests (Microsoft.Test.E2E.AspNet.OData.dll)' + inputs: + testAssemblyVer2: '**\bin\**\E2ETest\**\Microsoft.Test.E2E.AspNet.OData.dll' + testFiltercriteria: '(DisplayName!=Microsoft.Test.E2E.AspNet.OData.ODataPathHandler.UnicodeRouteTests_TodoĆ¼.CRUDEntitySetShouldWork)' diff --git a/src/Microsoft.AspNet.OData/Microsoft.AspNet.OData.Nightly.Release.nuspec b/src/Microsoft.AspNet.OData/Microsoft.AspNet.OData.Nightly.nuspec similarity index 86% rename from src/Microsoft.AspNet.OData/Microsoft.AspNet.OData.Nightly.Release.nuspec rename to src/Microsoft.AspNet.OData/Microsoft.AspNet.OData.Nightly.nuspec index eb31988526..3b5d11cc26 100644 --- a/src/Microsoft.AspNet.OData/Microsoft.AspNet.OData.Nightly.Release.nuspec +++ b/src/Microsoft.AspNet.OData/Microsoft.AspNet.OData.Nightly.nuspec @@ -3,17 +3,18 @@ Microsoft.AspNet.OData Microsoft ASP.NET Web API 2.2 for OData v4.0 - $VersionFullSemantic$-Nightly$NightlyBuildVersion$ + $VersionNuGetSemantic$-Nightly$NightlyBuildVersion$ Microsoft © Microsoft Corporation. All rights reserved. This package contains everything you need to create OData v4.0 endpoints using ASP.NET Web API and to support OData query syntax for your web APIs. This package contains everything you need to create OData v4.0 endpoints using ASP.NET Web API. en-US http://odata.github.io - https://raw.githubusercontent.com/OData/WebApi/master/License.txt + MIT true Microsoft AspNet WebApi AspNetWebApi OData - http://static.tumblr.com/hgchgxz/9ualgdf98/icon.png + images\odata.png + @@ -31,5 +32,6 @@ + \ No newline at end of file diff --git a/src/Microsoft.AspNet.OData/Microsoft.AspNet.OData.Release.nuspec b/src/Microsoft.AspNet.OData/Microsoft.AspNet.OData.Release.nuspec index ad6592619b..7c8d0c54d7 100644 --- a/src/Microsoft.AspNet.OData/Microsoft.AspNet.OData.Release.nuspec +++ b/src/Microsoft.AspNet.OData/Microsoft.AspNet.OData.Release.nuspec @@ -11,10 +11,11 @@ https://docs.microsoft.com/en-us/odata/changelog/webapi-7x en-US http://odata.github.io - https://raw.githubusercontent.com/OData/WebApi/master/License.txt + MIT true Microsoft AspNet WebApi AspNetWebApi OData - http://static.tumblr.com/hgchgxz/9ualgdf98/icon.png + images\odata.png + @@ -32,5 +33,6 @@ + \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.Nightly.Release.nuspec b/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.Nightly.nuspec similarity index 88% rename from src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.Nightly.Release.nuspec rename to src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.Nightly.nuspec index 9432a268a1..3e3e736786 100644 --- a/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.Nightly.Release.nuspec +++ b/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.Nightly.nuspec @@ -3,17 +3,18 @@ Microsoft.AspNetCore.OData Microsoft ASP.NET Core 2.0 and 3.x for OData v4.0 - $VersionFullSemantic$-Nightly$NightlyBuildVersion$ + $VersionNuGetSemantic$-Nightly$NightlyBuildVersion$ Microsoft © Microsoft Corporation. All rights reserved. This package contains everything you need to create OData v4.0 endpoints using ASP.NET Core MVC and to support OData query syntax for your web APIs. This package contains everything you need to create OData v4.0 endpoints using ASP.NET Core MVC. en-US http://odata.github.io - https://raw.githubusercontent.com/OData/WebApi/master/License.txt + MIT true Microsoft AspNetCore WebApi OData - http://static.tumblr.com/hgchgxz/9ualgdf98/icon.png + images\odata.png + @@ -35,5 +36,6 @@ + \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.Release.nuspec b/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.Release.nuspec index 9319501215..d132b516b3 100644 --- a/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.Release.nuspec +++ b/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.Release.nuspec @@ -11,10 +11,11 @@ https://docs.microsoft.com/en-us/odata/changelog/webapi-7x en-US http://odata.github.io - https://raw.githubusercontent.com/OData/WebApi/master/License.txt + MIT true Microsoft AspNetCore WebApi OData - http://static.tumblr.com/hgchgxz/9ualgdf98/icon.png + images\odata.png + @@ -36,5 +37,6 @@ + \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.csproj b/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.csproj index d022b17221..747f5649eb 100644 --- a/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.csproj +++ b/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.csproj @@ -80,4 +80,15 @@ SRResources.resx + + + ProductRoot=$(ProductBinPath);VersionNuGetSemantic=$(VersionNuGetSemantic) + $(NuspecProperties);NightlyBuildVersion=$(NightlyBuildVersion) + $(NuspecProperties);SourcesRoot=$(RootDir) + $(NuspecProperties);AspNetCorePackageDependency=$(AspNetCorePackageDependency) + $(NuspecProperties);DependencyInjection2PackageDependency=$(DependencyInjection2PackageDependency) + $(NuspecProperties);ODataLibPackageDependency=$(ODataLibPackageDependency) + $(NuspecProperties);NewtonsoftJsonPackageDependency=$(NewtonsoftJsonPackageDependency) + + diff --git a/tools/GetNugetPackageMetadata.proj b/tools/GetNugetPackageMetadata.proj index d215916741..2d9f3abfa2 100644 --- a/tools/GetNugetPackageMetadata.proj +++ b/tools/GetNugetPackageMetadata.proj @@ -1,13 +1,9 @@ - - $([System.DateTime]::Now.ToString("yyyyMMddHHmm")) - -