chore: 프로젝트 공용 도구 초기 커밋

- release.bat: Gitea 릴리즈 자동화 (태그+릴리즈+파일업로드)
- newproject.bat: 새 프로젝트 초기화 (git+템플릿+remote 설정)
- template/: 공용 설정 파일 (.gitignore, .gitattributes, .gitmessage)

파일: release.bat
- git remote에서 Gitea 정보 자동 추출
- 태그 생성, 릴리즈 생성, 파일 업로드 일괄 처리
- 한글 릴리즈 노트 지원 (JSON 파일 방식)

파일: newproject.bat
- 현재 폴더에 git init + 템플릿 복사
- 커밋 메시지 규칙 자동 적용
- Gitea 원격 저장소 연결

파일: template/
- .gitignore: Python/빌드/IDE 제외 규칙
- .gitattributes: LF/CRLF 줄바꿈 관리
- .gitmessage: 한글 커밋 메시지 규칙

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
insulee
2026-02-10 12:46:20 +09:00
commit 70340486ff
5 changed files with 391 additions and 0 deletions

149
release.bat Normal file
View File

@@ -0,0 +1,149 @@
@echo off
chcp 65001 >nul
setlocal EnableDelayedExpansion
REM ============================================================
REM Gitea 릴리즈 스크립트 (글로벌)
REM
REM 어떤 프로젝트 폴더에서든 실행 가능
REM git remote 정보를 자동으로 읽어서 동작합니다
REM
REM 사용법: release [버전] [첨부파일경로]
REM 예시: release v1.0 dist\MyApp.exe
REM release v2.1
REM ============================================================
REM --- git remote에서 Gitea 정보 자동 추출 ---
for /f "tokens=*" %%a in ('git remote get-url origin 2^>nul') do set REMOTE_URL=%%a
if "%REMOTE_URL%"=="" (
echo [오류] git 저장소가 아니거나 remote가 설정되지 않았습니다.
echo git 프로젝트 폴더에서 실행해주세요.
exit /b 1
)
REM --- URL 파싱: http://host:port/owner/repo.git ---
REM .git 제거
set REMOTE_URL=%REMOTE_URL:.git=%
REM 마지막 두 경로에서 owner/repo 추출
for %%a in ("%REMOTE_URL%") do set REPO_NAME=%%~na
for %%a in ("%REMOTE_URL%") do set TEMP_PARENT=%%~dpa
set TEMP_PARENT=%TEMP_PARENT:~0,-1%
for %%a in ("%TEMP_PARENT%") do set OWNER=%%~na
REM base URL 추출 (owner 앞까지)
call set GITEA_URL=%%REMOTE_URL:/!OWNER!/!REPO_NAME!=%%
echo.
echo ============================================================
echo Gitea 릴리즈 스크립트
echo ============================================================
echo 서버 : %GITEA_URL%
echo 소유자: %OWNER%
echo 저장소: %REPO_NAME%
echo ============================================================
REM --- 버전 입력 ---
set VERSION=%~1
if "%VERSION%"=="" (
echo.
set /p VERSION="버전을 입력하세요 (예: v1.0): "
)
REM --- 첨부 파일 ---
set EXE_PATH=%~2
set HAS_FILE=0
if not "%EXE_PATH%"=="" (
if exist "%EXE_PATH%" (
set HAS_FILE=1
for %%F in ("%EXE_PATH%") do set EXE_NAME=%%~nxF
for %%F in ("%EXE_PATH%") do set EXE_SIZE=%%~zF
) else (
echo [경고] 파일을 찾을 수 없습니다: %EXE_PATH%
set /p CONTINUE="파일 없이 릴리즈만 생성할까요? (y/n): "
if /i not "!CONTINUE!"=="y" exit /b 1
)
)
echo.
echo 버전 : %VERSION%
if %HAS_FILE%==1 (
echo 파일 : %EXE_NAME% (%EXE_SIZE% bytes)
) else (
echo 파일 : 없음 (릴리즈만 생성)
)
echo.
REM --- 비밀번호 입력 ---
set /p GITEA_PASS="%OWNER% 계정 비밀번호: "
REM --- 1단계: 태그 생성 & 푸시 ---
echo.
echo [1/4] 태그 %VERSION% 생성 중...
git tag %VERSION% 2>nul
if %errorlevel% neq 0 (
echo 태그 %VERSION%이(가) 이미 존재합니다. 기존 태그를 사용합니다.
)
git push origin %VERSION% 2>nul
if %errorlevel% neq 0 (
echo [오류] 태그 푸시에 실패했습니다. 네트워크를 확인하세요.
exit /b 1
)
echo 태그 푸시 완료.
REM --- 2단계: 릴리즈 생성 (JSON 파일로 전송하여 한글 깨짐 방지) ---
echo [2/4] Gitea 릴리즈 생성 중...
REM 릴리즈 노트 입력 (선택)
set /p RELEASE_NOTE="릴리즈 노트 (Enter로 건너뛰기): "
if "!RELEASE_NOTE!"=="" set RELEASE_NOTE=%REPO_NAME% %VERSION%
REM JSON 파일 생성 (UTF-8)
echo {"tag_name": "%VERSION%", "name": "%VERSION% - %REPO_NAME%", "body": "## %REPO_NAME% %VERSION%\n\n!RELEASE_NOTE!", "draft": false, "prerelease": false}> _release_body.json
curl -s -o _release_resp.json -X POST "%GITEA_URL%/api/v1/repos/%OWNER%/%REPO_NAME%/releases" ^
-u "%OWNER%:%GITEA_PASS%" ^
-H "Content-Type: application/json; charset=utf-8" ^
-d @_release_body.json
REM --- 릴리즈 ID 추출 ---
for /f "tokens=2 delims=:," %%a in ('type _release_resp.json ^| findstr /r "\"id\":"') do (
set RELEASE_ID=%%a
goto :got_id
)
:got_id
set RELEASE_ID=%RELEASE_ID: =%
if "%RELEASE_ID%"=="" (
echo [오류] 릴리즈 생성 실패. 비밀번호 또는 권한을 확인하세요.
type _release_resp.json
del _release_resp.json _http_code.txt 2>nul
exit /b 1
)
echo 릴리즈 생성 완료 (ID: %RELEASE_ID%).
REM --- 3단계: 파일 업로드 ---
if %HAS_FILE%==1 (
echo [3/4] %EXE_NAME% 업로드 중... 잠시 기다려주세요.
curl -s -o _upload_resp.json -X POST "%GITEA_URL%/api/v1/repos/%OWNER%/%REPO_NAME%/releases/%RELEASE_ID%/assets?name=%EXE_NAME%" ^
-u "%OWNER%:%GITEA_PASS%" ^
-H "Content-Type: application/octet-stream" ^
--data-binary "@%EXE_PATH%"
echo 업로드 완료.
) else (
echo [3/4] 첨부 파일 없음. 건너뜁니다.
)
REM --- 4단계: 결과 출력 ---
echo [4/4] 완료!
echo.
echo ============================================================
echo 릴리즈 URL: %GITEA_URL%/%OWNER%/%REPO_NAME%/releases/tag/%VERSION%
echo ============================================================
echo.
REM --- 임시파일 정리 ---
del _release_resp.json _upload_resp.json _release_body.json 2>nul
endlocal