@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