razor-tooling/azure-pipelines.yml

484 строки
19 KiB
YAML
Исходник Обычный вид История

2019-05-29 23:06:38 +03:00
#
# See https://docs.microsoft.com/azure/devops/pipelines/yaml-schema for reference.
#
variables:
- name: Build.Repository.Clean
value: true
- name: _TeamName
value: AspNetCore
- name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE
value: true
- name: Codeql.Enabled
value: true
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
2022-11-09 20:07:52 +03:00
- group: DotNetBuilds storage account read tokens
- name: _InternalRuntimeDownloadArgs
2022-11-09 20:07:52 +03:00
value: /p:DotNetRuntimeSourceFeed=https://dotnetbuilds.blob.core.windows.net/internal
/p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64)
- group: DotNet-DevDiv-Insertion-Workflow-Variables
- name: _DevDivDropAccessToken
value: $(dn-bot-devdiv-drop-rw-code-rw)
- group: DotNet-Roslyn-Insertion-Variables
- name: Razor.GitHubEmail
value: dotnet-build-bot@microsoft.com
- name: Razor.GitHubToken
value: $(AccessToken-dotnet-build-bot-public-repo)
- name: Razor.GitHubUserName
value: dotnet-build-bot
- name: Insertion.CreateDraftPR
value: true
- name: Insertion.TitlePrefix
value: '[Auto Insertion]'
- name: Insertion.TitleSuffix
value: ''
- ${{ if eq(variables['System.TeamProject'], 'public') }}:
- name: _InternalRuntimeDownloadArgs
value: ''
trigger:
2019-05-29 23:06:38 +03:00
batch: true
branches:
include:
- main
- main-vs-deps
2019-05-29 23:06:38 +03:00
- release/*
2019-11-25 22:03:52 +03:00
- internal/release/3.*
pr:
2019-05-29 23:06:38 +03:00
autoCancel: true
branches:
include:
- '*'
stages:
- stage: build
displayName: Build
jobs:
- ${{ if and(and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')), eq(variables['Build.SourceBranch'], 'refs/heads/main')) }}:
- template: /eng/common/templates/job/onelocbuild.yml
parameters:
LclSource: lclFilesfromPackage
LclPackageId: 'LCL-JUNO-PROD-RAZORTOOL'
2022-11-09 05:16:47 +03:00
MirrorRepo: razor
- template: /eng/common/templates/jobs/jobs.yml
parameters:
enablePublishBuildArtifacts: false
enablePublishTestResults: false
enablePublishUsingPipelines: false
jobs:
# Code check
- ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
- job: Code_check
displayName: Code check
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
2022-09-01 06:39:52 +03:00
name: NetCore-Public
2022-09-28 00:51:24 +03:00
demands: ImageOverride -equals windows.vs2022preview.amd64.open
${{ if ne(variables['System.TeamProject'], 'public') }}:
name: NetCore1ESPool-Internal
2022-09-28 01:46:58 +03:00
demands: ImageOverride -equals windows.vs2022preview.amd64
steps:
- task: NodeTool@0
displayName: Install Node 10.x
inputs:
versionSpec: 10.x
- task: NuGetCommand@2
displayName: 'Clear NuGet caches'
condition: succeeded()
inputs:
command: custom
arguments: 'locals all -clear'
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- task: PowerShell@2
displayName: Setup Private Feeds Credentials
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
[master] Update dependencies from dotnet/arcade dotnet/runtime (#1873) * Update dependencies from https://github.com/dotnet/runtime build 20200507.11 - Microsoft.Extensions.Logging: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20257.11 - Microsoft.Extensions.Configuration.Json: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20257.11 - Microsoft.Extensions.DependencyModel: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20257.11 - Microsoft.NETCore.App.Runtime.win-x64: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20257.11 - Microsoft.NETCore.Platforms: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20257.11 - Microsoft.NETCore.App.Internal: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20257.11 - Microsoft.NETCore.App.Ref: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20257.11 - System.Diagnostics.DiagnosticSource: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20257.11 - System.Text.Encodings.Web: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20257.11 - System.Reflection.Metadata: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20257.11 * Update dependencies from https://github.com/dotnet/arcade build 20200506.5 - Microsoft.DotNet.Arcade.Sdk: 5.0.0-beta.20228.4 -> 5.0.0-beta.20256.5 * Update SDKs and TFMs * Try fixing SDK target * Try removing reference to xunit? * Try again? * Revert test tfm * Remove more xunit references * Update dependencies from https://github.com/dotnet/runtime build 20200508.3 - Microsoft.Extensions.Logging: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20258.3 - Microsoft.Extensions.Configuration.Json: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20258.3 - Microsoft.Extensions.DependencyModel: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20258.3 - Microsoft.NETCore.App.Runtime.win-x64: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20258.3 - Microsoft.NETCore.Platforms: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20258.3 - Microsoft.NETCore.App.Internal: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20258.3 - Microsoft.NETCore.App.Ref: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20258.3 - System.Diagnostics.DiagnosticSource: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20258.3 - System.Text.Encodings.Web: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20258.3 - System.Reflection.Metadata: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20258.3 * Use `dotnet msbuild` in CI builds * Update dependencies from https://github.com/dotnet/runtime build 20200509.5 - Microsoft.Extensions.Logging: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20259.5 - Microsoft.Extensions.Configuration.Json: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20259.5 - Microsoft.Extensions.DependencyModel: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20259.5 - Microsoft.NETCore.App.Runtime.win-x64: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20259.5 - Microsoft.NETCore.Platforms: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20259.5 - Microsoft.NETCore.App.Internal: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20259.5 - Microsoft.NETCore.App.Ref: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20259.5 - System.Diagnostics.DiagnosticSource: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20259.5 - System.Text.Encodings.Web: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20259.5 - System.Reflection.Metadata: 5.0.0-preview.5.20253.7 -> 5.0.0-preview.5.20259.5 * Try undoing `$(EnableFrameworkPathOverride) workaround * Fix windows builds * Fix NET.sdk.Razor.Test * Try fix codecheck * Skip tests failing with CS1701 Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com> Co-authored-by: John Luo <johluo@microsoft.com> Co-authored-by: Doug Bunting <6431421+dougbu@users.noreply.github.com>
2020-05-11 05:32:33 +03:00
- powershell: ./restore.cmd -msbuildEngine dotnet -ci $(_InternalRuntimeDownloadArgs); ./eng/scripts/CodeCheck.ps1 -ci
displayName: Run eng/scripts/CodeCheck.ps1
2019-05-29 23:06:38 +03:00
# Three jobs for each of the three OSes we want to run on
- template: /eng/common/templates/jobs/jobs.yml
parameters:
enablePublishBuildArtifacts: true
enablePublishTestResults: true
enableTelemetry: true
enableSourcebuild: true
2022-11-09 05:16:47 +03:00
helixRepo: dotnet/razor
helixType: build.product/
# enableMicrobuild can't be read from a user-defined variable (Azure DevOps limitation)
${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
enableMicrobuild: true
2022-11-09 20:07:52 +03:00
enablePublishUsingPipelines: true
jobs:
- job: Windows
timeoutInMinutes: 120
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
2022-09-01 06:39:52 +03:00
name: NetCore-Public
demands: ImageOverride -equals windows.vs2022preview.scout.amd64.open
${{ if ne(variables['System.TeamProject'], 'public') }}:
name: NetCore1ESPool-Internal
2022-09-28 00:51:24 +03:00
demands: ImageOverride -equals windows.vs2022preview.amd64
strategy:
matrix:
${{ if eq(variables['System.TeamProject'], 'public') }}:
debug:
_BuildConfig: Debug
_PublishArgs: ''
release:
_BuildConfig: Release
_PublishArgs: ''
${{ if ne(variables['System.TeamProject'], 'public') }}:
release:
_BuildConfig: Release
${{ if in(variables['Build.Reason'], 'PullRequest') }}:
_PublishArgs: ''
${{ if notin(variables['Build.Reason'], 'PullRequest') }}:
2022-11-09 20:07:52 +03:00
_PublishArgs: /p:DotNetPublishUsingPipelines=true
variables:
- _BuildArgs: ''
- XUNIT_LOGS: '$(Build.SourcesDirectory)\artifacts\log\$(_BuildConfig)'
- __VSNeverShowWhatsNew: 1
# Variables for internal Official builds
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- _SignType: real
- _BuildArgs: /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName)
/p:OfficialBuildId=$(Build.BuildNumber)
/p:ManifestBuildBranch=$(Build.SourceBranchName)
/p:ManifestBuildNumber=$(Build.BuildNumber)
/p:VisualStudioDropName=Products/$(System.TeamProject)/$(Build.Repository.Name)/$(Build.SourceBranchName)/$(Build.BuildNumber)
2022-06-30 23:29:32 +03:00
/p:GenerateSbom=true
steps:
- task: NodeTool@0
displayName: Install Node 10.x
inputs:
versionSpec: 10.x
- powershell: npm install -g yarn
displayName: Install yarn
condition: succeeded()
- task: NuGetCommand@2
displayName: 'Clear NuGet caches'
condition: succeeded()
inputs:
command: custom
arguments: 'locals all -clear'
2022-06-30 23:29:32 +03:00
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- template: /eng/restore-internal-tools.yml
- powershell: ./eng/scripts/InstallProcDump.ps1
displayName: Install ProcDump
- powershell: ./eng/scripts/StartDumpCollectionForHangingBuilds.ps1
$(ProcDumpPath)procdump.exe artifacts/log/$(_BuildConfig)
(Get-Date).AddMinutes(60)
devenv, xunit.console, xunit.console.x86
displayName: Start background dump collection
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- task: PowerShell@2
displayName: Setup Private Feeds Credentials
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
- script: eng\cibuild.cmd
2020-05-14 21:40:07 +03:00
-configuration $(_BuildConfig)
2022-04-29 20:35:43 +03:00
-msbuildEngine vs
2020-05-14 21:40:07 +03:00
-prepareMachine
-restore
-build
-pack
2022-11-23 08:38:25 +03:00
-publish
-sign
2020-05-14 21:40:07 +03:00
$(_BuildArgs)
$(_PublishArgs)
$(_InternalRuntimeDownloadArgs)
2022-11-23 08:38:25 +03:00
name: Build
displayName: Build and Deploy
condition: succeeded()
- task: PublishBuildArtifacts@1
2022-11-23 08:38:25 +03:00
displayName: Upload Build BinLog
condition: always()
continueOnError: true
inputs:
pathtoPublish: artifacts/log/$(_BuildConfig)/Build.binlog
2022-11-23 08:38:25 +03:00
artifactName: $(Agent.Os)_$(Agent.JobName) BuildBinLog
artifactType: Container
parallel: true
2022-10-27 23:50:00 +03:00
- powershell: eng\SetupVSHive.ps1
displayName: Setup VS Hive
- script: eng\CIBuild.cmd
-configuration $(_BuildConfig)
-prepareMachine
-test
-integrationTest
/p:BuildProjectReferences=false
name: Run_Tests
displayName: Run Unit and Integration tests
condition: succeeded()
- task: PublishBuildArtifacts@1
displayName: Upload Run tests BinLog
condition: always()
continueOnError: true
inputs:
pathtoPublish: artifacts/log/$(_BuildConfig)/Build.binlog
artifactName: $(Agent.Os)_$(Agent.JobName) RunTestsBinLog
artifactType: Container
parallel: true
- powershell: ./eng/scripts/FinishDumpCollectionForHangingBuilds.ps1 artifacts/log/$(_BuildConfig)
displayName: Finish background dump collection
continueOnError: true
condition: always()
- powershell: |
$version = $(node -p "require('./package.json').version" | Out-String).Trim()
yarn install
md $(Build.SourcesDirectory)/artifacts/packages/VSCode/$(_BuildConfig)/ -ea 0
npx vsce@1.103.1 package -o $(Build.SourcesDirectory)/artifacts/packages/VSCode/$(_BuildConfig)/blazorwasm-companion-$version.vsix
displayName: Produce Blazor WASM Debugging Extension VSIX
workingDirectory: $(Build.SourcesDirectory)/src/Razor/src/Microsoft.AspNetCore.Razor.VSCode.BlazorWasmDebuggingExtension
failOnStderr: true
condition: and(succeeded(), eq(variables['_BuildConfig'], 'Release'))
- task: PublishBuildArtifacts@1
displayName: Upload Test Results
condition: always()
continueOnError: true
inputs:
pathtoPublish: artifacts/TestResults/$(_BuildConfig)/
artifactName: $(Agent.Os)_$(Agent.JobName) TestResults
artifactType: Container
parallel: true
2020-03-24 20:58:49 +03:00
# - task: PublishTestResults@2
# displayName: Publish VSCode Test Results
# inputs:
# testResultsFormat: 'JUnit'
# testResultsFiles: '*.xml'
# searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)'
# continueOnError: true
# condition: always()
# Publish an artifact that the RoslynInsertionTool is able to find by its name.
- task: PublishBuildArtifacts@1
displayName: Publish Artifact VSSetup
inputs:
PathtoPublish: 'artifacts\VSSetup\$(_BuildConfig)'
ArtifactName: 'VSSetup'
continueOnError: true
condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release'))
- task: PublishBuildArtifacts@1
displayName: Publish VS for Mac Artifacts
inputs:
PathtoPublish: 'artifacts\MPack\$(_BuildConfig)'
ArtifactName: MPack_$(Agent.Os)_$(_BuildConfig)
continueOnError: true
condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release'))
- task: PublishBuildArtifacts@1
displayName: Publish package artifacts
inputs:
PathtoPublish: 'artifacts\packages\$(_BuildConfig)'
ArtifactName: Packages_$(Agent.Os)_$(_BuildConfig)
continueOnError: true
condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release'))
- task: PublishBuildArtifacts@1
displayName: Publish VS Code extension artifacts
inputs:
PathtoPublish: 'artifacts\packages\VSCode\$(_BuildConfig)'
ArtifactName: BlazorWasmDebuggingExtension
continueOnError: true
condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release'))
- powershell: Write-Host "##vso[task.setvariable variable=VisualStudio.DropName]Products/$(System.TeamProject)/$(Build.Repository.Name)/$(Build.SourceBranchName)/$(Build.BuildNumber)"
displayName: Setting VisualStudio.DropName variable
# Publishes setup VSIXes to a drop.
# Note: The insertion tool looks for the display name of this task in the logs.
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- task: ms-vseng.MicroBuildTasks.4305a8de-ba66-4d8b-b2d1-0dc4ecbbf5e8.MicroBuildUploadVstsDropFolder@1
displayName: Upload VSTS Drop
inputs:
DropName: $(VisualStudio.DropName)
DropFolder: 'artifacts\VSSetup\$(_BuildConfig)\Insertion'
AccessToken: $(_DevDivDropAccessToken)
continueOnError: true
condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release'))
2022-11-09 20:07:52 +03:00
- ${{ if eq(variables['System.TeamProject'], 'public') }}:
- job: macOS
pool:
vmImage: macOS-11
strategy:
matrix:
debug:
_BuildConfig: Debug
release:
_BuildConfig: Release
steps:
- task: NodeTool@0
displayName: Install Node 10.x
inputs:
2022-11-09 20:07:52 +03:00
versionSpec: 10.x
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- task: Bash@3
displayName: Setup Private Feeds Credentials
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh
arguments: $(Build.SourcesDirectory)/NuGet.config $Token
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
- script: eng/common/cibuild.sh
--configuration $(_BuildConfig)
--prepareMachine
$(_InternalRuntimeDownloadArgs)
name: Build
displayName: Build
condition: succeeded()
- task: PublishBuildArtifacts@1
displayName: Upload TestResults
condition: always()
continueOnError: true
inputs:
pathtoPublish: artifacts/TestResults/$(_BuildConfig)/
artifactName: $(Agent.Os)_$(Agent.JobName) TestResults
artifactType: Container
parallel: true
2022-11-09 20:07:52 +03:00
- job: Linux
container:
image: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-7
options: --init # This ensures all the stray defunct processes are reaped.
pool:
${{ if eq(variables['System.TeamProject'], 'public') }}:
vmImage: ubuntu-latest
${{ if eq(variables['System.TeamProject'], 'internal') }}:
name: NetCore1ESPool-Internal
demands: ImageOverride -equals Build.Ubuntu.1804.Amd64
variables:
- LC_ALL: 'en_US.UTF-8'
- LANG: 'en_US.UTF-8'
- LANGUAGE: 'en_US.UTF-8'
strategy:
matrix:
debug:
_BuildConfig: Debug
release:
_BuildConfig: Release
steps:
- task: NodeTool@0
displayName: Install Node 10.x
inputs:
2022-11-09 20:07:52 +03:00
versionSpec: 10.x
- ${{ if ne(variables['System.TeamProject'], 'public') }}:
- task: Bash@3
displayName: Setup Private Feeds Credentials
inputs:
filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh
arguments: $(Build.SourcesDirectory)/NuGet.config $Token
env:
Token: $(dn-bot-dnceng-artifact-feeds-rw)
- script: eng/common/cibuild.sh
--configuration $(_BuildConfig)
--prepareMachine
$(_InternalRuntimeDownloadArgs)
name: Build
displayName: Build
condition: succeeded()
- task: PublishBuildArtifacts@1
displayName: Upload Test Results
condition: always()
continueOnError: true
inputs:
pathtoPublish: artifacts/TestResults/$(_BuildConfig)/
artifactName: $(Agent.Os)_$(Agent.JobName) TestResults
artifactType: Container
parallel: true
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- stage: publishBuildAssets
displayName: Publish to Build Asset Registry
dependsOn: build
jobs:
# Publish to Build Asset Registry
- template: /eng/common/templates/job/publish-build-assets.yml
parameters:
publishUsingPipelines: true
pool:
name: NetCore1ESPool-Svc-Internal
demands: ImageOverride -equals windows.vs2022.amd64
- template: eng\common\templates\post-build\post-build.yml
parameters:
validateDependsOn:
- publishBuildAssets
publishingInfraVersion: 3
enableSigningValidation: false
enableNugetValidation: false
2022-06-17 23:19:28 +03:00
SDLValidationParameters:
enable: true
params: >-
-SourceToolsList @("policheck","credscan")
-TsaInstanceURL $(_TsaInstanceURL)
-TsaProjectName $(_TsaProjectName)
-TsaNotificationEmail $(_TsaNotificationEmail)
-TsaCodebaseAdmin $(_TsaCodebaseAdmin)
-TsaBugAreaPath $(_TsaBugAreaPath)
-TsaIterationPath $(_TsaIterationPath)
-TsaRepositoryName "Razor-Tooling"
-TsaCodebaseName "Razor-Tooling"
-TsaPublish $True
- stage: insert
dependsOn: publish_using_darc
displayName: Insert to VS
jobs:
- job: insert
displayName: Insert to VS
pool:
name: NetCore1ESPool-Svc-Internal
demands: ImageOverride -equals windows.vs2022.amd64
steps:
- download: current
artifact: VSSetup
- powershell: |
$branchName = "$(Build.SourceBranch)".Substring("refs/heads/".Length)
Write-Host "##vso[task.setvariable variable=ComponentBranchName]$branchName"
displayName: Get Branch Name
- template: eng/pipelines/insert.yml
parameters:
buildUserName: "dn-bot@microsoft.com"
buildPassword: $(dn-bot-devdiv-build-e-code-full-release-e-packaging-r)
componentUserName: "dn-bot@microsoft.com"
componentPassword: $(dn-bot-dnceng-build-e-code-full-release-e-packaging-r)
componentBuildProjectName: internal
sourceBranch: "$(ComponentBranchName)"
2022-12-07 03:44:26 +03:00
publishDataURI: "https://dev.azure.com/dnceng/internal/_apis/git/repositories/dotnet-razor/items?path=/eng/config/PublishData.json&api-version=6.0"
publishDataAccessToken: "$(System.AccessToken)"
dropPath: '$(Pipeline.Workspace)\VSSetup'