From 176da97a5f3a927a53f326f570030187920d9238 Mon Sep 17 00:00:00 2001 From: Ahmed ElSayed Date: Fri, 6 Jan 2017 17:19:54 -0800 Subject: [PATCH] Adding a custom deployment script --- .deployment | 2 + deploy.cmd | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++++ filter.py | 20 ++++++++ 3 files changed, 165 insertions(+) create mode 100644 .deployment create mode 100644 deploy.cmd create mode 100644 filter.py diff --git a/.deployment b/.deployment new file mode 100644 index 0000000..aad9ec1 --- /dev/null +++ b/.deployment @@ -0,0 +1,2 @@ +[config] +command = deploy.cmd diff --git a/deploy.cmd b/deploy.cmd new file mode 100644 index 0000000..4fd646e --- /dev/null +++ b/deploy.cmd @@ -0,0 +1,143 @@ +@if "%SCM_TRACE_LEVEL%" NEQ "4" @echo off + +:: ---------------------- +:: KUDU Deployment Script +:: Version: 1.0.10 +:: ---------------------- + +:: Prerequisites +:: ------------- + +:: Verify node.js installed +where node 2>nul >nul +IF %ERRORLEVEL% NEQ 0 ( + echo Missing node.js executable, please install node.js, if already installed make sure it can be reached from current environment. + goto error +) + +:: Setup +:: ----- + +setlocal enabledelayedexpansion + +SET ARTIFACTS=%~dp0%..\artifacts + +IF NOT DEFINED DEPLOYMENT_SOURCE ( + SET DEPLOYMENT_SOURCE=%~dp0%. +) + +IF NOT DEFINED DEPLOYMENT_TARGET ( + SET DEPLOYMENT_TARGET=%ARTIFACTS%\wwwroot +) + +IF NOT DEFINED NEXT_MANIFEST_PATH ( + SET NEXT_MANIFEST_PATH=%ARTIFACTS%\manifest + + IF NOT DEFINED PREVIOUS_MANIFEST_PATH ( + SET PREVIOUS_MANIFEST_PATH=%ARTIFACTS%\manifest + ) +) + +IF NOT DEFINED KUDU_SYNC_CMD ( + :: Install kudu sync + echo Installing Kudu Sync + call npm install kudusync -g --silent + IF !ERRORLEVEL! NEQ 0 goto error + + :: Locally just running "kuduSync" would also work + SET KUDU_SYNC_CMD=%appdata%\npm\kuduSync.cmd +) +goto Deployment + +:: Utility Functions +:: ----------------- + +:SelectNodeVersion + +IF DEFINED KUDU_SELECT_NODE_VERSION_CMD ( + :: The following are done only on Windows Azure Websites environment + call %KUDU_SELECT_NODE_VERSION_CMD% "%DEPLOYMENT_SOURCE%" "%DEPLOYMENT_TARGET%" "%DEPLOYMENT_TEMP%" + IF !ERRORLEVEL! NEQ 0 goto error + + IF EXIST "%DEPLOYMENT_TEMP%\__nodeVersion.tmp" ( + SET /p NODE_EXE=<"%DEPLOYMENT_TEMP%\__nodeVersion.tmp" + IF !ERRORLEVEL! NEQ 0 goto error + ) + + IF EXIST "%DEPLOYMENT_TEMP%\__npmVersion.tmp" ( + SET /p NPM_JS_PATH=<"%DEPLOYMENT_TEMP%\__npmVersion.tmp" + IF !ERRORLEVEL! NEQ 0 goto error + ) + + IF NOT DEFINED NODE_EXE ( + SET NODE_EXE=node + ) + + SET NPM_CMD="!NODE_EXE!" "!NPM_JS_PATH!" +) ELSE ( + SET NPM_CMD=npm + SET NODE_EXE=node +) + +goto :EOF + +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:: Deployment +:: ---------- + +:Deployment +echo Handling node.js deployment. + +:: 1. KuduSync +IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" ( + call :ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_SOURCE%" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd" + IF !ERRORLEVEL! NEQ 0 goto error +) + +:: 2. Select node version +call :SelectNodeVersion + +call :ExecuteCmd !NPM_CMD! install -g node-gyp +IF !ERRORLEVEL! NEQ 0 goto error + +call :ExecuteCmd node-gyp install +IF !ERRORLEVEL! NEQ 0 goto error + +call :ExecuteCmd python "%DEPLOYMENT_SOURCE%\filter.py" +IF !ERRORLEVEL! NEQ 0 goto error + + +:: 3. Install npm packages +IF EXIST "%DEPLOYMENT_TARGET%\package.json" ( + pushd "%DEPLOYMENT_TARGET%" + call :ExecuteCmd !NPM_CMD! install --production + IF !ERRORLEVEL! NEQ 0 goto error + popd +) + +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +goto end + +:: Execute command routine that will echo out when error +:ExecuteCmd +setlocal +set _CMD_=%* +call %_CMD_% +if "%ERRORLEVEL%" NEQ "0" echo Failed exitCode=%ERRORLEVEL%, command=%_CMD_% +exit /b %ERRORLEVEL% + +:error +endlocal +echo An error has occurred during web site deployment. +call :exitSetErrorLevel +call :exitFromFunction 2>nul + +:exitSetErrorLevel +exit /b 1 + +:exitFromFunction +() + +:end +endlocal +echo Finished successfully. diff --git a/filter.py b/filter.py new file mode 100644 index 0000000..3abd859 --- /dev/null +++ b/filter.py @@ -0,0 +1,20 @@ +import os + +# http://stackoverflow.com/a/1724723/3234163 +def find_all(name, path): + result = [] + for root, dirs, files in os.walk(path): + if name in files: + result.append(os.path.join(root, name)) + return result + +lines = [] +files = find_all("common.gypi", "D:\\local\\UserProfile") + +for file in files: + with open(file) as in_file: + lines = in_file.readlines() + lines = [line for line in lines if "'/MP', # compile across multiple CPUs" not in line] + + with open(file, "w") as out_file: + out_file.writelines(lines) \ No newline at end of file