Some checks failed
Windows / verify (push) Has been cancelled
RTX 5050 은 PCIe 패스스루로 이 VM(.9)이 독점하므로 Proxmox 에 Windows VM 을
띄워도 GPU 를 못 준다. 그래서 "Windows 검증에 GPU 가 정말 필요한가"를 실제로
재봤다 — GPU 를 완전히 가린 채 점검기를 돌린 결과, 실패한 건 'GPU 인식' 하나뿐이고
그건 이미 경고 처리라 빌드를 막지 않는다. 나머지(단축키·모니터·오디오 열거·
exe 빌드·기동·오버레이 렌더링)는 전부 통과한다. 즉 GPU 없는 서버 VM 으로 충분하고,
CUDA/VRAM 관련은 GPU 가 물려 있는 .9 에서 이미 검증 중이다.
- tests/fixtures/en_callout_16k.wav (139KB)
MeloTTS 로 만든 4.4초 영어 콜아웃. CI 가 실제 음성으로 검증할 수 있게 커밋.
- windows_smoke.py --pipeline
오디오 파일 -> 음성인식 -> 번역 -> 한국어 자막까지 끝까지 확인한다.
부품이 다 통과해도 이어 붙이면 안 되는 경우를 잡기 위한 것.
CPU + 가장 가벼운 티어로 돌려 GPU 없는 VM 에서도 그대로 된다.
실측: 27초, 'Enemy coming from the left, fall back now.'
-> '적 왼쪽에서 오는, 지금 뒤로 물러서.'
음성인식 결과에 핵심 단어가 있는지, 자막에 한글이 있는지까지 검사한다.
- 워크플로에 해당 단계 추가 (30분 타임아웃, 첫 회만 모델 다운로드)
- docs/WINDOWS-TESTING.md 에 서버 VM 구축 절차
Proxmox qm create 예시와 함께, 빠뜨리면 조용히 실패하는 두 가지를 명시:
(1) --audio0 없으면 오디오 장치가 안 잡혀 WASAPI 점검이 실패
(2) 자동 로그온이 없으면 데스크톱 세션이 없어 GUI/스크린샷이 전부 실패
(러너를 서비스로 돌리면 안 되는 실질적 이유이기도 하다)
검증: pytest 189개 통과, ruff clean, 워크플로 11스텝 파싱 확인(bash 0개),
GPU 숨긴 조건에서 점검기 실행, --pipeline 실제 통과
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
117 lines
4.6 KiB
YAML
117 lines
4.6 KiB
YAML
# Windows 검증 — Gitea Actions
|
|
#
|
|
# main 에 push 하거나 Actions 탭에서 수동 실행하면 Windows 러너가 자동으로
|
|
# 1) 테스트를 돌리고
|
|
# 2) 포터블 exe 를 빌드하고
|
|
# 3) 앱이 실제로 뜨는지 확인한 뒤
|
|
# 4) exe 와 스크린샷을 artifact 로 올립니다.
|
|
#
|
|
# 러너 등록 방법은 docs/WINDOWS-TESTING.md 참고.
|
|
# 러너가 없으면 이 워크플로는 그냥 대기 상태로 남고 아무 일도 하지 않습니다.
|
|
|
|
name: Windows
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
verify:
|
|
runs-on: windows
|
|
timeout-minutes: 60
|
|
|
|
steps:
|
|
# Gitea 는 runs-on 이 어떤 러너 라벨과도 안 맞으면 작업을 실패시키지 않고
|
|
# 기본 ubuntu 컨테이너에서 돌린다. 라벨을 잘못 등록하면 Windows 검증이
|
|
# 조용히 리눅스에서 돌아가 "통과했다"는 착각을 준다. 그래서 먼저 막는다.
|
|
#
|
|
# bash 가 아니라 pwsh 를 쓴다. Windows 에 Git Bash 가 깔려 있어도
|
|
# bash.exe 는 기본 PATH 에 없어서 (Git\cmd 만 등록된다) 첫 단계부터
|
|
# "bash not found" 로 죽는다. 라벨을 잘못 걸어 리눅스 컨테이너로
|
|
# 떨어진 경우에는 pwsh 가 없어서 역시 실패하므로, 어느 쪽이든
|
|
# 조용히 통과하는 일은 없다.
|
|
- name: Windows 에서 돌고 있는지 확인
|
|
shell: pwsh
|
|
run: |
|
|
Write-Host "RUNNER_OS=$env:RUNNER_OS"
|
|
if ($env:RUNNER_OS -ne "Windows") {
|
|
Write-Host "::error::Windows 러너가 아닙니다 ($env:RUNNER_OS)."
|
|
Write-Host "::error::러너를 'windows:host' 라벨로 등록했는지 확인하세요."
|
|
exit 1
|
|
}
|
|
|
|
- name: 소스 받기
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Python 준비
|
|
shell: pwsh
|
|
run: |
|
|
python --version
|
|
python -m venv .venv-ci
|
|
.\.venv-ci\Scripts\python -m pip install --upgrade pip --quiet
|
|
|
|
# torch 없이 설치한다. 포터블 빌드와 같은 조건을 만들어야
|
|
# "포터블에서 1~3티어가 된다"는 주장을 실제로 검증할 수 있다.
|
|
- name: 의존성 설치 (포터블 조건 = torch 없음)
|
|
shell: pwsh
|
|
run: |
|
|
.\.venv-ci\Scripts\python -m pip install -r packaging\requirements-portable.txt
|
|
.\.venv-ci\Scripts\python -m pip install pytest ruff
|
|
.\.venv-ci\Scripts\python -c "import importlib.util; assert importlib.util.find_spec('torch') is None; print('torch 없음 - 포터블 조건 OK')"
|
|
|
|
- name: 테스트
|
|
shell: pwsh
|
|
env:
|
|
PYTHONPATH: src
|
|
run: |
|
|
.\.venv-ci\Scripts\python -m pytest tests -q
|
|
.\.venv-ci\Scripts\python -m ruff check src tests scripts
|
|
|
|
# 여기부터가 리눅스에서 못 하던 것들이다.
|
|
- name: Windows 전용 경로 확인 (오디오 장치·단축키·프로세스 열거)
|
|
shell: pwsh
|
|
env:
|
|
PYTHONPATH: src
|
|
run: .\.venv-ci\Scripts\python packaging\windows_smoke.py
|
|
|
|
# 부품이 다 통과해도 이어 붙이면 안 되는 경우가 있다. 실제 음성 파일을
|
|
# 넣어 한국어 자막이 나오는지 끝까지 확인한다. CPU 로 돌므로 GPU 없는
|
|
# 서버 VM 에서도 그대로 된다. 모델은 처음 한 번만 받고 이후 캐시를 쓴다.
|
|
- name: 전 파이프라인 (오디오 -> 자막)
|
|
shell: pwsh
|
|
timeout-minutes: 30
|
|
env:
|
|
PYTHONPATH: src
|
|
run: .\.venv-ci\Scripts\python packaging\windows_smoke.py --pipeline
|
|
|
|
- name: 프로그램별 캡처 보조 프로그램 빌드
|
|
shell: pwsh
|
|
continue-on-error: true # VS Build Tools 가 없는 러너도 있을 수 있다
|
|
run: |
|
|
cmake -S native\process_loopback -B native\process_loopback\build -A x64
|
|
cmake --build native\process_loopback\build --config Release
|
|
|
|
- name: 포터블 exe 빌드
|
|
shell: pwsh
|
|
run: |
|
|
.\.venv-ci\Scripts\python -m pip install pyinstaller
|
|
.\.venv-ci\Scripts\python -m PyInstaller packaging\livesub.spec --noconfirm
|
|
$exe = Get-Item dist\LiveSub.exe
|
|
"빌드 완료: {0:N1} MB" -f ($exe.Length / 1MB)
|
|
|
|
- name: 빌드된 exe 가 실제로 실행되는지
|
|
shell: pwsh
|
|
run: .\.venv-ci\Scripts\python packaging\windows_smoke.py --exe dist\LiveSub.exe
|
|
|
|
- name: 결과물 업로드
|
|
uses: actions/upload-artifact@v4
|
|
if: always()
|
|
with:
|
|
name: LiveSub-portable
|
|
path: |
|
|
dist/LiveSub.exe
|
|
artifacts/*.png
|
|
artifacts/*.txt
|
|
retention-days: 14
|