diff --git a/.vsts-dotnet-ci.yml b/.vsts-dotnet-ci.yml index 7c57db485d..66e5832a32 100644 --- a/.vsts-dotnet-ci.yml +++ b/.vsts-dotnet-ci.yml @@ -1,6 +1,6 @@ -################################################################################ +############################################################################### # ML.NET's PR validation build -################################################################################ +############################################################################### resources: containers: @@ -8,64 +8,73 @@ resources: image: microsoft/dotnet-buildtools-prereqs:centos-7-b46d863-20180719033416 phases: -- template: /build/ci/phase-template.yml - parameters: - name: core30 - buildScript: build.cmd - customMatrixes: - Build_Debug_Intrinsics: - _configuration: Debug-Intrinsics - _config_short: DI - _includeBenchmarkData: false - Build_Release_Intrinsics: - _configuration: Release-Intrinsics - _config_short: RI - _includeBenchmarkData: true - queue: - name: Hosted VS2017 +- ${{ if ne(variables['codeCoverageBuild'], 'true') }}: + - template: /build/ci/phase-template.yml + parameters: + name: core30 + buildScript: build.cmd + customMatrixes: + Build_Debug_Intrinsics: + _configuration: Debug-Intrinsics + _config_short: DI + _includeBenchmarkData: false + Build_Release_Intrinsics: + _configuration: Release-Intrinsics + _config_short: RI + _includeBenchmarkData: true + queue: + name: Hosted VS2017 -- template: /build/ci/phase-template.yml - parameters: - name: Linux - buildScript: ./build.sh - queue: - name: Hosted Ubuntu 1604 - container: LinuxContainer + - template: /build/ci/phase-template.yml + parameters: + name: Linux + buildScript: ./build.sh + queue: + name: Hosted Ubuntu 1604 + container: LinuxContainer -- template: /build/ci/phase-template.yml - parameters: - name: MacOS - buildScript: ./build.sh - queue: - name: Hosted macOS + - template: /build/ci/phase-template.yml + parameters: + name: MacOS + buildScript: ./build.sh + queue: + name: Hosted macOS -- template: /build/ci/phase-template.yml - parameters: - name: Windows_NetFx - buildScript: build.cmd - customMatrixes: - Build_Debug_netfx: - _configuration: Debug-netfx - _config_short: DFX - _includeBenchmarkData: false - Build_Release_netfx: - _configuration: Release-netfx - _config_short: RFX - _includeBenchmarkData: false - queue: - name: Hosted VS2017 + - template: /build/ci/phase-template.yml + parameters: + name: Windows_NetFx + buildScript: build.cmd + customMatrixes: + Build_Debug_netfx: + _configuration: Debug-netfx + _config_short: DFX + _includeBenchmarkData: false + Build_Release_netfx: + _configuration: Release-netfx + _config_short: RFX + _includeBenchmarkData: false + queue: + name: Hosted VS2017 -- template: /build/ci/phase-template.yml - parameters: - name: Windows_x64 - buildScript: build.cmd - queue: - name: Hosted VS2017 + - template: /build/ci/phase-template.yml + parameters: + name: Windows_x64 + buildScript: build.cmd + queue: + name: Hosted VS2017 -- template: /build/ci/phase-template.yml - parameters: - name: Windows_x86 - architecture: x86 - buildScript: build.cmd - queue: - name: Hosted VS2017 \ No newline at end of file + - template: /build/ci/phase-template.yml + parameters: + name: Windows_x86 + architecture: x86 + buildScript: build.cmd + queue: + name: Hosted VS2017 + +- ${{ if eq(variables['codeCoverageBuild'], 'true') }}: + - template: /build/ci/phase-template.yml + parameters: + name: Windows_x64 + buildScript: build.cmd + queue: + name: Hosted VS2017 \ No newline at end of file diff --git a/build/ci/phase-template.yml b/build/ci/phase-template.yml index c7a9303c60..088a03ad90 100644 --- a/build/ci/phase-template.yml +++ b/build/ci/phase-template.yml @@ -6,69 +6,132 @@ parameters: customMatrixes: '' phases: - - phase: ${{ parameters.name }} - variables: - _buildScript: ${{ parameters.buildScript }} - _phaseName: ${{ parameters.name }} - _arch: ${{ parameters.architecture }} - queue: - timeoutInMinutes: 45 - parallel: 99 - matrix: - ${{ if eq(parameters.customMatrixes, '') }}: - Build_Debug: - _configuration: Debug - _config_short: D - _includeBenchmarkData: false - Build_Release: - _configuration: Release - _config_short: R - _includeBenchmarkData: true - ${{ if ne(parameters.customMatrixes, '') }}: - ${{ insert }}: ${{ parameters.customMatrixes }} - ${{ insert }}: ${{ parameters.queue }} - steps: - - script: $(_buildScript) -$(_configuration) -buildArch=$(_arch) - displayName: Build - - script: $(_buildScript) -- /t:DownloadExternalTestFiles /p:IncludeBenchmarkData=$(_includeBenchmarkData) - displayName: Download Benchmark Data - - ${{ if eq(parameters.name, 'MacOS') }}: - - script: brew update && brew install libomp mono-libgdiplus gettext && brew link gettext --force - displayName: Install runtime dependencies - - script: $(_buildScript) -$(_configuration) -runtests - displayName: Run Tests - - task: PublishTestResults@2 - displayName: Publish Test Results - condition: succeededOrFailed() - inputs: - testRunner: 'vSTest' - searchFolder: '$(System.DefaultWorkingDirectory)/bin' - testResultsFiles: '**/*.trx' - testRunTitle: Machinelearning_Tests_$(_phaseName)_$(_configuration)_$(Build.BuildNumber) - configuration: $(_configuration) - mergeTestResults: true - - task: CopyFiles@2 - displayName: Stage build logs - condition: not(succeeded()) - inputs: - sourceFolder: $(Build.SourcesDirectory) - contents: '?(msbuild.*|binclash.log|init-tools.log)' - targetFolder: $(Build.ArtifactStagingDirectory) - - task: CopyFiles@2 - displayName: Stage test output - condition: not(succeeded()) - inputs: - sourceFolder: $(Build.SourcesDirectory)/bin - contents: | - **/TestOutput/**/* - **/*.trx - targetFolder: $(Build.ArtifactStagingDirectory) - - task: PublishBuildArtifacts@1 - displayName: Publish build and test logs - condition: not(succeeded()) - inputs: - pathToPublish: $(Build.ArtifactStagingDirectory) - artifactName: ${{ parameters.name }} $(_config_short) - artifactType: container - - script: $(_buildScript) -buildPackages - displayName: Build Packages + - ${{ if ne(variables['codeCoverageBuild'], 'true') }}: + - phase: ${{ parameters.name }} + variables: + _buildScript: ${{ parameters.buildScript }} + _phaseName: ${{ parameters.name }} + _arch: ${{ parameters.architecture }} + queue: + timeoutInMinutes: 45 + parallel: 99 + matrix: + ${{ if eq(parameters.customMatrixes, '') }}: + Build_Debug: + _configuration: Debug + _config_short: D + _includeBenchmarkData: false + Build_Release: + _configuration: Release + _config_short: R + _includeBenchmarkData: true + ${{ if ne(parameters.customMatrixes, '') }}: + ${{ insert }}: ${{ parameters.customMatrixes }} + ${{ insert }}: ${{ parameters.queue }} + steps: + - script: $(_buildScript) -$(_configuration) -buildArch=$(_arch) + displayName: Build + - script: $(_buildScript) -- /t:DownloadExternalTestFiles /p:IncludeBenchmarkData=$(_includeBenchmarkData) + displayName: Download Benchmark Data + - ${{ if eq(parameters.name, 'MacOS') }}: + - script: brew update && brew install libomp mono-libgdiplus gettext && brew link gettext --force + displayName: Install runtime dependencies + - script: $(_buildScript) -$(_configuration) -runtests + displayName: Run Tests + - task: PublishTestResults@2 + displayName: Publish Test Results + condition: succeededOrFailed() + inputs: + testRunner: 'vSTest' + searchFolder: '$(System.DefaultWorkingDirectory)/bin' + testResultsFiles: '**/*.trx' + testRunTitle: Machinelearning_Tests_$(_phaseName)_$(_configuration)_$(Build.BuildNumber) + configuration: $(_configuration) + mergeTestResults: true + - task: CopyFiles@2 + displayName: Stage build logs + condition: not(succeeded()) + inputs: + sourceFolder: $(Build.SourcesDirectory) + contents: '?(msbuild.*|binclash.log|init-tools.log)' + targetFolder: $(Build.ArtifactStagingDirectory) + - task: CopyFiles@2 + displayName: Stage test output + condition: not(succeeded()) + inputs: + sourceFolder: $(Build.SourcesDirectory)/bin + contents: | + **/TestOutput/**/* + **/*.trx + targetFolder: $(Build.ArtifactStagingDirectory) + - task: PublishBuildArtifacts@1 + displayName: Publish build and test logs + condition: not(succeeded()) + inputs: + pathToPublish: $(Build.ArtifactStagingDirectory) + artifactName: ${{ parameters.name }} $(_config_short) + artifactType: container + - script: $(_buildScript) -buildPackages + displayName: Build Packages + + - ${{ if eq(variables['codeCoverageBuild'], 'true') }}: + - phase: ${{ parameters.name }} + variables: + _buildScript: ${{ parameters.buildScript }} + _phaseName: ${{ parameters.name }} + _arch: ${{ parameters.architecture }} + queue: + timeoutInMinutes: 90 + parallel: 99 + matrix: + ${{ if eq(parameters.customMatrixes, '') }}: + Build_Debug: + _configuration: Debug + _config_short: D + _includeBenchmarkData: false + ${{ if ne(parameters.customMatrixes, '') }}: + ${{ insert }}: ${{ parameters.customMatrixes }} + ${{ insert }}: ${{ parameters.queue }} + steps: + - script: $(_buildScript) -$(_configuration) -buildArch=$(_arch) -codeCoverage + displayName: Build + - script: $(_buildScript) -- /t:DownloadExternalTestFiles /p:IncludeBenchmarkData=$(_includeBenchmarkData) + displayName: Download Benchmark Data + - ${{ if eq(parameters.name, 'MacOS') }}: + - script: brew update && brew install libomp mono-libgdiplus gettext && brew link gettext --force + displayName: Install runtime dependencies + - script: $(_buildScript) -$(_configuration) -runtests + displayName: Run Tests + - task: PublishTestResults@2 + displayName: Publish Test Results + condition: succeededOrFailed() + inputs: + testRunner: 'vSTest' + searchFolder: '$(System.DefaultWorkingDirectory)/bin' + testResultsFiles: '**/*.trx' + testRunTitle: Machinelearning_Tests_$(_phaseName)_$(_configuration)_$(Build.BuildNumber) + configuration: $(_configuration) + mergeTestResults: true + - task: CopyFiles@2 + displayName: Stage build logs + condition: not(succeeded()) + inputs: + sourceFolder: $(Build.SourcesDirectory) + contents: '?(msbuild.*|binclash.log|init-tools.log)' + targetFolder: $(Build.ArtifactStagingDirectory) + - task: CopyFiles@2 + displayName: Stage test output + condition: not(succeeded()) + inputs: + sourceFolder: $(Build.SourcesDirectory)/bin + contents: | + **/TestOutput/**/* + **/*.trx + targetFolder: $(Build.ArtifactStagingDirectory) + - task: PublishBuildArtifacts@1 + displayName: Publish build and test logs + condition: not(succeeded()) + inputs: + pathToPublish: $(Build.ArtifactStagingDirectory) + artifactName: ${{ parameters.name }} $(_config_short) + artifactType: container \ No newline at end of file diff --git a/config.json b/config.json index c870004f32..05e404bd90 100644 --- a/config.json +++ b/config.json @@ -154,6 +154,12 @@ "RunTests": "default" } }, + "codeCoverage": { + "description": "Enables code coverage.", + "settings": { + "CodeCoverage": "true" + } + }, "verbose": { "description": "Passes /flp:v=diag to the msbuild command or the value passed by the user.", "settings": {