# uv_easy

uv를 더 쉽게 사용하기 위한 파이썬 패키지입니다. 버전 관리, 빌드, 배포 과정을 자동화하여 개발 워크플로우를 개선합니다.

## 🚀 주요 기능

- **프로젝트 초기화**: CLI 프로젝트 구조 자동 생성 (click/argparse 지원)
- **자동 버전 관리**: Git 커밋 분석을 통한 Semantic Versioning 자동 증가
- **Git 태그 자동화**: 버전 증가 시 자동으로 Git 태그 생성 및 푸시
- **Changelog 자동 생성**: git-cliff를 통한 자동 changelog 생성
- **빌드 자동화**: 빌드 잔여물 정리 및 패키지 빌드
- **PyPI/TestPyPI 배포**: twine을 통한 안전한 패키지 업로드
- **GitHub Actions 통합**: 자동 배포를 위한 workflow 생성
- **JSON 출력**: CI/CD 친화적인 구조화된 출력

## 📦 설치

```bash
# 프로젝트 디렉토리에서
uv sync
```

## 🛠️ 사용법

### 프로젝트 초기화

#### 새로운 CLI 프로젝트 생성
```bash
# click 사용 (기본값)
uv_easy startproject my_cli

# argparse 사용
uv_easy startproject my_cli --use argparse
```

이 명령어는 다음을 자동으로 생성합니다:
- `<패키지명>/__init__.py` - 패키지 초기화 파일
- `<패키지명>/__main__.py` - 메인 진입점
- `<패키지명>/cli.py` - CLI 구현 (click 또는 argparse)
- `pyproject.toml`에 스크립트 자동 추가
- 기본 `version` 명령어 포함

생성된 프로젝트 사용 예시:
```bash
# 의존성 설치
uv sync

# 버전 확인
my_cli version

# uv_easy로 버전 관리
uv_easy version up --patch
```

### 버전 관리

#### 현재 버전 확인
```bash
uv_easy version show
```

#### 수동 버전 증가
```bash
# 패치 버전 증가 (0.1.0 → 0.1.1)
uv_easy version up --patch

# 마이너 버전 증가 (0.1.0 → 0.2.0)
uv_easy version up --minor

# 메이저 버전 증가 (0.1.0 → 1.0.0)
uv_easy version up --major
```

#### 자동 버전 증가 (Semantic Versioning)
```bash
# Git 커밋을 분석하여 자동으로 버전 증가
uv_easy version up --auto

# Git 태그를 푸시하지 않음
uv_easy version up --auto --no-push
```

### 빌드

#### 기본 빌드 (패치 버전 증가 후 빌드)
```bash
uv_easy build
```

#### 버전 증가 없이 빌드만
```bash
uv_easy build --no-version-up
```

#### 특정 버전 증가 후 빌드
```bash
# 마이너 버전 증가 후 빌드
uv_easy build --minor

# 메이저 버전 증가 후 빌드
uv_easy build --major

# 자동 버전 증가 후 빌드
uv_easy build --auto
```

#### 빌드 후 자동 설치
```bash
uv_easy build --install
```

### Changelog 생성

```bash
# 현재 버전에 대한 changelog 생성
uv_easy changelog

# 특정 태그에 대한 changelog 생성
uv_easy changelog --tag v0.2.1

# 다른 파일명으로 출력
uv_easy changelog --output HISTORY.md
```

### PyPI/TestPyPI 배포

#### PyPI 배포 준비 (URLs 설정)
```bash
uv_easy ready_pypi
```

#### PyPI 업로드
```bash
uv_easy publish
```

#### TestPyPI 업로드
```bash
uv_easy publish --test
```

#### JSON 출력 (CI/CD용)
```bash
uv_easy publish --json
```

### GitHub Actions 설정

#### 기본 workflow 생성
```bash
uv_easy init workflow
```

#### TestPyPI용 workflow 생성
```bash
uv_easy init workflow --test
```

#### GitHub Release 자동화 포함
```bash
uv_easy init workflow --release
```

#### git-cliff 설정 파일 생성
```bash
uv_easy init cliff-config
```

## 🔄 전체 워크플로우

### 개발 중 패치 릴리즈
```bash
# 버그 수정 후
uv_easy build --patch --install
```

### 새로운 기능 추가
```bash
# 기능 추가 후
uv_easy build --minor --install
```

### 메이저 업데이트
```bash
# 호환성을 깨는 변경 후
uv_easy build --major --install
```

### 자동 Semantic Versioning
```bash
# 커밋 메시지에 따라 자동 버전 증가
uv_easy build --auto --install
```

### 완전 자동화된 릴리즈
```bash
# 1. 버전 증가, Git 태그, 빌드, 설치를 한 번에
uv_easy build --auto --install

# 2. Changelog 생성
uv_easy changelog

# 3. PyPI 배포
uv_easy publish
```

## 📋 명령어 옵션

### `uv_easy version up`
- `--major`: 메이저 버전을 증가시킵니다
- `--minor`: 마이너 버전을 증가시킵니다
- `--patch`: 패치 버전을 증가시킵니다
- `--auto`: Git 커밋을 분석하여 자동으로 버전을 증가시킵니다
- `--no-push`: Git 태그를 푸시하지 않습니다

### `uv_easy build`
- `--no-version-up`: 버전을 증가시키지 않고 빌드만 실행합니다
- `--major`: 메이저 버전을 증가시킨 후 빌드합니다
- `--minor`: 마이너 버전을 증가시킨 후 빌드합니다
- `--patch`: 패치 버전을 증가시킨 후 빌드합니다
- `--auto`: Git 커밋을 분석하여 자동으로 버전을 증가시킨 후 빌드합니다
- `--install`: 빌드 후 현재 환경에 패키지를 설치합니다
- `--no-push`: Git 태그를 푸시하지 않습니다

### `uv_easy changelog`
- `--tag`: 특정 태그에 대한 changelog 생성
- `--output`, `-o`: 출력 파일명 지정 (기본: CHANGELOG.md)

### `uv_easy publish`
- `--test`: TestPyPI에 업로드합니다
- `--json`: JSON 형태로 결과를 출력합니다

### `uv_easy startproject`
- `<package_name>`: 생성할 패키지 이름 (필수)
- `--use`: 사용할 CLI 라이브러리 (`click` 또는 `argparse`, 기본값: `click`)

### `uv_easy init workflow`
- `--test`: TestPyPI용 workflow 생성
- `--release`: GitHub Release 자동화 포함

## 🎯 Semantic Versioning 자동 감지

`--auto` 옵션을 사용하면 Git 커밋 메시지를 분석하여 자동으로 버전을 증가시킵니다:

- `feat:` → minor bump
- `fix:` → patch bump
- `breaking change` 또는 `!` 포함 → major bump
- 기타 → patch bump

## 📊 JSON 출력 예시

```json
{
  "version": "0.2.1",
  "repository": "pypi",
  "artifacts": [
    "dist/uv_easy-0.2.1.tar.gz",
    "dist/uv_easy-0.2.1-py3-none-any.whl"
  ]
}
```

## 🔧 요구사항

- Python 3.9 이상
- uv
- pyproject.toml 파일이 있는 프로젝트
- Git 저장소

## 📄 라이선스

이 프로젝트는 MIT 라이선스 하에 배포됩니다.