mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-12-11 00:02:19 -05:00
533 lines
No EOL
12 KiB
Batchfile
Executable file
533 lines
No EOL
12 KiB
Batchfile
Executable file
@echo off
|
|
setlocal EnableDelayedExpansion
|
|
|
|
Color 0A
|
|
|
|
mode con: cols=78 lines=60
|
|
|
|
:: Global Variables
|
|
set "temp-dir=C:\Coco-Temp"
|
|
set install-log=%temp-dir%\coco-dev-install-log.txt
|
|
|
|
:: set correct curl app
|
|
IF EXIST "%PROGRAMFILES(X86)%" (
|
|
(set "curl-app=utilities\curl\64bit\curl.exe")
|
|
) ELSE (
|
|
set "curl-app=utilities\curl\32bit\curl.exe"
|
|
)
|
|
|
|
set "ZU-app=utilities\7za.exe"
|
|
|
|
:: BUGS:
|
|
:: + DEBUG ALL STEPS UNTILL NOW DONE
|
|
|
|
|
|
:: TODO:
|
|
:: + Write code to install vs if it's not yet installed on users pc
|
|
|
|
:: + Configuraton and installation checklist:
|
|
:: 1) cd codecombat
|
|
:: 2) npm install -g bower brunch nodemon sendwithus
|
|
:: 3) bower install
|
|
:: 4) gem install sass
|
|
:: 5) npm install
|
|
:: 6) brunch -w
|
|
:: Extra... @ Fail run npm install
|
|
|
|
:: + Copy the automated dev batch file to root folder
|
|
:: => Let user define mongo-db directory
|
|
:: + Start the dev environment
|
|
|
|
:: Create The Temporary Directory
|
|
IF EXIST %temp-dir% rmdir %temp-dir% /s /q
|
|
mkdir %temp-dir%
|
|
|
|
:: Create Log File
|
|
copy /y nul %install-log% > nul
|
|
|
|
call:parse_aa_and_draw "config\header"
|
|
call:draw_dss
|
|
|
|
call:parse_file_new "config\config" cnfg n
|
|
|
|
call:log "Welcome to the automated Installation of the CodeCombat Dev. Environment!"
|
|
call:log_sse "v%%cnfg[1]%% authored by %%cnfg[2]%% and published by %%cnfg[3]%%."
|
|
|
|
:: Language Agreement Stuff
|
|
|
|
call:log "In order to continue the installation of the developers environment"
|
|
call:log "you will have to read and agree with the following license:
|
|
call:draw_dss
|
|
echo.
|
|
call:parse_aa_and_draw "license.txt"
|
|
echo.
|
|
call:draw_dss
|
|
call:strict_user_yn_question "Have you read the license and do you agree with it?"
|
|
|
|
if "%res%"=="false" (
|
|
call:log "Sorry to hear that, have a good day..."
|
|
call:log_sse "Installation and Setup of the CodeCombat environment is cancelled."
|
|
GOTO:END
|
|
)
|
|
|
|
:: Tips
|
|
call:log "Before we start the installation, here are some tips:"
|
|
echo.
|
|
|
|
call:parse_aa_and_draw "config\tips"
|
|
|
|
call:draw_ss
|
|
|
|
:: Read Language Index
|
|
call:parse_file_new "localisation\languages" lang lang_c
|
|
|
|
:: Read Download URLs
|
|
call:parse_file_new "config\downloads" downloads n
|
|
call:parse_file_new "config\downloads_32" downloads_32 n
|
|
call:parse_file_new "config\downloads_64" downloads_64 n
|
|
call:parse_file_new "config\downloads_vista_32" downloads_vista_32 n
|
|
call:parse_file_new "config\downloads_vista_64" downloads_vista_64 n
|
|
call:parse_file_new "config\downloads_7_32" downloads_7_32 n
|
|
call:parse_file_new "config\downloads_7_64" downloads_7_64 n
|
|
|
|
:: Parse all Localisation Files
|
|
for /L %%i in (1,1,%lang_c%) do (
|
|
call:parse_file "localisation\%%lang[%%i]%%" languages languages_c
|
|
)
|
|
|
|
set /A "wc = %languages_c% / %lang_c%"
|
|
|
|
:: Start install with language question (Localisation)
|
|
call:log "Which language do you prefer?"
|
|
|
|
set /A c=0
|
|
for /L %%i in (1,%wc%,%languages_c%) do (
|
|
set /A "n = %%i - 1"
|
|
call:log " [%%c%%] %%languages[%%i]%%"
|
|
set /A c+=1
|
|
)
|
|
|
|
set "lang_id=-1"
|
|
call:user_enter_language_id
|
|
goto:user_pick_language
|
|
|
|
:user_enter_language_id
|
|
set /p lang_id= "Enter the language ID and press <ENTER>: "
|
|
goto:eof
|
|
|
|
:user_pick_language
|
|
set res=false
|
|
if %lang_id% LSS 0 set res=true
|
|
if %lang_id% GEQ %lang_c% set res=true
|
|
if "%res%"=="true" (
|
|
call:log "Invalid id! Please enter a correct id from the numbers listed above..."
|
|
call:draw_dss
|
|
call:user_enter_language_id
|
|
goto:user_pick_language
|
|
)
|
|
|
|
call:get_lw word 0
|
|
call:log_ds "You choose '%word%', from now on all feedback will be logged in it."
|
|
|
|
call:log_lw 1
|
|
call:log_lw_sse 2
|
|
|
|
:: downloads for all version...
|
|
|
|
:: [TODO] The choice between Cygwin && Git ?! Is => HAVE EXTERNAL GIT APPLICATION LIST!!!
|
|
|
|
call:log_lw_sse 3
|
|
|
|
call:log_lw 6
|
|
call:log_lw 7
|
|
call:log_lw 8
|
|
call:install_software_o "git" "%%downloads[1]%%" exe 9
|
|
call:draw_dss
|
|
call:get_lw word 11
|
|
|
|
:: [TODO] Add downloads for windows visual studio ?!
|
|
|
|
call:user_set_git_path
|
|
|
|
:user_set_git_path_fail
|
|
if not exist "%git_exe_path%" (
|
|
call:log_lw 27
|
|
call:draw_dss
|
|
call:user_set_git_path
|
|
)
|
|
:: architecture specific downloads...
|
|
IF EXIST "%PROGRAMFILES(X86)%" (GOTO 64BIT) ELSE (GOTO 32BIT)
|
|
goto:eof
|
|
|
|
:user_set_git_path
|
|
set /p git_exe_path="%word%: "
|
|
call:user_set_git_path_fail
|
|
goto:eof
|
|
|
|
:go_to_platform
|
|
call:log_ds "Windows %~1 detected..."
|
|
GOTO %~2
|
|
goto:eof
|
|
|
|
:64BIT
|
|
call:log_ds "64-bit computer detected..."
|
|
|
|
call:install_software_o "node-js" "%%downloads_64[1]%%" msi 12
|
|
call:draw_dss
|
|
|
|
call:get_path_from_user 41 42
|
|
set "node_js_path=%user_tmp_path%"
|
|
Call:draw_dss
|
|
|
|
call:install_software_o "ruby" "%%downloads_64[2]%%" exe 13
|
|
call:draw_dss
|
|
call:install_software_o "python" "%%downloads_64[3]%%" msi 26
|
|
|
|
:: Some installations require specific windows versions
|
|
for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j
|
|
if "%version%" == "5.2" ( call:go_to_platform "XP" ver_XP_64 )
|
|
if "%version%" == "6.0" ( call:go_to_platform "Vista" ver_Vista_64 )
|
|
if "%version%" == "6.1" ( call:go_to_platform "7" ver_Win7_8_64 )
|
|
if "%version%" == "6.2" ( call:go_to_platform "8.0" ver_Win7_8_64 )
|
|
if "%version%" == "6.3" ( call:go_to_platform "8.1" ver_Win7_8_64 )
|
|
GOTO warn_and_exit
|
|
GOTO END
|
|
|
|
:32BIT
|
|
call:log_ds "32-bit computer detected..."
|
|
|
|
call:install_software_o "node-js" "%%downloads_32[1]%%" msi 12
|
|
call:draw_dss
|
|
|
|
call:get_path_from_user 41 42
|
|
set "node_js_path=%user_tmp_path%"
|
|
Call:draw_dss
|
|
|
|
call:install_software_o "ruby" "%%downloads_32[2]%%" exe 13
|
|
call:draw_dss
|
|
call:install_software_o "python" "%%downloads_32[3]%%" msi 26
|
|
|
|
:: Some installations require specific windows versions
|
|
for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j
|
|
if "%version%" == "5.2" ( call:go_to_platform "XP" ver_XP_32 )
|
|
if "%version%" == "6.0" ( call:go_to_platform "Vista" ver_Vista_32 )
|
|
if "%version%" == "6.1" ( call:go_to_platform "7" ver_Win7_8_32 )
|
|
if "%version%" == "6.2" ( call:go_to_platform "8.0" ver_Win7_8_32 )
|
|
if "%version%" == "6.3" ( call:go_to_platform "8.1" ver_Win7_8_32 )
|
|
GOTO warn_and_exit
|
|
GOTO END
|
|
|
|
:ver_Win7_8_32
|
|
call:install_packed_software_o "mongo-db" "%%downloads_7_32[1]%%" 25 14
|
|
set "mong-db-path = %packed_software_path%"
|
|
goto git_rep_checkout
|
|
|
|
:ver_Vista_32
|
|
call:install_packed_software_o "mongo-db" "%%downloads_vista_32[1]%%" 25 14
|
|
set "mong-db-path = %packed_software_path%"
|
|
goto git_rep_checkout
|
|
|
|
:ver_XP_32
|
|
call:log_lw_ds 15
|
|
goto END
|
|
|
|
:ver_Win7_8_64
|
|
call:install_packed_software_o "mongo-db" "%%downloads_7_64[1]%%" 25 14
|
|
set "mong-db-path = %packed_software_path%"
|
|
goto git_rep_checkout
|
|
|
|
:ver_Vista_64
|
|
call:install_packed_software_o "mongo-db" "%%downloads_vista_64[1]%%" 25 14
|
|
set "mong-db-path = %packed_software_path%"
|
|
goto git_rep_checkout
|
|
|
|
:ver_XP_64
|
|
call:log_lw_ds 15
|
|
goto END
|
|
|
|
:git_rep_checkout
|
|
call:log_lw_ss 16
|
|
call:log_lw_sse 17
|
|
|
|
set "PATH=%PATH%;%git_exe_path%\bin;%git_exe_path%\cmd" /M
|
|
|
|
call:log_lw 36
|
|
call:log_lw 37
|
|
call:log_lw 38
|
|
|
|
call:draw_dss
|
|
|
|
call:get_lw word 39
|
|
set /p git_username="%word% "
|
|
|
|
call:draw_dss
|
|
|
|
call:get_empty_path_from_user 32
|
|
set "git_repository_path=%user_tmp_path%"
|
|
|
|
goto:git_rep_checkout_auto
|
|
|
|
:git_rep_checkout_auto
|
|
git clone https://github.com/%git_username%/codecombat.git "%git_repository_path%"
|
|
goto:git_repo_configuration
|
|
|
|
:git_repo_configuration
|
|
call:log_lw_ss 35
|
|
call:log_lw_sse 36
|
|
|
|
SET "PATH=%PATH%;%node_js_path%" /M
|
|
setx -m git "%git_exe_path%\bin"
|
|
|
|
call:log_lw 40
|
|
start cmd /k "npm install -g bower brunch nodemon sendwithus & exit"
|
|
|
|
goto report_ok
|
|
|
|
:report_ok
|
|
call:log_lw 18
|
|
call:log_lw_sse 19
|
|
|
|
:: Open README file
|
|
call:open_readme
|
|
|
|
goto clean_up
|
|
|
|
:open_readme
|
|
call:open_txt_file "config/info"
|
|
goto:eof
|
|
|
|
:warn_and_exit
|
|
call:log_lw_ss 20
|
|
call:log_lw_sse 21
|
|
goto error_report
|
|
|
|
:error_report
|
|
call:log_lw_ds 22
|
|
goto END
|
|
|
|
:clean_up
|
|
call:log_lw_sse 23
|
|
rmdir %temp-dir% /s /q
|
|
goto END
|
|
|
|
:: ============================ INSTALL SOFTWARE FUNCTIONS ======================
|
|
|
|
:download_software
|
|
call:get_lw word 4
|
|
call:log "%word% %~1..."
|
|
%curl-app% -sS -k %~2 -o %temp-dir%\%~1-setup.%~3
|
|
goto:eof
|
|
|
|
:install_software
|
|
call:download_software %~1 %~2 %~3
|
|
call:get_lw word 5
|
|
call:log "%word% %~1..."
|
|
START /WAIT %temp-dir%\%~1-setup.%~3
|
|
goto:eof
|
|
|
|
:install_software_o
|
|
call:get_lw word %~4
|
|
call:user_yn_question "%word%"
|
|
if "%res%"=="true" (
|
|
call:install_software %~1 %~2 %~3
|
|
) else (
|
|
call:log_lw 10
|
|
)
|
|
goto:eof
|
|
|
|
:install_packed_software
|
|
call:download_software %~1 %~2 zip
|
|
|
|
call:draw_dss
|
|
|
|
call:get_lw word %~3
|
|
|
|
set /p packed_software_path="%word% "
|
|
|
|
:: remove chosen directory of user if it already exists (to prevent a window from popping up)
|
|
IF EXIST %packed_software_path% rmdir %packed_software_path% /s /q
|
|
|
|
%ZU-app% x %temp-dir%\%~1-setup.zip -o%packed_software_path%
|
|
|
|
call:draw_dss
|
|
|
|
for /f "delims=" %%a in ('dir "%packed_software_path%\" /on /ad /b') do @set temp_dir=%%a
|
|
for /f "delims=" %%a in ('dir "%packed_software_path%\%temp_dir%\" /on /ad /b') do (
|
|
xcopy %packed_software_path%\%temp_dir% %packed_software_path%\ /S /E
|
|
)
|
|
|
|
call:draw_dss
|
|
rmdir %packed_software_path%\%temp_dir%\ /s /q
|
|
goto:eof
|
|
|
|
:user_yn_question
|
|
set /p result="%~1 [Y/N]: "
|
|
call:draw_dss
|
|
set "res=false"
|
|
if "%result%"=="N" (set "res=true")
|
|
if "%result%"=="n" (set "res=true")
|
|
goto:eof
|
|
|
|
:strict_user_yn_question
|
|
set /p result="%~1 [Y/N]: "
|
|
call:draw_dss
|
|
set "res=unset"
|
|
if "%result%"=="N" (set "res=false")
|
|
if "%result%"=="n" (set "res=false")
|
|
if "%result%"=="Y" (set "res=true")
|
|
if "%result%"=="y" (set "res=true")
|
|
|
|
if "%res%"=="unset" (
|
|
call:log "Please answer the question with either Y or N..."
|
|
call:draw_dss
|
|
call:strict_user_yn_question "%~1"
|
|
)
|
|
goto:eof
|
|
|
|
:install_packed_software_o
|
|
call:get_lw word %~4
|
|
call:user_yn_question "%word%"
|
|
if "%res%"=="true" (
|
|
call:install_packed_software %~1 %~2 %~3
|
|
) else (
|
|
call:log_lw 10
|
|
)
|
|
goto:eof
|
|
|
|
:: ===================== USER - INTERACTION - FUNCTIONS ========================
|
|
|
|
:get_path_from_user
|
|
call:get_lw word %~1
|
|
set /p user_tmp_path="%word% "
|
|
if not exist "%user_tmp_path%" (
|
|
call:log_lw 43
|
|
call:draw_dss
|
|
call:get_path_from_user %~1 %~2
|
|
)
|
|
goto:eof
|
|
|
|
:get_empty_path_from_user
|
|
call:get_lw word %~1
|
|
set /p user_tmp_path="%word% "
|
|
if exist "%user_tmp_path%" (
|
|
call:log_lw 33
|
|
call:draw_dss
|
|
call:get_path_from_user %~1
|
|
)
|
|
goto:eof
|
|
|
|
:: ============================== FUNCTIONS ====================================
|
|
|
|
:log
|
|
echo %~1
|
|
echo %~1 >> %install-log%
|
|
goto:eof
|
|
|
|
:draw_ss
|
|
echo.
|
|
call:log "-----------------------------------------------------------------------------"
|
|
echo.
|
|
goto:eof
|
|
|
|
:draw_dss
|
|
echo.
|
|
call:log "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"
|
|
echo.
|
|
goto:eof
|
|
|
|
:draw_seperator
|
|
echo.
|
|
echo + + + + + + + +
|
|
echo.
|
|
goto:eof
|
|
|
|
:log_ss
|
|
call:draw_ss
|
|
call:log "%~1"
|
|
goto:eof
|
|
|
|
:log_sse
|
|
call:log "%~1"
|
|
call:draw_ss
|
|
goto:eof
|
|
|
|
:log_ds
|
|
call:log_ss "%~1"
|
|
call:draw_ss
|
|
goto:eof
|
|
|
|
:: ============================== IO FUNCTIONS ====================================
|
|
|
|
:open_txt_file
|
|
start "" notepad.exe %~1
|
|
goto:eof
|
|
|
|
:parse_aa_and_draw
|
|
set "file=%~1"
|
|
for /f "usebackq tokens=* delims=;" %%a in ("%file%") do (
|
|
echo.%%a
|
|
)
|
|
goto:eof
|
|
|
|
:parse_file
|
|
set "file=%~1"
|
|
for /F "usebackq delims=" %%a in ("%file%") do (
|
|
set /A %~3+=1
|
|
call set %~2[%%%~3%%]=%%a
|
|
)
|
|
goto:eof
|
|
|
|
:parse_file_new
|
|
set /A %~3=0
|
|
call:parse_file %~1 %~2 %~3
|
|
goto:eof
|
|
|
|
:: ============================== LOCALISATION FUNCTIONS ================
|
|
|
|
:get_lw
|
|
call:get_lw_id %~1 %lang_id% %~2
|
|
goto:eof
|
|
|
|
:get_lw_id
|
|
set /A count = %~2 * %wc% + %~3 + 1
|
|
set "%~1=!languages[%count%]!"
|
|
goto:eof
|
|
|
|
:log_lw
|
|
call:get_lw str %~1
|
|
call:log "%str%"
|
|
goto:eof
|
|
|
|
:log_lw_prfx
|
|
call:get_lw str %~1
|
|
call:log "%~2%str%"
|
|
goto:eof
|
|
|
|
:log_lw_ss
|
|
call:get_lw str %~1
|
|
call:log_ss "%str%"
|
|
goto:eof
|
|
|
|
:log_lw_ds
|
|
call:get_lw str %~1
|
|
call:log_ds "%str%"
|
|
goto:eof
|
|
|
|
:log_lw_sse
|
|
call:get_lw str %~1
|
|
call:log_sse "%str%"
|
|
goto:eof
|
|
|
|
:: ============================== WINDOWS FUNCTIONS ======================
|
|
|
|
:set_env_var
|
|
setx -m %~1 %~2
|
|
goto:eof
|
|
|
|
:: ============================== EOF ====================================
|
|
|
|
:END
|
|
exit
|
|
goto:eof
|
|
|
|
endlocal |