274 lines
8.0 KiB
Batchfile
274 lines
8.0 KiB
Batchfile
@ECHO OFF
|
|
|
|
:: UMBRACO CORE BUILD FILE
|
|
::
|
|
:: usage:
|
|
:: build [-release:release] [-comment:comment] [-build:number] [-integration]
|
|
:: [-nugetpkg] [-nugetfolder:folder] [-tests]
|
|
:: release: the release version eg -release:1.2.0
|
|
:: comment: the release comment eg -comment:alpha002
|
|
:: build: the build number (for continuous integration) eg -build:6689
|
|
:: nugetfolder: the folder where to restore packages eg -nugetpkg:"path\to\packages"
|
|
:: integration: don't pause on errors eg -integration
|
|
:: nugetpkg: create nuget package eg -nugetpkg
|
|
:: tests: build the tests eg -tests
|
|
::
|
|
:: the script tries to read from UmbracoVersion.txt
|
|
:: but release and comment can be overriden by args
|
|
:: and in any case, the script updates UmbracoVersion.txt
|
|
::
|
|
|
|
SET RELEASE=
|
|
SET COMMENT=
|
|
SET BUILD=
|
|
|
|
:: Try to get the version and comment from UmbracoVersion.txt lines 2 and 3
|
|
IF EXIST UmbracoVersion.txt (
|
|
FOR /F "skip=1 delims=" %%i IN (UmbracoVersion.txt) DO IF NOT DEFINED RELEASE SET RELEASE=%%i
|
|
FOR /F "skip=2 delims=" %%i IN (UmbracoVersion.txt) DO IF NOT DEFINED COMMENT SET COMMENT=%%i
|
|
)
|
|
|
|
:: process args
|
|
|
|
SET INTEGRATION=0
|
|
SET nuGetFolder=%CD%\..\src\packages
|
|
SET NUPKG=0
|
|
SET BUILD=
|
|
SET TESTS=
|
|
|
|
:processArgs
|
|
|
|
:: grab the first parameter as a whole eg "/action:start"
|
|
:: end if no more parameter
|
|
SET SWITCHPARSE=%1
|
|
IF [%SWITCHPARSE%] == [] goto endProcessArgs
|
|
|
|
:: get switch and value
|
|
SET SWITCH=
|
|
SET VALUE=
|
|
FOR /F "tokens=1,* delims=: " %%a IN ("%SWITCHPARSE%") DO SET SWITCH=%%a& SET VALUE=%%b
|
|
|
|
:: route arg
|
|
IF '%SWITCH%'=='/release' GOTO argRelease
|
|
IF '%SWITCH%'=='-release' GOTO argRelease
|
|
IF '%SWITCH%'=='/comment' GOTO argComment
|
|
IF '%SWITCH%'=='-comment' GOTO argComment
|
|
IF '%SWITCH%'=='/build' GOTO argBuild
|
|
IF '%SWITCH%'=='-build' GOTO argBuild
|
|
IF '%SWITCH%'=='/integration' GOTO argIntegration
|
|
IF '%SWITCH%'=='-integration' GOTO argIntegration
|
|
IF '%SWITCH%'=='/nugetfolder' GOTO argNugetFolder
|
|
IF '%SWITCH%'=='-nugetfolder' GOTO argNugetFolder
|
|
IF '%SWITCH%'=='/nugetpkg' GOTO argNugetPkg
|
|
IF '%SWITCH%'=='-nugetpkg' GOTO argNugetPkg
|
|
IF '%SWITCH%'=='/tests' GOTO argTests
|
|
IF '%SWITCH%'=='-tests' GOTO argTests
|
|
ECHO "Invalid switch %SWITCH%"
|
|
GOTO error
|
|
|
|
:: handle each arg
|
|
|
|
:argRelease
|
|
set RELEASE=%VALUE%
|
|
SHIFT
|
|
goto processArgs
|
|
|
|
:argComment
|
|
SET COMMENT=%VALUE%
|
|
SHIFT
|
|
GOTO processArgs
|
|
|
|
:argBuild
|
|
SET BUILD=%VALUE%
|
|
SHIFT
|
|
GOTO processArgs
|
|
|
|
:argIntegration
|
|
SET INTEGRATION=1
|
|
SHIFT
|
|
GOTO processArgs
|
|
|
|
:argNugetFolder
|
|
SET nuGetFolder=%VALUE%
|
|
SHIFT
|
|
GOTO processArgs
|
|
|
|
:argNugetPkg
|
|
SET NUPKG=1
|
|
SHIFT
|
|
GOTO processArgs
|
|
|
|
:argTests
|
|
SET TESTS=true
|
|
SHIFT
|
|
GOTO processArgs
|
|
|
|
:endProcessArgs
|
|
|
|
|
|
:: validate
|
|
|
|
IF [%RELEASE%] EQU [] (
|
|
ECHO Could not determine release
|
|
ECHO Release is determined by the 'release' arg, or the UmbracoVersion.txt file
|
|
GOTO error
|
|
)
|
|
|
|
ECHO # Usage: on line 2 put the release version, on line 3 put the version comment (example: beta)> UmbracoVersion.txt
|
|
ECHO %release%>> UmbracoVersion.txt
|
|
ECHO %comment%>> UmbracoVersion.txt
|
|
|
|
|
|
:: run
|
|
|
|
SET VERSION=%RELEASE%
|
|
IF [%COMMENT%] NEQ [] (SET VERSION=%VERSION%-%COMMENT%)
|
|
IF [%BUILD%] NEQ [] (SET VERSION=%VERSION%+%BUILD%)
|
|
|
|
ECHO ################################################################
|
|
ECHO Building Umbraco %VERSION%
|
|
ECHO ################################################################
|
|
|
|
SET MSBUILDPATH=C:\Program Files (x86)\MSBuild\14.0\Bin
|
|
SET MSBUILD="%MSBUILDPATH%\MsBuild.exe"
|
|
SET PATH="%MSBUILDPATH%";%PATH%
|
|
|
|
ReplaceIISExpressPortNumber.exe ..\src\Umbraco.Web.UI\Umbraco.Web.UI.csproj %RELEASE%
|
|
|
|
ECHO.
|
|
ECHO First make sure everything is clean as a whistle
|
|
|
|
ECHO.
|
|
ECHO Removing the belle build folder and bower_components folder
|
|
RD ..\src\Umbraco.Web.UI.Client\build /Q /S
|
|
RD ..\src\Umbraco.Web.UI.Client\bower_components /Q /S
|
|
|
|
ECHO.
|
|
ECHO Removing existing built files
|
|
RMDIR /Q /S _BuildOutput
|
|
DEL /F /Q UmbracoCms.*.zip 2>NUL
|
|
DEL /F /Q UmbracoExamine.*.zip 2>NUL
|
|
DEL /F /Q UmbracoCms.*.nupkg 2>NUL
|
|
DEL /F /Q webpihash.txt 2>NUL
|
|
|
|
ECHO.
|
|
ECHO Making sure Git is in the path so that the build can succeed
|
|
CALL InstallGit.cmd
|
|
|
|
:: Adding the default Git path so that if it's installed it can actually be found
|
|
:: This is necessary because SETLOCAL is on in InstallGit.cmd so that one might find Git,
|
|
:: but the path setting is lost due to SETLOCAL
|
|
SET PATH="C:\Program Files (x86)\Git\cmd";"C:\Program Files\Git\cmd";%PATH%
|
|
|
|
SET toolsFolder=%CD%\tools\
|
|
IF NOT EXIST "%toolsFolder%" (
|
|
MD tools
|
|
)
|
|
|
|
SET nuGetExecutable=%CD%\tools\nuget.exe
|
|
IF NOT EXIST "%nuGetExecutable%" (
|
|
ECHO Getting NuGet so we can fetch some tools
|
|
ECHO Downloading https://dist.nuget.org/win-x86-commandline/latest/nuget.exe to %nuGetExecutable%
|
|
powershell -Command "(New-Object Net.WebClient).DownloadFile('https://dist.nuget.org/win-x86-commandline/latest/nuget.exe', '%nuGetExecutable%')"
|
|
)
|
|
|
|
:: We need 7za.exe for BuildBelle.bat
|
|
IF NOT EXIST "%toolsFolder%7za.exe" (
|
|
ECHO 7zip not found - fetching now
|
|
"%nuGetExecutable%" install 7-Zip.CommandLine -OutputDirectory tools -Verbosity quiet
|
|
)
|
|
|
|
:: We need vswhere.exe for VS2017+
|
|
IF NOT EXIST "%toolsFolder%vswhere.exe" (
|
|
ECHO vswhere not found - fetching now
|
|
"%nuGetExecutable%" install vswhere -OutputDirectory tools -Verbosity quiet
|
|
)
|
|
|
|
:: Put 7za.exe and vswhere.exe in a predictable path (not version specific)
|
|
FOR /f "delims=" %%A in ('dir "%toolsFolder%7-Zip.CommandLine.*" /b') DO SET "sevenZipExePath=%toolsFolder%%%A\"
|
|
MOVE "%sevenZipExePath%tools\7za.exe" "%toolsFolder%7za.exe"
|
|
|
|
FOR /f "delims=" %%A in ('dir "%toolsFolder%vswhere.*" /b') DO SET "vswhereExePath=%toolsFolder%%%A\"
|
|
MOVE "%vswhereExePath%tools\vswhere.exe" "%toolsFolder%vswhere.exe"
|
|
|
|
ECHO.
|
|
ECHO Making sure we have a web.config
|
|
IF NOT EXIST "%CD%\..\src\Umbraco.Web.UI\web.config" COPY "%CD%\..\src\Umbraco.Web.UI\web.Template.config" "%CD%\..\src\Umbraco.Web.UI\web.config"
|
|
|
|
for /f "usebackq tokens=1* delims=: " %%i in (`"%CD%\tools\vswhere.exe" -latest -requires Microsoft.Component.MSBuild`) do (
|
|
if /i "%%i"=="installationPath" set InstallDir=%%j
|
|
)
|
|
|
|
SET VSWherePath="%InstallDir%\MSBuild"
|
|
|
|
ECHO.
|
|
ECHO Visual Studio is installed in: %InstallDir%
|
|
|
|
SET MSBUILDPATH=C:\Program Files (x86)\MSBuild\14.0\Bin
|
|
SET MSBUILD="%MSBUILDPATH%\MsBuild.exe"
|
|
|
|
ECHO.
|
|
ECHO Reporting NuGet version
|
|
"%nuGetExecutable%" help | findstr "^NuGet Version:"
|
|
|
|
ECHO.
|
|
ECHO Restoring NuGet packages
|
|
ECHO Into %nuGetFolder%
|
|
"%nuGetExecutable%" restore "%CD%\..\src\umbraco.sln" -Verbosity Quiet -NonInteractive -PackagesDirectory "%nuGetFolder%"
|
|
IF ERRORLEVEL 1 GOTO :error
|
|
|
|
ECHO.
|
|
ECHO.
|
|
ECHO Performing MSBuild and producing Umbraco binaries zip files
|
|
ECHO This takes a few minutes and logging is set to report warnings
|
|
ECHO and errors only so it might seems like nothing is happening for a while.
|
|
ECHO You can check the msbuild.log file for progress.
|
|
ECHO.
|
|
%MSBUILD% "Build.proj" ^
|
|
/p:BUILD_RELEASE=%RELEASE% ^
|
|
/p:BUILD_COMMENT=%COMMENT% ^
|
|
/p:BUILD_NUMBER=%BUILD% ^
|
|
/p:BUILD_TESTS=%TESTS% ^
|
|
/p:NugetPackagesDirectory="%nuGetFolder%" ^
|
|
/p:VSWherePath="%VSWherePath%" ^
|
|
/consoleloggerparameters:Summary;ErrorsOnly ^
|
|
/fileLogger
|
|
IF ERRORLEVEL 1 GOTO error
|
|
|
|
ECHO.
|
|
ECHO Setting node_modules folder to hidden to prevent VS13 from
|
|
ECHO crashing on it while loading the websites project
|
|
attrib +h ..\src\Umbraco.Web.UI.Client\node_modules
|
|
|
|
IF %NUPKG% EQU 0 GOTO success
|
|
|
|
ECHO.
|
|
ECHO Adding Web.config transform files to the NuGet package
|
|
REN .\_BuildOutput\WebApp\Views\Web.config Web.config.transform
|
|
|
|
ECHO.
|
|
ECHO Packing the NuGet release files
|
|
..\src\.nuget\NuGet.exe Pack NuSpecs\UmbracoCms.Core.nuspec -Version %VERSION% -Symbols -Verbosity quiet
|
|
..\src\.nuget\NuGet.exe Pack NuSpecs\UmbracoCms.Compat7.nuspec -Version %VERSION% -Symbols -Verbosity quiet
|
|
..\src\.nuget\NuGet.exe Pack NuSpecs\UmbracoCms.nuspec -Version %VERSION% -Verbosity quiet
|
|
IF ERRORLEVEL 1 GOTO error
|
|
|
|
:success
|
|
ECHO.
|
|
ECHO No errors were detected!
|
|
ECHO There may still be some in the output, which you would need to investigate.
|
|
ECHO Warnings are usually normal.
|
|
ECHO.
|
|
ECHO.
|
|
GOTO :EOF
|
|
|
|
:error
|
|
|
|
ECHO.
|
|
ECHO Errors were detected!
|
|
ECHO.
|
|
|
|
:: don't pause if continuous integration else the build server waits forever
|
|
:: before cancelling the build (and, there is noone to read the output anyways)
|
|
IF %INTEGRATION% NEQ 1 PAUSE
|