diff --git a/.vsts-ci.yml b/.vsts-ci.yml index 6a435a3f0..5fcaedd61 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -1,37 +1,164 @@ jobs: + - job: build + strategy: + matrix: + linux: + osName: 'Linux' + imageName: 'ubuntu-22.04' + mac: + osName: 'macOS' + imageName: 'macOS-latest' + windows: + osName: 'Windows' + imageName: 'windows-latest' -################################################################################ -- job: Windows -################################################################################ - displayName: Windows - timeoutInMinutes: 180 - pool: - vmImage: windows-latest - steps: - - template: eng/steps.yml - parameters: - os: 'Windows' - -################################################################################ -- job: Linux -################################################################################ - displayName: Linux (Ubuntu) - timeoutInMinutes: 180 - pool: - vmImage: ubuntu-22.04 - steps: - - template: eng/steps.yml - parameters: - os: 'Linux' - -################################################################################ -- job: macOS -################################################################################ - displayName: macOS - timeoutInMinutes: 180 - pool: - vmImage: macOS-latest - steps: - - template: eng/steps.yml - parameters: - os: 'macOS' + displayName: Build + timeoutInMinutes: 180 + pool: + vmImage: $(imageName) + + steps: + # Prerequisites + - checkout: self + submodules: true + + - task: Bash@3 + displayName: Install tools + inputs: + targetType: inline + script: | + sudo apt-get -yq install dos2unix + condition: eq(variables.osName, 'Linux') + + # Setup .NET + - task: UseDotNet@2 + displayName: Install .NET 9.0 SDK for build + inputs: + packageType: 'sdk' + version: '9.0.x' + + # Display version info + - task: PowerShell@2 + displayName: Version Information + inputs: + targetType: inline + script: | + dotnet --info + try { msbuild -version } catch { } + try { mono --version } catch { } + + # Build & Package + - powershell: ./make.ps1 + displayName: Build + + - powershell: ./make.ps1 package + displayName: Package + + - task: CopyFiles@2 + displayName: Copy Build Logs + inputs: + Contents: '*.binlog' + TargetFolder: '$(Build.ArtifactStagingDirectory)' + condition: and(succeededOrFailed(), eq(variables['system.pullrequest.isfork'], false)) + + - task: CopyFiles@2 + displayName: Copy Packages + inputs: + SourceFolder: '$(Build.Repository.LocalPath)/Package/Release/Packages' + Contents: | + **/*.nupkg + **/*.snupkg + **/*.zip + **/*.msi + **/*.deb + **/*.pkg + TargetFolder: '$(Build.ArtifactStagingDirectory)' + condition: and(succeededOrFailed(), eq(variables['system.pullrequest.isfork'], false)) + + - task: PublishBuildArtifacts@1 + displayName: Publish Artifacts + inputs: + ArtifactName: '$(osName) Artifacts' + condition: and(succeededOrFailed(), eq(variables['system.pullrequest.isfork'], false)) + + - job: test + strategy: + matrix: + linux_net462: + osName: Linux + imageName: ubuntu-22.04 + framework: net462 + linux_net6_0: + osName: Linux + imageName: ubuntu-22.04 + framework: net6.0 + linux_net8_0: + osName: Linux + imageName: ubuntu-22.04 + framework: net8.0 + macos_net462: + osName: macOS + imageName: macOS-latest + framework: net462 + macos_net6_0: + osName: macOS + imageName: macOS-latest + framework: net6.0 + macos_net8_0: + osName: macOS + imageName: macOS-latest + framework: net8.0 + windows_net462: + osName: Windows + imageName: windows-latest + framework: net462 + windows_net6_0: + osName: Windows + imageName: windows-latest + framework: net6.0 + windows_net8_0: + osName: Windows + imageName: windows-latest + framework: net8.0 + + displayName: Test + timeoutInMinutes: 180 + pool: + vmImage: $(imageName) + + steps: + # Prerequisites + - checkout: self + submodules: true + + # Setup .NET + - task: UseDotNet@2 + displayName: Install .NET 6.0 runtime for testing + inputs: + packageType: 'runtime' + version: '6.0.x' + - task: UseDotNet@2 + displayName: Install .NET 8.0 runtime for testing + inputs: + packageType: 'runtime' + version: '8.0.x' + - task: UseDotNet@2 + displayName: Install .NET 9.0 SDK for build + inputs: + packageType: 'sdk' + version: '9.0.x' + + # Build & Test + - powershell: ./make.ps1 + displayName: Build + - powershell: ./make.ps1 -frameworks $(framework) test-all + displayName: Test ($(framework)) + + - task: PublishTestResults@2 + displayName: Publish Test Results + inputs: + testRunner: VSTest + testResultsFiles: '**/*.trx' + mergeTestResults: true + testRunTitle: $(osName) - $(framework) + condition: succeededOrFailed() diff --git a/eng/steps.yml b/eng/steps.yml deleted file mode 100644 index 5903af548..000000000 --- a/eng/steps.yml +++ /dev/null @@ -1,146 +0,0 @@ -parameters: - os: '' - -steps: - - checkout: self - submodules: true - - - powershell: | - - $xml = [xml] (Get-Content CurrentVersion.props) - $major = $xml.Project.PropertyGroup.MajorVersion - $minor = $xml.Project.PropertyGroup.MinorVersion - $micro = $xml.Project.PropertyGroup.MicroVersion - $serial = $xml.Project.PropertyGroup.ReleaseSerial - $level = $xml.Project.PropertyGroup.ReleaseLevel - - if($level -eq 'final') { - $PackageVersion = "$major.$minor.$micro" - } elseif($level -ne 'final' -or $serial -ne '0') { - $PackageVersion = "$major.$minor.$micro-$level$serial" - } - - # store the package version to an environment variable - Write-Host ("##vso[task.setvariable variable=PackageVersion;isSecret=false;isOutput=true;]$PackageVersion") - displayName: Grab Package Version - - - task: UseDotNet@2 - displayName: Install .NET 6.0 runtime for testing - inputs: - packageType: 'runtime' - version: '6.0.x' - - - task: UseDotNet@2 - displayName: Install .NET 8.0 runtime for testing - inputs: - packageType: 'runtime' - version: '8.0.x' - - - task: UseDotNet@2 - displayName: Install .NET 9.0 SDK for build - inputs: - packageType: 'sdk' - version: '9.0.x' - - # Set Mono version on macOS - - ${{ if eq(parameters.os, 'macOS') }}: - - task: Bash@3 - displayName: Set Mono Version - inputs: - targetType: inline - script: | - # use Mono 6.4.0 version - SYMLINK=6.4.0 - MONOPREFIX=/Library/Frameworks/Mono.framework/Versions/$SYMLINK - echo "##vso[task.setvariable variable=DYLD_FALLBACK_LIBRARY_PATH;]$MONOPREFIX/lib:/lib:/usr/lib:$DYLD_LIBRARY_FALLBACK_PATH" - echo "##vso[task.setvariable variable=PKG_CONFIG_PATH;]$MONOPREFIX/lib/pkgconfig:$MONOPREFIX/share/pkgconfig:$PKG_CONFIG_PATH" - echo "##vso[task.setvariable variable=PATH;]$MONOPREFIX/bin:$PATH" - - # Install mono when running on Linux - - ${{ if eq(parameters.os, 'Linux') }}: - - task: Bash@3 - displayName: Install tools - inputs: - targetType: inline - script: | - sudo apt-get -yq install mono-vbnc dos2unix - - # Dump version info - - task: PowerShell@2 - displayName: Version Information - inputs: - targetType: inline - script: | - dotnet --info - try { msbuild -version } catch { } - try { mono --version } catch { } - - - powershell: ./make.ps1 - displayName: Build - - - powershell: ./make.ps1 test-all - displayName: Test - - - task: PublishTestResults@2 - displayName: Publish Test Results - inputs: - testRunner: VSTest - testResultsFiles: '**/*.trx' - mergeTestResults: true - testRunTitle: ${{ parameters.os }} - condition: succeededOrFailed() - - - powershell: ./make.ps1 package - displayName: Package - condition: succeededOrFailed() - - - task: CopyFiles@2 - displayName: Copy NuGet and Zip Packages - inputs: - SourceFolder: '$(Build.Repository.LocalPath)/Package/Release/Packages' - Contents: | - **/*.nupkg - **/*.snupkg - **/*.zip - TargetFolder: '$(Build.ArtifactStagingDirectory)' - condition: and(succeededOrFailed(), eq(variables['system.pullrequest.isfork'], false)) - - - ${{ if eq(parameters.os, 'Windows') }}: - - task: CopyFiles@2 - displayName: Copy MSI Installer - inputs: - SourceFolder: '$(Build.Repository.LocalPath)/Package/Release/Packages' - Contents: '**/*.msi' - TargetFolder: '$(Build.ArtifactStagingDirectory)' - condition: and(succeededOrFailed(), eq(variables['system.pullrequest.isfork'], false)) - - - ${{ if eq(parameters.os, 'Linux') }}: - - task: CopyFiles@2 - displayName: Copy Deb Installer - inputs: - SourceFolder: '$(Build.Repository.LocalPath)/Package/Release/Packages' - Contents: '**/*.deb' - TargetFolder: '$(Build.ArtifactStagingDirectory)' - condition: and(succeededOrFailed(), eq(variables['system.pullrequest.isfork'], false)) - - - ${{ if eq(parameters.os, 'macOS') }}: - - task: CopyFiles@2 - displayName: Copy Pkg Installer - inputs: - SourceFolder: '$(Build.Repository.LocalPath)/Package/Release/Packages' - Contents: '**/*.pkg' - TargetFolder: '$(Build.ArtifactStagingDirectory)' - condition: and(succeededOrFailed(), eq(variables['system.pullrequest.isfork'], false)) - - - task: CopyFiles@2 - displayName: Copy Build Logs - inputs: - Contents: '*.binlog' - TargetFolder: '$(Build.ArtifactStagingDirectory)' - condition: and(succeededOrFailed(), eq(variables['system.pullrequest.isfork'], false)) - - - task: PublishBuildArtifacts@1 - displayName: Publish Artifacts - inputs: - ArtifactName: ${{ format('{0} Artifacts', parameters.os) }} - condition: and(succeededOrFailed(), eq(variables['system.pullrequest.isfork'], false))