- 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>
150 lines
4.8 KiB
Batchfile
150 lines
4.8 KiB
Batchfile
@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
|