cibuild.cmd (160 lines of code) (raw):

@if not defined _echo echo off setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS SET _originalScript=%~f0 :parseArguments if "%1"=="" goto doneParsingArguments if /i "%1"=="--scope" set SCOPE=%2&& shift && shift && goto parseArguments if /i "%1"=="--target" set TARGET=%2&& shift && shift && goto parseArguments if /i "%1"=="--host" set HOST=%2&& shift && shift && goto parseArguments if /i "%1"=="--build-only" set BUILD_ONLY=true&& shift && goto parseArguments if /i "%1"=="--bootstrap-only" set BOOTSTRAP_ONLY=true&& shift && goto parseArguments if /i "%1"=="--localized-build" set LOCALIZED_BUILD=true&& shift && goto parseArguments if /i "%1"=="--sync-xlf" set SYNC_XLF=true&& shift && goto parseArguments :: Unknown parameters goto :usage :doneParsingArguments :: Default target set TARGET_ARG=RebuildAndTest if /i "%SCOPE%"=="Compile" set TARGET_ARG=Build if /i "%SCOPE%"=="Build" set TARGET_ARG=Build :: Assign target configuration :: Default to full-framework build if not defined TARGET ( set TARGET=Full ) set BUILD_CONFIGURATION= if /i "%TARGET%"=="CoreCLR" ( set BUILD_CONFIGURATION=Debug-NetCore ) else if /i "%TARGET%"=="Full" ( set BUILD_CONFIGURATION=Debug ) else if /i "%TARGET%"=="All" ( SET _originalArguments=%* CALL "!_originalScript!" !_originalArguments:All=Full! IF ERRORLEVEL 1 GOTO :error CALL "!_originalScript!" !_originalArguments:All=CoreCLR! IF ERRORLEVEL 1 GOTO :error EXIT /B 0 ) else ( echo Unsupported target detected: %TARGET%. Configuring as if for Full. set TARGET=Full set BUILD_CONFIGURATION=Debug ) :: Assign runtime host :: By default match host to target if not defined HOST ( if /i "%TARGET%"=="CoreCLR" ( set HOST=CoreCLR ) else ( set HOST=Full ) ) set RUNTIME_HOST= if /i "%HOST%"=="CoreCLR" ( set RUNTIME_HOST=%~dp0Tools\DotNetCLI\Dotnet.exe set MSBUILD_CUSTOM_PATH=%~dp0Tools\MSBuild.exe ) else if /i "%HOST%"=="Full" ( set RUNTIME_HOST= ) else ( echo Unsupported host detected: %HOST%. Aborting. goto :error ) set LOCALIZED_BUILD_ARGUMENT= if "%LOCALIZED_BUILD%"=="true" ( set LOCALIZED_BUILD_ARGUMENT="/p:LocalizedBuild=true" ) set SYNC_XLF_ARGUMENT= if "%SYNC_XLF%"=="true" ( set SYNC_XLF_ARGUMENT="/p:SyncXlf=true" ) :: Restore build tools call %~dp0init-tools.cmd echo. echo ** Rebuilding MSBuild with downloaded binaries set MSBUILDLOGPATH=%~dp0msbuild_bootstrap_build-%HOST%.log call "%~dp0build.cmd" /t:Rebuild /p:Configuration=%BUILD_CONFIGURATION% /p:"SkipBuildPackages=true" %LOCALIZED_BUILD_ARGUMENT% %SYNC_XLF_ARGUMENT% %RUNTIMETYPE_ARGUMENT% if %ERRORLEVEL% NEQ 0 ( echo. echo Bootstrap build failed with errorlevel %ERRORLEVEL% 1>&2 goto :error ) if "%BUILD_ONLY%"=="true" goto :success :: Move initial build to bootstrap directory echo. echo ** Moving bootstrapped MSBuild to the bootstrap folder :: Kill Roslyn, which may have handles open to files we want taskkill /F /IM vbcscompiler.exe set MSBUILDLOGPATH=%~dp0msbuild_move_bootstrap-%HOST%.log set MSBUILD_ARGS=/verbosity:minimal targets\BootStrapMSbuild.proj /p:Configuration=%BUILD_CONFIGURATION% %RUNTIMETYPE_ARGUMENT% call "%~dp0build.cmd" if %ERRORLEVEL% NEQ 0 ( echo. echo Failed to create bootstrap folder with errorlevel %ERRORLEVEL% 1>&2 goto :error ) if "%BOOTSTRAP_ONLY%"=="true" goto :success set MSBUILD_ARGS= :: Rebuild with bootstrapped msbuild set MSBUILDLOGPATH=%~dp0msbuild_local_build-%HOST%.log :: Only CoreCLR requires an override--it should use the host :: downloaded as part of its NuGet package references, rather :: than the possibly-stale one from Tools. if /i "%TARGET%"=="CoreCLR" ( set RUNTIME_HOST=%~dp0Tools\DotNetCLI\Dotnet.exe ) if /i "%TARGET%"=="CoreCLR" ( set MSBUILD_CUSTOM_PATH="%~dp0bin\Bootstrap-NetCore\MSBuild.dll" ) else ( set MSBUILD_CUSTOM_PATH="%~dp0bin\Bootstrap\15.0\Bin\MSBuild.exe" ) :: The set of warnings to suppress for now :: warning MSB3277: Found conflicts between different versions of the same dependent assembly that could not be resolved. :: warning MSB3026: Could not copy "XXX" to "XXX". Beginning retry 1 in 1000ms. :: warning MSB3073: Exec task failure (when set to be a warning) -- needed to keep from failing on dev desktops that don't have C++ tools :: warning AL1053: The version '1.2.3.4-foo' specified for the 'product version' is not in the normal 'major.minor.build.revision' format SET _NOWARN=MSB3277;MSB3026;MSB3073;AL1053 set MSBUILDBINLOGPATH=%~dp0msbuild_rebuild-%HOST%.binlog echo. echo ** Rebuilding MSBuild with locally built binaries call "%~dp0build.cmd" /t:%TARGET_ARG% /p:Configuration=%BUILD_CONFIGURATION% %LOCALIZED_BUILD_ARGUMENT% "/nowarn:%_NOWARN%" /warnaserror /bl:%MSBUILDBINLOGPATH% if %ERRORLEVEL% NEQ 0 ( echo. echo Local build failed with error level %ERRORLEVEL% 1>&2 goto :error ) :: Only detect source control changes when running in the CI environment :: Detect if there are any changed files which should fail the build if DEFINED JENKINS_URL ( echo Detecting changed files... git status git --no-pager diff HEAD --word-diff=plain --exit-code if ERRORLEVEL 1 ( echo. echo [ERROR] After building, there are changed files. Please build locally ^(cibuild.cmd --target All^) and include these changes in your pull request. 1>&2 goto :error ) goto :EOF ) :success echo. echo ++++++++++++++++ echo + SUCCESS :-) + echo ++++++++++++++++ echo. exit /b 0 :usage echo Options echo --scope ^<scope^> Scope of the build ^(Compile / Test^) echo --target ^<target^> CoreCLR, Full, or All ^(default: Full^) echo --host ^<host^> CoreCLR or Full ^(default: Full^) echo --build-only Only build using a downloaded copy of MSBuild but do not bootstrap echo or build again with those binaries echo --bootstrap-only Build and bootstrap MSBuild but do not build again with those binaries echo --localized-build Do a localized build echo --sync-xlf Synchronize xlf files from resx files exit /b 1 :error echo. echo --------------------------------------- echo - cibuild.cmd FAILED. - echo --------------------------------------- exit /b 1