build.cmd (278 lines of code) (raw):
@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
ECHO Build Amqp.Net Lite
ECHO.
SET BUILD_SCRIPT=1
SET return-code=0
SET build-sln=amqp.sln
SET build-target=build
SET build-config=Debug
SET build-platform=Any CPU
SET build-verbosity=minimal
SET build-test=true
SET build-nuget=false
SET build-version=
IF /I "%1" EQU "release" (
set build-target=build
set build-config=Release
set build-nuget=true
SHIFT
)
IF /I "%1" EQU "clean" (
set build-target=clean
SHIFT
)
IF /I "%1" EQU "test" (
set build-target=test
SHIFT
)
IF /I "%1" EQU "pack" (
SET build-target=pack
set build-config=Release
set build-test=false
set build-nuget=true
SHIFT
)
:args-start
IF /I "%1" EQU "" GOTO args-done
IF /I "%1" EQU "--solution" GOTO args-solution
IF /I "%1" EQU "--skiptest" SET build-test=false&&GOTO args-loop
IF /I "%1" EQU "--nuget" SET build-nuget=true&&GOTO args-loop
IF /I "%1" EQU "--config" GOTO args-config
IF /I "%1" EQU "--platform" GOTO args-platform
IF /I "%1" EQU "--verbosity" GOTO args-verbosity
SET return-code=1
GOTO :args-error
:args-solution
SHIFT
SET build-sln=%~1
GOTO args-loop
:args-config
SHIFT
SET build-config=%1
GOTO args-loop
:args-platform
SHIFT
SET build-platform=%1
GOTO args-loop
:args-verbosity
SHIFT
SET build-verbosity=%1
GOTO args-loop
:args-loop
SHIFT
GOTO :args-start
:args-error
CALL :handle-error 1
GOTO :exit
:args-done
IF /I "%build-sln%" EQU "amqp-nanoFramework.sln" SET build-test=false
IF /I "%build-sln%" EQU "amqp-vs2015.sln" SET build-test=false
FOR /F "tokens=1-3* delims=() " %%A in (.\src\Properties\Version.cs) do (
IF "%%B" == "AssemblyInformationalVersion" SET build-version=%%C
)
IF "%build-version%" == "" (
ECHO Cannot find version from Version.cs.
SET return-code=2
GOTO :exit
)
ECHO Build solution: %build-sln%
ECHO Build target: %build-target%
ECHO Build version: %build-version%
ECHO Build configuration: %build-config%
ECHO Build platform: %build-platform%
ECHO Build run tests: %build-test%
ECHO Build NuGet package: %build-nuget%
ECHO.
IF /I "%build-config%" EQU "" GOTO :args-error
IF /I "%build-platform%" EQU "" GOTO :args-error
IF /I "%build-verbosity%" EQU "" GOTO :args-error
CALL :findfile NuGet exe
ECHO NuGet: "%NuGetPath%"
SET VSInstallPath=
CALL :findfile MSBuild exe
IF "" == "%MSBuildPath%" (
IF EXIST "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" (
for /F "tokens=* USEBACKQ" %%F in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -Property installationPath`) DO SET VSInstallPath=%%F
IF NOT "" == "!VSInstallPath!" SET MSBuildPath=!VSInstallPath!\MSBuild\Current\Bin\MSBuild.exe
)
)
ECHO MSBuild: "%MSBuildPath%"
CALL :findfile dotnet exe
ECHO dotnet: "%dotnetPath%"
CALL :findfile vstest.console exe
IF "" == "%vstest.consolePath%" (
IF NOT "" == "%VSInstallPath%" SET vstest.consolePath=!VSInstallPath!\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
)
ECHO vstest.console: "%vstest.consolePath%"
IF /I "%build-target%" == "test" GOTO :build-done
IF /I "%build-target%" == "pack" GOTO :build-done
:build-start
TASKKILL /F /IM TestAmqpBroker.exe >nul 2>&1
IF /I "%build-target%" == "clean" GOTO :build-target
IF /I "%build-target%" == "build" GOTO :build-target
ECHO Unknown build target "%build-target%"
GOTO :args-error
:build-target
SET return-code=0
FOR %%G in (%build-sln%) DO (
CALL :run-build %build-target% %%G
IF ERRORLEVEL 1 (
SET return-code=1
GOTO :exit
)
)
:build-done
IF /I "%build-target%" == "clean" GOTO :exit
IF /I "%build-test%" EQU "false" GOTO :nuget-package
TASKLIST /NH /FI "IMAGENAME eq TestAmqpBroker.exe" | FINDSTR TestAmqpBroker.exe 1>nul 2>nul
IF NOT ERRORLEVEL 1 (
ECHO TestAmqpBroker is already running.
GOTO :run-test
)
SET TestBrokerPath=.\bin\%build-config%\TestAmqpBroker\TestAmqpBroker.exe
ECHO Starting the test AMQP broker
ECHO %TestBrokerPath% amqp://localhost:5672 amqps://localhost:5671 ws://localhost:18080 /creds:guest:guest /cert:localhost
START CMD.exe /C %TestBrokerPath% amqp://localhost:5672 amqps://localhost:5671 ws://localhost:18080 /creds:guest:guest /cert:localhost
rem Delay to allow broker to start up
timeout 3
:run-test
IF "%vstest.consolePath%" == "" (
ECHO vstest.console.exe does not exist or is not under PATH. Will not run tests.
SET return-code=1
TASKKILL /F /IM TestAmqpBroker.exe
GOTO :exit
)
ECHO.
ECHO Running NET45 tests...
"%vstest.consolePath%" .\bin\%build-config%\Test.Amqp.NetFX45\Test.Amqp.Net.dll
IF ERRORLEVEL 1 (
SET return-code=1
ECHO Test failed!
TASKKILL /F /IM TestAmqpBroker.exe
IF /I "%is-elevated%" == "false" ECHO WebSocket tests may be failing because the broker was started without Administrator permission
GOTO :exit
)
ECHO.
ECHO Running NET40 tests...
"%vstest.consolePath%" .\bin\%build-config%\Test.Amqp.NetFX40\Test.Amqp.Net.dll
IF ERRORLEVEL 1 (
SET return-code=1
ECHO Test failed!
TASKKILL /F /IM TestAmqpBroker.exe
GOTO :exit
)
ECHO.
ECHO Running NET35 tests...
"%vstest.consolePath%" .\bin\%build-config%\Test.Amqp.NetFX35\Test.Amqp.Net.dll
IF ERRORLEVEL 1 (
SET return-code=1
ECHO Test failed!
TASKKILL /F /IM TestAmqpBroker.exe
GOTO :exit
)
IF NOT "%build-sln:amqp.sln=%" == "%build-sln%" GOTO :run-dotnet-test
GOTO :done-test
:run-dotnet-test
ECHO Running DOTNET (netcoreapp 3.1) tests...
"%vstest.consolePath%" .\bin\%build-config%\Test.Amqp.NetCoreApp\netcoreapp3.1\Test.Amqp.Net.dll
IF ERRORLEVEL 1 (
SET return-code=1
ECHO dotnet Test failed!
GOTO :exit
)
:done-test
TASKKILL /F /IM TestAmqpBroker.exe
:nuget-package
IF /I "%build-nuget%" EQU "false" GOTO :exit
IF "%NuGetPath%" == "" (
ECHO NuGet.exe does not exist or is not under PATH.
SET return-code=1
GOTO :exit
)
IF /I "%build-config%" NEQ "Release" (
ECHO Not building release. Skipping NuGet package.
GOTO :exit
)
IF NOT EXIST ".\Build\Packages" MKDIR ".\Build\Packages"
ECHO Building NuGet package with version %build-version%
IF NOT "%build-sln:amqp.sln=%" == "%build-sln%" GOTO :package-main
GOTO :package-netmf
:package-main
"%NuGetPath%" pack .\nuspec\AMQPNetLite.nuspec -Version %build-version% -BasePath .\ -OutputDirectory ".\Build\Packages"
IF ERRORLEVEL 1 (
SET return-code=1
GOTO :exit
)
:package-dotnet
FOR %%G IN (AMQPNetLite.Core AMQPNetLite.Serialization AMQPNetLite.WebSockets) DO (
"%NuGetPath%" pack .\nuspec\%%G.nuspec -Version %build-version% -BasePath .\ -OutputDirectory ".\Build\Packages" -Symbols -SymbolPackageFormat snupkg
IF ERRORLEVEL 1 (
SET return-code=1
GOTO :exit
)
)
:package-netmf
IF NOT "%build-sln:amqp-vs2015.sln=%" == "%build-sln%" (
FOR %%G IN (AMQPNetLite.NetMF AMQPNetMicro) DO (
"%NuGetPath%" pack .\nuspec\%%G.nuspec -Version %build-version% -BasePath .\ -OutputDirectory ".\Build\Packages"
IF ERRORLEVEL 1 (
SET return-code=1
GOTO :exit
)
)
)
IF NOT "%build-sln:amqp-nanoFramework.sln=%" == "%build-sln%" (
FOR %%G IN (AMQPNetLite.nanoFramework AMQPNetMicro.nanoFramework) DO (
"%NuGetPath%" pack .\nuspec\%%G.nuspec -Version %build-version% -BasePath .\ -OutputDirectory ".\Build\Packages"
IF ERRORLEVEL 1 (
SET return-code=1
GOTO :exit
)
)
)
GOTO :exit
:exit
EXIT /b %return-code%
:usage
ECHO build.cmd [clean^|release^|test^|pack] [options]
ECHO clean: clean intermediate files
ECHO release: a shortcut for "--config Release --nuget"
ECHO test: run tests only from existing build
ECHO pack: create NuGet packages only from Release build
ECHO options:
ECHO --solution ^<value^> [amqp.sln] solution to build
ECHO --config ^<value^> [Debug] build configuration (e.g. Debug, Release)
ECHO --platform ^<value^> [Any CPU] build platform (e.g. Win32, x64, ...)
ECHO --verbosity ^<value^> [minimal] build verbosity (q[uiet], m[inimal], n[ormal], d[etailed] and diag[nostic])
ECHO --skiptest [false] skip test
ECHO --nuget [false] create NuGet packet (for Release only)
GOTO :eof
:handle-error
CALL :usage
SET return-code=%1
GOTO :eof
:run-build
ECHO Build solution %2
"%NuGetPath%" restore %2
IF ERRORLEVEL 1 EXIT /b 1
IF /I "%2" EQU "amqp.sln" (
"%MSBuildPath%" %2 /t:%1 /nologo /p:Configuration=%build-config%;Platform="%build-platform%" /verbosity:%build-verbosity%
IF ERRORLEVEL 1 EXIT /b 1
)
IF /I "%2" EQU "amqp-nanoFramework.sln" (
"%MSBuildPath%" %2 /t:%1 /nologo /p:Configuration=%build-config%;Platform="%build-platform%" /verbosity:%build-verbosity% /p:NoWarn=1591
IF ERRORLEVEL 1 EXIT /b 1
)
IF /I "%2" EQU "amqp-vs2015.sln" (
call build2015.cmd %1 %build-config% "%build-platform%" %build-verbosity%
IF ERRORLEVEL 1 EXIT /b 1
)
EXIT /b 0
:findfile
IF EXIST ".\Build\tools\%1.%2" (
SET %1Path=.\Build\tools\%1.%2
) ELSE (
FOR %%f IN (%1.%2) DO IF EXIST "%%~$PATH:f" SET %1Path=%%~$PATH:f
)
GOTO :eof