KINDNICK b91b229731 v2.2.3: stage updater.exe outside dist/ to survive main.spec --clean
main.spec's --clean flag wipes dist/ at the start of main.exe build,
which deleted dist/updater.exe before it could be embedded as data
(v2.2.2 main.exe shipped without embedded updater).

Fix: release.ps1 copies dist/updater.exe to build/staging/ after
the updater build, and main.spec datas references that staged path.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 16:15:51 +09:00

107 lines
5.1 KiB
Markdown

# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
## [2.2.3] — 2026-04-30
### Fixed
- **`updater.exe` 임베딩 빌드 안정화**
- v2.2.2에서 `main.spec --clean`이 빌드 시작 시 `dist/updater.exe`를 지우면서
임베딩이 누락되던 문제 수정
- `release.ps1``dist/updater.exe``build/staging/`로 복사 후 main.spec이 그걸 참조
- main.exe 사이즈가 다시 ~78MB (updater 내장) 로 정상화
## [2.2.2] — 2026-04-30
### Added
- 윈도우 제목에 현재 버전 표시 — 자동 업데이트 후 신/구 버전 시각적 구분
- 예: `⏰ 퇴근시간 계산기 v2.2.2`
### Test
- 자동 업데이트 더미 릴리스 — 단독 main.exe 배포 + 자가 업데이트 흐름 검증용
## [2.2.1] — 2026-04-30
### Added
- **`updater.exe` 내장 (Single-file 배포)**
- `main.exe` 안에 `updater.exe`를 PyInstaller `datas`로 임베드
- 시작 시 `main.exe`가 같은 폴더에 `updater.exe`를 자동 추출 (없거나 사이즈 다르면 갱신)
- 사용자는 이제 **`main.exe` 하나만 받아도** 자동 업데이트 동작
- 업데이트로 `main.exe`가 교체되면 새 main 실행 시 새 updater.exe도 자동 갱신
- `utils/updater_client.py`: `_MEIPASS` fallback — 권한 부족 등으로 추출 실패 시 TEMP에서 동작
### Changed
- `release.ps1` 빌드 순서: updater 먼저 → main 나중 (datas 의존성)
- `main.spec`: `dist/updater.exe` 존재 시 자동 임베드 (조건부 datas)
### Fixed
- 한국어 릴리스 노트 인코딩 (`Get-Content` ANSI → `[System.IO.File]::ReadAllText` UTF-8)
## [2.2.0] — 2026-04-30
### Added
- **자동 업데이트** — Gitea Releases 기반
- 시작 5초 후 백그라운드 버전 체크 (silent)
- F5 또는 설정 → 데이터 관리 → "업데이트 확인" 버튼으로 수동 트리거
- 새 버전 발견 시 다운로드 → `updater.exe`가 메인 종료 대기 → 파일 교체 → 재시작
- 실패 시 .bak 자동 롤백
- **`core/version.py`** — `__version__` 상수
- **`updater.py` + `updater.spec`** — 독립 자가 업데이터 (Python 표준 라이브러리만, 6MB)
- **`utils/updater_client.py`** — Gitea/GitHub 호환 Releases API 클라이언트
- **`release.ps1`** — 로컬 원클릭 릴리스 스크립트 (Runner 불필요)
- 빌드 + 태그 push + Gitea Release 생성 + 자산 업로드 자동화
- CHANGELOG에서 릴리스 노트 자동 추출
- `--DryRun` / `--SkipTests` 옵션
### Changed
- `Settings → 데이터 관리`에 "버전 표시 + 업데이트 확인" 추가
- `main.spec` datas에 안내 주석 (updater.exe는 별도 배포)
## [2.1.0] — 2026-04-29
### Removed
- **Claude AI 분석 기능** 제거 — 외부 API 의존성 정리
- **로컬 HTTP API** 제거 — 외부 위젯 연동 기능 미사용으로 정리
- **pandas 의존성** 제거 — 코드에서 미사용 (PyInstaller 빌드 사이즈 감소)
### Added
- **첫 잠금 해제 = 출근 옵션** (`clock_in_on_unlock`) — PC를 안 끄는 사용자 케이스 해결
- **WAL 모드 + busy timeout** — 클라우드 동기화 환경에서 다중 PC 동시 접근 안전성↑
- **`MainWindow` 컨트롤러 분리** — `LockMonitor` / `AutoLunchManager` / `NotificationOrchestrator`
- **`update_display` 변화 감지** — 직전 값과 동일 시 `setText` 스킵 (1Hz hot-path 부하↓)
- **언어 변경 시 자동 재시작 제안** — 사용자 동의 후 `os.execv`로 재시작
- **`CHANGELOG.md`** + **GitHub Actions CI** 추가
### Changed
- 5분 throttle 알림 (건강/주간/누적) `_last_5min_bucket` 명시 가드
- `PyInstaller` `excludes``pandas`, `numpy.testing`, `PyQt5.QtWebEngineWidgets` 추가
## [2.0.0] — 2026-04-29
### Added
- **단축근무 지원**: `work_minutes`(분 단위) + 5종 프리셋 (8h / 7h30m / 7h / 6h / 4h)
- **자동 점심시간** 적용 (출근 4h 경과)
- **DB 자동 백업** (`~/.clockout_backups/`, 7일 회전, SQLite backup API)
- **화면 잠금 자동 외출/복귀**
- **공휴일 자동 등록** (`holidays` 패키지, 음력 명절 포함)
- **시스템 트레이 완전 통합** (점심/외출/통계/캘린더/도움말)
- **미니 위젯** (Always-on-top, 드래그 가능)
- **matplotlib 차트** (일별/요일별 근무시간)
- **건강·주간·누적 알림** (3종 추가)
- **i18n 인프라** (한국어/English, 28 카테고리, HelpView ko/en HTML)
- **설정 키 상수 모듈** (`core/settings_keys.py`)
- **DB 경로 override** (클라우드 동기화 폴더 지정 가능)
- **앱 단축키 7종** (Ctrl+O/L/D/B, F1, Ctrl+R, Ctrl+,)
- **사용 설명 가이드** (HelpView, 6 탭)
- **48 통합 시나리오** + 5 i18n GUI + 8 widget smoke 테스트
### Fixed
- **+29h remaining time bug** — `break_minutes`에서 overtime 차감하던 로직 수정
- **annual_leave_total / annual_leave_days 키 불일치** — 양방향 자동 동기화
## [1.0.0] — 2026-01-09
- 최초 릴리스: 자동 출퇴근 / 점심 관리 / 30분 단위 연장근무 적립 / 캘린더 / 통계