Files
wehub-resource-sync 3e779be6f3
CI / lint (push) Failing after 13m4s
CI / test (3.11, ubuntu-latest) (push) Failing after 2m4s
CI / test (3.13, ubuntu-latest) (push) Successful in 13m30s
CI / test (3.14, ubuntu-latest) (push) Successful in 17m21s
CI / test (3.12, ubuntu-latest) (push) Successful in 17m55s
CI / discover-apps-ps (push) Successful in 1m56s
CI / test (3.9, ubuntu-latest) (push) Successful in 13m17s
CI / test (3.10, ubuntu-latest) (push) Successful in 26m21s
CI / audit (push) Successful in 13m38s
Deploy site / deploy (push) Has been cancelled
CI / test (3.14, ubuntu-24.04-arm) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:32:37 +08:00

98 lines
5.6 KiB
Markdown

<!-- SPDX-License-Identifier: MIT -->
# 릴리즈 테스트 체크리스트
[English](RELEASE_TESTING.md) | **한국어**
자동 테스트가 못 보는 회귀를 릴리즈에 실어 보내지 않기 위한 반복 가능한 점검.
winpodx 버그 대부분은 **게스트측** — Windows VM, FreeRDP/RAIL, OEM 스크립트,
설치 흐름 — 인데 Linux CI 러너의 `pytest`로는 이걸 실행할 수 없습니다. 이
체크리스트는 그 수동·실윈도우 부분을 기억에 의존하지 않고 명시화합니다.
> **핵심 규칙:** 게스트를 건드리는 변경(`config/oem/`, `scripts/windows/`,
> reverse-open shim, `compose` 포트/QEMU args, 에이전트, install.bat, discovery,
> RAIL 실행)은 **머지 전 실제 Windows 게스트로 스모크 필수** — `pytest`만으론
> 부족. CI를 통과하고 실윈도우 스모크 없이 머지돼 깨진 릴리즈가 여러 번
> 있었습니다(media_monitor #613/#638, 4445/`USER_PORTS` 포트 버그 #616).
## 언제 돌리나
- **태그 전** — 기능 체크리스트 해당 섹션 + 최소 1회 fresh 설치 스모크.
- **게스트측 변경 후, 머지 전** — 건드린 표면의 게스트측 스모크 (CI가 못 잡는 걸 잡는 게이트).
- **`install.sh` / `compose` / OEM 변경 후** — 깨끗한 머신의 설치 + 기존 머신 위 업그레이드 둘 다.
## 1. 자동 게이트 (CI — green 필수)
모든 PR에서 돌아감; floor이지 전부가 아님.
- [ ] `lint``ruff check` + `ruff format --check`
- [ ] `test (3.9 … 3.14)` — 지원 Python 전체 `pytest tests/ -v`
- [ ] `audit``pip-audit`
- [ ] `discover-apps-ps` — PowerShell discovery 스크립트 문법
- [ ] `verify_versions``pyproject.toml``packaging/rpm/winpodx.spec` ↔ 설치 메타데이터 일치
로컬 pre-push (CI lint와 동일, 전체 트리 — per-file 아님):
`ruff check src/ tests/ && ruff format --check src/ tests/ && pytest tests/ -q`
## 2. 게스트측 스모크 (실윈도우 — CI 불가)
실제 설치본에서. 각 단계 후 `winpodx doctor`가 빠른 헬스 게이트.
### 설치 / 업데이트
- [ ] **Fresh 설치** 완주: `curl … install.sh | bash -s -- --main``Provisioning complete`
(`[3/4]`/`[4/4]` hang 없음, `Invalid port` 없음, 에이전트 up).
- [ ] **기존 위 업데이트** (`--main` 재실행): compose 재생성, 멈춘 pod recreate+기동,
apply-fixes 실행(`guest_share: ok` 등) — `Skipping` 없음.
- [ ] **`--ref <branch>`** 가 브랜치 **최신** 커밋 설치(`git -C ~/.local/bin/winpodx-app log -1`
실제 갱신 확인 — 재실행이 업데이트했다고 가정 금지).
- [ ] `apply_fixes: N/N fixes OK`(현재 7) + `discovery: N apps` + `reverse_open: ok`.
### 앱 / RDP / RAIL
- [ ] `winpodx app run desktop` — 풀 데스크탑 렌더.
- [ ] `winpodx app run <app>` — RAIL 창 표시(자체 창, 작업표시줄 항목), 로그온/잠금화면 아님,
`Invalid appWindow` 깨짐 없음.
- [ ] `winpodx app refresh``/exec timed out` 없이 완료(느린/콜드 게스트 포함).
- [ ] 다중 앱 창 / 멀티세션(rdprrap) 동작.
### Reverse-open (#616) — KDE 호스트
- [ ] `\\tsclient\home` 아래 호스트 파일 → *연결 프로그램* Linux 앱 → 열림.
- [ ] **게스트-로컬 파일**(Windows 데스크탑 `C:\Users\…`) → *연결 프로그램* Linux 앱 →
호스트에서 열림, 편집 저장됨. (kio-fuse 필요; `winpodx doctor``guest_mount`.)
### 대시보드 / GUI / 트레이
- [ ] 대시보드 Pod / CPU / **RAM** / **Disk** 게이지 전부 숫자 표시(`n/a` 아님).
- [ ] Settings → **UI Language** 인터페이스 전환; **Idle Action**(Pause/Stop) 존재.
- [ ] 트레이 아이콘 표시; 서브메뉴(세션 / USB) KDE Plasma에서 열림.
### 전원 / idle / 장치 / 위장 / debloat
- [ ] Idle **Pause**(기본) suspend + 실행 시 자동 resume.
- [ ] Idle **Stop**(`pod.idle_action=stop`) pod 정지(RAM 해제); 다음 실행 콜드 부팅.
- [ ] `winpodx device` USB attach/detach(live hot-plug).
- [ ] 위장(`pod.disguise_level balanced|max`) 부팅 + RDP 렌더(#557 블랙스크린 없음).
- [ ] `winpodx debloat` + undo가 활성화/업데이트 안 깨고 실행.
- [ ] `winpodx rotate-password` 호스트 config ↔ 게스트 계정 동기 유지.
## 3. 플랫폼 / 채널 매트릭스
분기하는 표면을 spot-check; 매 릴리즈 전수는 불필요하되 주기적으로 돌아가며 커버.
| 축 | 커버 |
|------|-------|
| 설치 채널 | pip/curl · AppImage · AUR · RPM(Fedora/openSUSE/AlmaLinux) · `.deb`(Debian/Ubuntu) |
| 데스크탑 | KDE Plasma · GNOME (주의: reverse-open 게스트-디스크는 KDE/kio-fuse 전용) |
| 디스플레이 | Wayland(XWayland RAIL) · X11 |
| 백엔드 | Podman(기본) · Docker |
## 4. 릴리즈 sign-off
- [ ] `pyproject.toml` + `packaging/rpm/winpodx.spec` + `debian/changelog` 버전 범프
(`python scripts/ci/verify_versions.py` → consistent).
- [ ] `CHANGELOG.md` **및** `docs/CHANGELOG.ko.md`: `[X.Y.Z] - <날짜>` +
**### Contributors** 섹션(모든 외부 리포터/기여자 감사 — `gh issue view <N>` 작성자,
maintainer 제외).
- [ ] `README.md` + `docs/README.ko.md` "active development" 줄 + 요약 갱신.
- [ ] 릴리즈 커밋 CI green.
- [ ] **양쪽 태그** push: `vX.Y.Z`(publish 워크플로: OBS / RHEL / deb / AUR / AppImage)
**및** `REL-vX.Y.Z`(Release 워크플로 → CHANGELOG 섹션에서 GitHub 릴리즈 본문 생성).
- [ ] GitHub 릴리즈 게시 — **Contributors** 섹션 + 전체 자산(wheel, sdist, AppImage, RPM, deb).
- [ ] 수정된 이슈에 "shipped in vX.Y.Z" 코멘트; 리포터 미해결 질문 없는 건 닫기.