diff --git a/.gitattributes b/.gitattributes index 93b9d1b..e8d5033 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7,6 +7,13 @@ *.json text eol=lf *.ps1 text eol=crlf +# 批处ç�†è„šæœ¬ Git 一律ä¸�å�šä»»ä½•转æ�¢ï¼š +# - 必须是 CRLF 行尾,LF 会让 cmd è§£æž� goto 标签和多行å�—出错 +# - 必须是 GBK ç¼–ç �,cmd 用系统 ANSI 代ç �页解æž� .bat, +# å­˜æˆ� UTF-8 会让中文注释把命令行拆å��(实测会报「ä¸�是内部命令ã€�) +# 用 -text 让 Git 按二进制原样存å�–,é�¿å…�任何自动æ�¢è¡Œæˆ–ç¼–ç �转æ�¢ã€‚ +*.bat -text + *.png binary *.jpg binary *.zip binary diff --git a/build.bat b/build.bat new file mode 100644 index 0000000..352d157 --- /dev/null +++ b/build.bat @@ -0,0 +1,207 @@ +@echo off +setlocal + +rem ============================================================ +rem [±àÂëÌáÐÑ] ±¾Îļþ±ØÐë±£´æÎª GBK / ANSI ±àÂ룬CRLF ÐÐβ¡£ +rem ´æ³É UTF-8 »áÈà cmd ½âÎöÖÐÎijö´í£¬½Å±¾Ö±½ÓÅܲ»ÆðÀ´¡£ +rem Óà VS Code ±à¼­Ê±£¬ÓÒϽDZàÂëҪѡ GB2312/GBK ÔÙ±£´æ¡£ +rem ============================================================ +rem cmsp ´ò°ü½Å±¾ +rem +rem Ë«»÷±¾Îļþ£¬°Ñ³ÌÐò´ò°ü³ÉÒ»¸ö exe£¬¿ÉÒÔÖ±½Ó·¢¸øÍ¬ÊÂʹÓᣠ+rem ²úÎïÔÚ build\bin\cmsp.exe¡£ +rem +rem Ö»ÊÇÏë¸Ä´úÂ뿴Ч¹û£¬ÇëË«»÷ run_dev.bat£¬²»ÒªÓÃÕâ¸ö¡£ +rem ´ò°ü±È¿ª·¢Ä£Ê½ÂýºÜ¶à¡£ +rem +rem Óöµ½±¨´íÏÈ¿´ÌáʾÀïµÄ¡¸ÔõôÐÞ¡¹£¬ÕÕ×Å×öͨ³£¾ÍºÃÁË¡£ +rem ʵÔÚ½â¾ö²»ÁË£¬°ÑÕû¸öºÚ´°¿Ú½ØÍ¼·¢¸øÎ¬»¤Õß¡£ +rem ============================================================ + +cd /d "%~dp0" + +echo. +echo ============================================================ +echo cmsp ´ò°ü +echo ============================================================ +echo. + +rem ---------- ¼ì²é 1£ºGo ---------- +echo [1/6] ¼ì²é Go ... +where go >nul 2>nul +if errorlevel 1 ( + echo. + echo [X] ûÓÐÕÒµ½ go ÃüÁî¡£ + echo. + echo ÔõôÐÞ£º + echo 1. µ½ https://go.dev/dl/ ÏÂÔØ Go ²¢°²×° + echo 2. ×°Íê¹ØµôÕâ¸ö´°¿Ú£¬ÖØÐÂË«»÷±¾½Å±¾ + echo ^(×°Íê±ØÐëÖØ¿ª´°¿Ú£¬·ñÔò¶Á²»µ½Ð嵀 PATH^) + echo. + goto :fail +) +for /f "tokens=3" %%v in ('go version') do set GOVER=%%v +echo OK %GOVER% + +rem ---------- ¼ì²é 2£ºNode ---------- +echo [2/6] ¼ì²é Node.js ... +where node >nul 2>nul +if errorlevel 1 ( + echo. + echo [X] ûÓÐÕÒµ½ node ÃüÁî¡£ + echo. + echo ÔõôÐÞ£ºµ½ https://nodejs.org/ ÏÂÔØ LTS °æ±¾°²×°£¬ + echo ×°Íê¹Øµô´°¿ÚÖØÐÂË«»÷±¾½Å±¾¡£ + echo. + goto :fail +) +for /f %%v in ('node --version') do set NODEVER=%%v +echo OK %NODEVER% + +rem ---------- ¼ì²é 3£ºWails CLI ---------- +echo [3/6] ¼ì²é Wails ÃüÁîÐй¤¾ß ... +set "WAILS=" +where wails >nul 2>nul +if not errorlevel 1 set "WAILS=wails" + +rem where ÕÒ²»µ½Ê±£¬È¥ Go µÄĬÈϰ²×°Ä¿Â¼ÔÙÕÒÒ»´Î¡£ +rem ºÜ¶àÈË×°Íê Go ¹¤¾ßû°Ñ GOPATH Ï嵀 bin ¼Ó½ø PATH£¬ÕâÀﶵס¡£ +if not defined WAILS ( + for /f "delims=" %%p in ('go env GOPATH') do ( + if exist "%%p\bin\wails.exe" set "WAILS=%%p\bin\wails.exe" + ) +) + +if not defined WAILS ( + echo. + echo [X] ûÓÐÕÒµ½ wails ÃüÁî¡£ + echo. + echo ÔõôÐÞ£ºÔÚÕâ¸ö´°¿ÚÀïÖ´ÐÐÏÂÃæÕâÌõÃüÁװÍêÔÙÖØÐÂË«»÷±¾½Å±¾ + echo. + echo go install github.com/wailsapp/wails/v2/cmd/wails@latest + echo. + echo ×¢ÒâҪװ v2£¬²»Òª×° v3¡£±¾ÏîÄ¿ÓõÄÊÇ Wails v2 Îȶ¨°æ¡£ + echo. + goto :fail +) +echo OK ÕÒµ½ wails + +rem ---------- ¼ì²é 4£ºÅܵ¥Ôª²âÊÔ ---------- +rem ´ò°üǰÏÈÅܲâÊÔ¡£²âÊÔ²»¹ý¾Í±ð´ò°ü£¬ÃâµÃ°Ñ»µ°æ±¾·¢¸øÍ¬Ê¡£ +echo [4/6] ÔËÐе¥Ôª²âÊÔ ... +go test ./... +if not errorlevel 1 ( + echo OK ²âÊÔÈ«²¿Í¨¹ý + goto :tests_done +) + +echo. +echo [X] µ¥Ôª²âÊÔûͨ¹ý¡£ +echo. +echo ÔõôÐÞ£º +echo ÍùÉÏ·­ÕÒ FAIL ¿ªÍ·µÄÐУ¬ÄÇÀïдÁËÄĸö²âÊÔʧ°Ü¡¢ +echo ÆÚÍûʲô¡¢Êµ¼ÊÊÇʲô¡£ÏȰѴúÂë¸Ä¶ÔÔÙ´ò°ü¡£ +echo. +if /i not "%~1"=="skiptest" ( + echo ´ò°üÒÑÍ£Ö¹£¬²»°Ñûͨ¹ý²âÊԵİ汾·¢³öÈ¥¡£ + echo. + echo ȷʵҪǿÐдò°üʱִÐУºbuild.bat skiptest + echo. + goto :fail +) +echo [!] ÒѰ´ skiptest ²ÎÊýºöÂÔ²âÊÔʧ°Ü£¬¼ÌÐø´ò°ü¡£ +echo [!] Õâ¸ö°æ±¾²»Òª·¢¸øÍ¬Ê£¬ÏȰѲâÊÔÐ޺ᣠ+echo. +:tests_done + +rem ---------- ¼ì²é 5£ºÇ°¶ËÒÀÀµ ---------- +echo [5/6] ¼ì²éǰ¶ËÒÀÀµ ... +if not exist "frontend\node_modules" ( + echo node_modules ²»´æÔÚ£¬¿ªÊ¼°²×°£¬µÚÒ»´ÎÒª¼¸·ÖÖÓ ... + pushd frontend + call npm install + if errorlevel 1 ( + popd + echo. + echo [X] npm install ʧ°Ü¡£ + echo. + echo ÔõôÐÞ£º + echo 1. È·ÈÏÄÜÉÏÍø + echo 2. ¹«Ë¾ÍøÂçÊÜÏÞʱ»»¾µÏñÔ´£º + echo npm config set registry https://registry.npmmirror.com + echo 3. »¹²»ÐоÍɾµô frontend\node_modules ºÍ + echo frontend\package-lock.json ÔÙÅÜÒ»´Î + echo. + goto :fail + ) + popd + echo ÒÀÀµ°²×°Íê³É +) else ( + echo OK ÒÀÀµÒѰ²×° +) + +rem ---------- ´ò°ü ---------- +echo [6/6] ¿ªÊ¼´ò°ü£¬´óÔ¼ÐèÒª°ë·ÖÖÓ ... +echo. + +rem -clean »áÏÈÇåµôÉϴεIJúÎ±ÜÃâоÉÎļþ»ìÔÚÒ»Æð¡£ +"%WAILS%" build -clean +if errorlevel 1 ( + echo. + echo [X] ´ò°üʧ°Ü¡£ + echo. + echo ³£¼ûÔ­Òò£º + echo - Go ´úÂëÓбàÒë´íÎó£ºÍùÉÏ·­ÕÒ±¨´íÐÐ + echo - ÉÏÒ»¸ö cmsp.exe »¹ÔÚÔËÐУ¬Îļþ±»Õ¼Ó㺠+ echo ¹ØµôÕýÔÚÔËÐÐµÄ cmsp ´°¿ÚÔÙÊÔ + echo - ÒÀÀµÃ»ÏÂÈ«£ºÖ´ÐÐ go mod download ºóÖØÊÔ + echo. + goto :fail +) + +if not exist "build\bin\cmsp.exe" ( + echo. + echo [X] ´ò°üÃüÁîû±¨´í£¬µ«Ã»ÕÒµ½ build\bin\cmsp.exe + echo Çë°ÑÕâ¸ö´°¿Ú½ØÍ¼·¢¸øÎ¬»¤Õß¡£ + echo. + goto :fail +) + +echo. +echo ============================================================ +echo ´ò°ü³É¹¦ +echo ============================================================ +echo. +echo ²úÎ%CD%\build\bin\cmsp.exe +for %%f in ("build\bin\cmsp.exe") do echo ´óС£º%%~zf ×Ö½Ú +echo. +echo ·¢¸øÍ¬ÊÂʱµÄ×¢ÒâÊÂÏ +echo - Ö»·¢ cmsp.exe ¾Í¹»ÁË£¬ËüÒѾ­°Ñ½çÃæ´ò°ü½øÈ¥ÁË +echo - [±ØÐë] ²»Òª°Ñ config.yaml Ò»Æð·¢³öÈ¥£¬ÀïÃæÓÐÕ˺ÅÃÜÂë +echo - [±ØÐë] ²»Òª°Ñ cmsp.db Ò»Æð·¢³öÈ¥£¬ÀïÃæÓеǼ״̬ +echo - ¶Ô·½µÚÒ»´Î´ò¿ªºó£¬µ½¡¸²ÎÊýÉèÖá¹Ò³Ìî×Ô¼ºµÄÕ˺Š+echo. +echo ¶Ô·½µçÄÔÐèҪװ£º +echo - Microsoft Edge WebView2 ÔËÐÐʱ +echo ^(Win10 Ò»°ã×Ô´ø£»Ã»Óеϰ³ÌÐò»áÌáʾȥװ^) +echo - Google Chrome ^(ÓÃÀ´µÇ¼ÌÔ±¦^) +echo - ffprobe ^(ÓÃÀ´Ð£ÑéÏÂÔØµÄÊÓÆµÊÇ·ñÍêÕû^) +echo. + +rem ´ò¿ª²úÎïËùÔÚĿ¼£¬Ê¡µÃÊÖ¶¯ÕÒ¡£ +explorer "%CD%\build\bin" +goto :done + +:fail +echo. +echo ============================================================ +echo ´ò°üʧ°Ü¡£ÉÏÃæÐ´ÁËÔõôÐÞ£¬ÕÕ×Å×öͨ³£¾ÍºÃ¡£ +echo ½â¾ö²»Á˾ͰÑÕâ¸ö´°¿Ú½ØÍ¼·¢¸øÎ¬»¤Õß¡£ +echo ============================================================ +echo. +pause +exit /b 1 + +:done +pause +exit /b 0 diff --git a/run_dev.bat b/run_dev.bat new file mode 100644 index 0000000..5925019 --- /dev/null +++ b/run_dev.bat @@ -0,0 +1,186 @@ +@echo off +setlocal + +rem ============================================================ +rem [±àÂëÌáÐÑ] ±¾Îļþ±ØÐë±£´æÎª GBK / ANSI ±àÂ룬CRLF ÐÐβ¡£ +rem ´æ³É UTF-8 »áÈà cmd ½âÎöÖÐÎijö´í£¬½Å±¾Ö±½ÓÅܲ»ÆðÀ´¡£ +rem Óà VS Code ±à¼­Ê±£¬ÓÒϽDZàÂëҪѡ GB2312/GBK ÔÙ±£´æ¡£ +rem ============================================================ +rem cmsp ¿ª·¢Ä£Ê½Æô¶¯½Å±¾ +rem +rem Ë«»÷±¾Îļþ¼´¿ÉÆô¶¯¿ª·¢Ä£Ê½£º¸Äǰ¶Ë´úÂë»á×Ô¶¯Ë¢Ð£¬ +rem ¸Ä Go ´úÂë»á×Ô¶¯ÖØÐ±àÒë¡£µ÷ÊÔ½çÃæÎÊÌâÓÃÕâ¸ö£¬²»ÒªÓà build.bat¡£ +rem +rem Ïë´ò°ü³É¸øÍ¬ÊÂÓÃµÄ exe£¬ÇëË«»÷ build.bat¡£ +rem +rem Óöµ½±¨´íÏÈ¿´ÌáʾÀïµÄ¡¸ÔõôÐÞ¡¹£¬ÕÕ×Å×öͨ³£¾ÍºÃÁË¡£ +rem ʵÔÚ½â¾ö²»ÁË£¬°ÑÕû¸öºÚ´°¿Ú½ØÍ¼·¢¸øÎ¬»¤Õß¡£ +rem ============================================================ + +cd /d "%~dp0" + +echo. +echo ============================================================ +echo cmsp ¿ª·¢Ä£Ê½ +echo ============================================================ +echo. + +rem ---------- ¼ì²é 1£ºGo ---------- +echo [1/5] ¼ì²é Go ... +where go >nul 2>nul +if errorlevel 1 ( + echo. + echo [X] ûÓÐÕÒµ½ go ÃüÁî¡£ + echo. + echo ÔõôÐÞ£º + echo 1. µ½ https://go.dev/dl/ ÏÂÔØ Go ²¢°²×° + echo 2. ×°Íê¹ØµôÕâ¸ö´°¿Ú£¬ÖØÐÂË«»÷±¾½Å±¾ + echo ^(×°Íê±ØÐëÖØ¿ª´°¿Ú£¬·ñÔò¶Á²»µ½Ð嵀 PATH^) + echo. + goto :fail +) +for /f "tokens=3" %%v in ('go version') do set GOVER=%%v +echo OK %GOVER% + +rem ±¾»ú Go ¿ÉÄܵÍÓÚ Wails ÒªÇóµÄ°æ±¾£¬¿¿ GOTOOLCHAIN ×Ô¶¯ÏÂÔØ²¹Æë¡£ +rem ÕâÊÇ Go ¹Ù·½»úÖÆ£¬µÚÒ»´Î¹¹½¨»áÁªÍøÀ­¹¤¾ßÁ´£¬ÊôÓÚÕý³£ÏÖÏó¡£ +echo Ìáʾ£ºgo.mod ÒªÇóµÄ°æ±¾¿ÉÄܸßÓÚ±¾»ú Go£¬ +echo Go »á×Ô¶¯ÏÂÔØ¶ÔÓ¦¹¤¾ßÁ´£¬µÚÒ»´ÎÐèÒªÁªÍø¡£ + +rem ---------- ¼ì²é 2£ºNode ---------- +echo [2/5] ¼ì²é Node.js ... +where node >nul 2>nul +if errorlevel 1 ( + echo. + echo [X] ûÓÐÕÒµ½ node ÃüÁî¡£ + echo. + echo ÔõôÐÞ£º + echo 1. µ½ https://nodejs.org/ ÏÂÔØ LTS °æ±¾²¢°²×° + echo 2. ×°Íê¹ØµôÕâ¸ö´°¿Ú£¬ÖØÐÂË«»÷±¾½Å±¾ + echo. + goto :fail +) +for /f %%v in ('node --version') do set NODEVER=%%v +echo OK %NODEVER% + +rem ---------- ¼ì²é 3£ºWails CLI ---------- +echo [3/5] ¼ì²é Wails ÃüÁîÐй¤¾ß ... +set "WAILS=" +where wails >nul 2>nul +if not errorlevel 1 set "WAILS=wails" + +rem where ÕÒ²»µ½Ê±£¬ÔÙÈ¥ Go µÄĬÈϰ²×°Ä¿Â¼ÕÒÒ»´Î¡£ +rem ºÜ¶àÈË×°Íê Go ¹¤¾ßû°Ñ %GOPATH%\bin ¼Ó½ø PATH£¬ÕâÀﶵס¡£ +if not defined WAILS ( + for /f "delims=" %%p in ('go env GOPATH') do ( + if exist "%%p\bin\wails.exe" set "WAILS=%%p\bin\wails.exe" + ) +) + +if not defined WAILS ( + echo. + echo [X] ûÓÐÕÒµ½ wails ÃüÁî¡£ + echo. + echo ÔõôÐÞ£ºÔÚÕâ¸ö´°¿ÚÀïÖ´ÐÐÏÂÃæÕâÌõÃüÁװÍêÔÙÖØÐÂË«»÷±¾½Å±¾ + echo. + echo go install github.com/wailsapp/wails/v2/cmd/wails@latest + echo. + echo ×¢ÒâҪװ v2£¬²»Òª×° v3¡£±¾ÏîÄ¿ÓõÄÊÇ Wails v2 Îȶ¨°æ¡£ + echo. + goto :fail +) +echo OK ÕÒµ½ wails + +rem ---------- ¼ì²é 4£ºÅäÖÃÎļþ ---------- +echo [4/5] ¼ì²éÅäÖÃÎļþ ... +if not exist "config.yaml" ( + echo config.yaml ²»´æÔÚ£¬´ÓÄ£°å¸´ÖÆÒ»·Ý ... + if exist "config.example.yaml" ( + copy /y "config.example.yaml" "config.yaml" >nul + echo ÒÑÉú³É config.yaml + echo. + echo ×¢Ò⣺ÀïÃæµÄÕ˺ÅÃÜÂ뻹ÊÇÄ£°åÀïµÄռλֵ¡£ + echo ³ÌÐòÆô¶¯ºóµ½¡¸²ÎÊýÉèÖá¹Ò³ÌîÕæÊµÕ˺ţ¬ + echo »òÕßÖ±½ÓÓüÇʱ¾±à¼­ config.yaml¡£ + echo. + ) else ( + echo ûÓÐ config.example.yaml£¬Ìø¹ý¡£ + echo ³ÌÐò»áÓÃÄÚÖÃĬÈÏÖµÆô¶¯£¬µ½¡¸²ÎÊýÉèÖá¹Ò³Ìî¼´¿É¡£ + ) +) else ( + echo OK config.yaml ÒÑ´æÔÚ +) + +rem ---------- ¼ì²é 5£ºÇ°¶ËÒÀÀµ ---------- +echo [5/5] ¼ì²éǰ¶ËÒÀÀµ ... +if not exist "frontend\node_modules" ( + echo node_modules ²»´æÔÚ£¬¿ªÊ¼°²×°£¬µÚÒ»´ÎÒª¼¸·ÖÖÓ ... + pushd frontend + call npm install + if errorlevel 1 ( + popd + echo. + echo [X] npm install ʧ°Ü¡£ + echo. + echo ÔõôÐÞ£º + echo 1. È·ÈÏÄÜÉÏÍø + echo 2. ¹«Ë¾ÍøÂçÊÜÏÞʱ»»¸ö¾µÏñÔ´ÔÙÊÔ£º + echo npm config set registry https://registry.npmmirror.com + echo 3. »¹²»ÐоÍɾµô frontend\node_modules ºÍ + echo frontend\package-lock.json ÔÙÅÜÒ»´Î + echo. + goto :fail + ) + popd + echo ÒÀÀµ°²×°Íê³É +) else ( + echo OK ÒÀÀµÒѰ²×° +) + +rem ---------- Æô¶¯ ---------- +echo. +echo ============================================================ +echo Ò»ÇоÍÐ÷£¬ÕýÔÚÆô¶¯¿ª·¢Ä£Ê½ ... +echo. +echo ´°¿Ú´ò¿ªºó£º +echo - ¸Ä frontend\src ϵÄÎļþ£¬½çÃæ»á×Ô¶¯Ë¢Ð +echo - ¸Ä .go Îļþ£¬³ÌÐò»á×Ô¶¯ÖØÐ±àÒë²¢ÖØÆô +echo - °´ Ctrl+C »ò¹ØµôÕâ¸öºÚ´°¿Ú¼´¿ÉÍ£Ö¹ +echo. +echo µÚÒ»´ÎÆô¶¯Òª±àÒ룬¿ÉÄܵÈÊ®¼¸Ã룬ÊôÓÚÕý³£¡£ +echo ============================================================ +echo. + +"%WAILS%" dev +set RESULT=%errorlevel% + +if not "%RESULT%"=="0" ( + echo. + echo [X] ¿ª·¢Ä£Ê½Òì³£Í˳ö£¬´íÎóÂë %RESULT% + echo. + echo ³£¼ûÔ­Òò£º + echo - Go ´úÂëÓбàÒë´íÎó£ºÍùÉÏ·­£¬ÕÒºìÉ«µÄ±¨´íÐÐ + echo - ¶Ë¿Ú±»Õ¼Ó㺹صô֮ǰûÍ˸ɾ»µÄ cmsp ´°¿ÚÔÙÊÔ + echo - ÒÀÀµÃ»ÏÂÈ«£ºÖ´ÐÐ go mod download ºóÖØÊÔ + echo. + goto :fail +) + +echo. +echo ¿ª·¢Ä£Ê½ÒÑÍ˳ö¡£ +goto :done + +:fail +echo. +echo ============================================================ +echo Æô¶¯Ê§°Ü¡£ÉÏÃæÐ´ÁËÔõôÐÞ£¬ÕÕ×Å×öͨ³£¾ÍºÃ¡£ +echo ½â¾ö²»Á˾ͰÑÕâ¸ö´°¿Ú½ØÍ¼·¢¸øÎ¬»¤Õß¡£ +echo ============================================================ +echo. +pause +exit /b 1 + +:done +echo. +pause +exit /b 0