# Gitea 릴리즈 작업 가이드

> ShiftRing 프로젝트 Gitea 릴리즈 자동화 문서
> 저장소: https://git.webpluss.net/sanjeok77/ShiftRing

---

## 🔐 인증 정보

**Personal Access Token (PAT)**
- 위치: `.env.local` 파일
- 형식: `e3b515eaa0a6683c921ca3bf718e281ed30a6075`
- 사용자: `sanjeok77`

**인증 헤더**
```bash
-u "sanjeok77:TOKEN"
```

---

## 📋 릴리즈 생성 절차

### 1. 버전 업데이트 (3곳)

#### 1.1 `app/build.gradle.kts` - 앱 날부 버전
```kotlin
defaultConfig {
    versionCode = 1125        // ← 이전: 1124
    versionName = "1.2.5"     // ← 이전: "1.2.4"
}
```

#### 1.2 `version.json` - 서버 버전 정보
```json
{
  "versionCode": 1125,
  "versionName": "1.2.5",
  "apkUrl": "https://git.webpluss.net/attachments/{UUID}",
  "changelog": "v1.2.5: 변경사항 요약",
  "forceUpdate": false
}
```

#### 1.3 Git 태그 및 릴리즈
- 태그: `v1.2.5`
- 브랜치: `dev` (개발) → `main` (배포)

---

### 2. 릴리즈 생성 (API)

**엔드포인트**
```bash
POST https://git.webpluss.net/api/v1/repos/sanjeok77/ShiftRing/releases
```

**요청 예시**
```bash
curl -X POST \
  -H "Content-Type: application/json" \
  -u "sanjeok77:TOKEN" \
  "https://git.webpluss.net/api/v1/repos/sanjeok77/ShiftRing/releases" \
  -d '{
    "tag_name": "v1.2.5",
    "name": "v1.2.5 - 릴리즈 제목",
    "body": "## 변경사항\n\n- 기능1\n- 기능2",
    "prerelease": false,
    "target_commitish": "dev"
  }'
```

**응답 예시**
```json
{
  "id": 30,
  "tag_name": "v1.2.5",
  "upload_url": "https://git.webpluss.net/api/v1/repos/sanjeok77/ShiftRing/releases/30/assets"
}
```

---

### 3. APK 빌드

**릴리즈 빌드**
```bash
./gradlew :app:assembleRelease
```

**출력 경로**
```
app/build/outputs/apk/release/app-release.apk
```

**서명 설정** (`keystore.properties`)
```properties
storePassword=비밀번호
keyAlias=별칭
keyPassword=비밀번호
storeFile=../release.jks
```

---

### 4. APK 업로드 (API)

**엔드포인트**
```bash
POST https://git.webpluss.net/api/v1/repos/sanjeok77/ShiftRing/releases/{release_id}/assets
```

**요청 예시**
```bash
curl -X POST \
  -u "sanjeok77:TOKEN" \
  -H "Content-Type: multipart/form-data" \
  -F "attachment=@app/build/outputs/apk/release/app-release.apk" \
  "https://git.webpluss.net/api/v1/repos/sanjeok77/ShiftRing/releases/30/assets?name=app.apk"
```

**응답 예시**
```json
{
  "id": 37,
  "name": "app.apk",
  "size": 5236988,
  "browser_download_url": "https://git.webpluss.net/attachments/b8f53c11-743f-416c-87ae-bd478c781abf"
}
```

---

### 5. version.json 업데이트

**APK URL 업데이트**
```json
{
  "apkUrl": "https://git.webpluss.net/attachments/{UUID}"
}
```

**주의**: `releases/download/v1.2.5/app.apk` 형식이 아닌 `attachments/{UUID}` 형식 사용

---

## 🔧 유틸리티 명령어

### 릴리즈 조회
```bash
curl -s -u "sanjeok77:TOKEN" \
  "https://git.webpluss.net/api/v1/repos/sanjeok77/ShiftRing/releases" | jq '.[].tag_name'
```

### 특정 릴리즈 조회
```bash
curl -s -u "sanjeok77:TOKEN" \
  "https://git.webpluss.net/api/v1/repos/sanjeok77/ShiftRing/releases/30"
```

### 첨부파일 삭제
```bash
curl -s -u "sanjeok77:TOKEN" \
  -X DELETE \
  "https://git.webpluss.net/api/v1/repos/sanjeok77/ShiftRing/releases/30/assets/{asset_id}"
```

---

## ⚠️ 주의사항

1. **버전 일치**: `build.gradle.kts`, `version.json`, Git 태그 3곳 모두 동일 버전 사용
2. **APK 파일명**: 반드시 `app.apk`로 업로드 (클리어 이름 지정)
3. **UUID**: 업로드 후 반환된 UUID를 `version.json`에 반영
4. **브랜치**: 
   - 개발: `dev` 브랜치에 커밋
   - 배포: `main` 브랜치에 cherry-pick

---

## 📁 관련 파일

| 파일 | 설명 |
|------|------|
| `app/build.gradle.kts` | 앱 날부 버전 설정 |
| `version.json` | 서버 버전 정보 |
| `keystore.properties` | 서명 키 설정 |
| `release.jks` | 서명 키스토어 |
| `.env.local` | API 토큰 저장 |

---

## 📝 변경 이력

| 날짜 | 버전 | 작업 |
|------|------|------|
| 2026-02-28 | v1.2.5 | 알람 시스템 단순화 릴리즈 |
| 2026-02-28 | v1.2.4 | 버그 수정 릴리즈 |

---

## 🔗 참고 링크

- 릴리즈 페이지: https://git.webpluss.net/sanjeok77/ShiftRing/releases
- API 문서: https://git.webpluss.net/api/swagger
- Swagger UI: https://git.webpluss.net/api/swagger#/repository/repoCreateRelease
