Archive v0.1.0 — 사진/영상 라이브러리 관리 프로그램

Tauri v2 + SolidJS + SQLite + ffmpeg 사이드카로 구현한 크로스플랫폼
사진·영상 관리 앱. 로컬/NAS(SFTP·WebDAV·FTP) 소스, 가상 그리드,
인앱 재생, 태그/이동/삭제/undo, 중복 탐지, 포터블 배포.

- archive-db: SQLite 스키마·마이그레이션·단일 writer 스레드 + FTS5 trigram
- archive-vfs: VFS 4백엔드(local/sftp/ftp/webdav) + 자격증명(키체인/볼트)
- archive-indexer: 스캔·해시·썸네일·중복탐지·태그·파일작업·유지보수
- archive-media: localhost HTTP 미디어 서버(Range) + ffmpeg 스트림 잡
- 프론트: 3-pane UI, justified 가상 그리드, 라이트박스, 중복 검토 패널

Rust 테스트 49개 통과. CI: win x64/arm64 포터블 zip + macOS universal dmg.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
강 한
2026-07-16 22:04:06 +09:00
co-authored by Claude Opus 4.8
commit 394d1b9805
132 changed files with 23468 additions and 0 deletions
+111
View File
@@ -0,0 +1,111 @@
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
CARGO_TERM_COLOR: always
jobs:
# ── Windows x64: 테스트 + 포터블 zip ───────────────────────
windows-x64:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri
- run: npm ci
- name: ffmpeg 사이드카 (x64)
run: pwsh scripts/fetch-ffmpeg.ps1 -Target win64
- name: 코어 크레이트 테스트 (ffmpeg/네트워크 통합 포함)
working-directory: src-tauri
run: cargo test --workspace
- name: Tauri 빌드 (x64)
run: npm run tauri build -- --no-bundle
- name: 포터블 zip 패키징
run: pwsh scripts/package-portable.ps1 -Target x64
- uses: actions/upload-artifact@v4
with:
name: archive-windows-x64-portable
path: dist-portable/*.zip
# ── Windows ARM64: 크로스컴파일 (스파이크 ① 상시 검증) ──────
windows-arm64-cross:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-pc-windows-msvc
- uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri
key: arm64-cross
- run: npm ci
- name: ffmpeg 사이드카 (ARM64)
run: pwsh scripts/fetch-ffmpeg.ps1 -Target winarm64
- name: Tauri 빌드 (ARM64 크로스)
run: npm run tauri build -- --target aarch64-pc-windows-msvc --no-bundle
- name: 포터블 zip 패키징 (ARM64)
run: pwsh scripts/package-portable.ps1 -Target arm64
- uses: actions/upload-artifact@v4
with:
name: archive-windows-arm64-portable
path: dist-portable/*.zip
# ── Windows ARM64 네이티브 러너: 실제 ARM64에서 테스트 실행 ──
windows-arm64-native:
runs-on: windows-11-arm
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri
key: arm64-native
- name: 코어 크레이트 테스트 (ARM64 네이티브)
working-directory: src-tauri
run: cargo test --workspace
# ── macOS: Intel + Apple Silicon ────────────────────────────
macos:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-darwin, x86_64-apple-darwin
- uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri
- run: npm ci
- name: ffmpeg 사이드카 (universal — lipo)
run: pwsh scripts/fetch-ffmpeg-macos.ps1
- name: 코어 크레이트 테스트 (헤드리스)
working-directory: src-tauri
run: cargo test --workspace
# 배포 빌드 시 서명/공증: APPLE_CERTIFICATE 등 시크릿이 있으면 tauri-action이 처리.
# 미서명 빌드는 Gatekeeper에서 우클릭-열기 필요 (README 안내).
- name: Tauri 빌드 (universal .app + dmg)
run: npm run tauri build -- --target universal-apple-darwin
- uses: actions/upload-artifact@v4
with:
name: archive-macos-universal
path: src-tauri/target/universal-apple-darwin/release/bundle/dmg/*.dmg