For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /ko/docs/desktop/updates.md (or send Accept: text/markdown).
자동 업데이트와 릴리스 채널
서명된 업데이트 피드, stable/beta 채널, 함께 제공되는 릴리스 워크플로.
업데이터 키 쌍을 한 번 생성하세요
업데이터는 다운로드한 산출물의 minisign 서명을 검증합니다. Tauri signer로 키 쌍을 생성하고 개인 키는 TAURI_SIGNING_PRIVATE_KEY로, 암호는 TAURI_SIGNING_PRIVATE_KEY_PASSWORD로 시크릿 저장소에 보관하세요 — 저장소에는 절대 두지 마세요. 업데이터 산출물을 만드는 빌드는 각 설치 프로그램 옆에 .sig 사이드카를 내보냅니다. 공개 키는 클라이언트에, 개인 키는 CI에 둡니다.
corepack pnpm --filter @supastack/desktop exec tauri signer generate -w ~/.tauri/product.key빌드 시 업데이터 구성
tauri.conf.json은 endpoints와 pubkey가 비어 있는 sentinel updater 블록을 제공합니다 — 그대로 두세요. 키가 없으면 updater 플러그인이 초기화되지 못합니다. 실제 값은 빌드 시 --config JSON 오버레이나 TAURI_CONFIG 환경 변수를 통해 깊이 병합됩니다. check:release-config는 SUPASTACK_UPDATER_ENDPOINT와 SUPASTACK_UPDATER_PUBKEY가 설정되면 붙여넣을 정확한 오버레이를 출력합니다.
둘 다 설정하거나 둘 다 설정하지 마세요. endpoints만 있는 오버레이는 pubkey를 비워 두므로 확인은 작동하는 것처럼 보이지만 모든 설치가 서명 검증에 실패합니다. 엔드포인트 URL은 {{target}}, {{arch}}, {{current_version}} 플레이스홀더를 담고(버전 슬롯은 필수), 릴리스 채널을 활성화하는 선택적 {{channel}} 경로 세그먼트를 포함합니다.
# check:release-config prints this overlay for tauri build --config:
# {"plugins":{"updater":{"endpoints":["https://releases.example.com/{{channel}}/{{target}}/{{arch}}/{{current_version}}"],"pubkey":"<base64 public key>"}}}
# SUPASTACK_UPDATER_ENDPOINT=
# SUPASTACK_UPDATER_PUBKEY=latest.json 피드 게시
각 엔드포인트는 latest.json 매니페스트로 응답합니다 — version, notes, pub_date와 darwin-aarch64, darwin-x86_64, windows-x86_64, windows-aarch64, linux-x86_64, linux-aarch64를 커버하는 platforms 맵 — 각 항목은 설치 프로그램 url과 그 signature를 짝짓습니다.
release:manifest 스크립트로 만드세요. 번들 디렉터리에서 .app.tar.gz, -setup.exe(.msi보다 우선), .AppImage 산출물을 스캔하고 — 각각 .sig 이웃이 있어야 합니다 — 매니페스트를 쓰거나 병합합니다. 플래그는 --version, --base-url, --platform과 함께 쓰는 --bundle-dir, 실행 간 플랫폼을 누적하는 --merge, --notes, --pub-date, --out을 다룹니다.
corepack pnpm --filter @supastack/desktop release:manifest -- \
--version 1.2.0 \
--base-url https://releases.example.com/stable \
--bundle-dir src-tauri/target/release/bundle \
--platform windows-x86_64 \
--merge latest.jsonstable과 beta 채널
엔드포인트에 {{channel}} 플레이스홀더가 있으면 앱 메뉴에서 Beta Updates 확인란이 활성화되어 피드를 stable과 beta 사이에서 전환합니다. 선택은 앱 구성 옆의 update-channel 파일에 유지되고, SUPASTACK_UPDATE_CHANNEL이 실행마다 재정의합니다 — 인식할 수 없는 값은 경고와 함께 무시됩니다 — 기본값은 stable입니다. 플레이스홀더가 없으면 토글은 비활성 상태를 유지하고 stable 피드만 확인됩니다.
업데이트가 확인되는 시점
시작 시 조용한 백그라운드 확인이 한 번 실행되고 업데이트가 있을 때만 대화 상자를 표시합니다. Check for Updates… 메뉴 항목은 모든 결과를 보고합니다. 확인은 직렬화됩니다 — 동시에 온 두 번째 요청은 버려집니다. 사용 가능한 업데이트는 앱을 다운로드·설치·재시작하는 Install and Restart를 제공하고, 구성되지 않은 빌드는 업데이트가 구성되지 않았다고 응답하며, 실패는 재시도가 아니라 대화 상자로 표시됩니다.
함께 제공되는 릴리스 워크플로
.github/workflows/desktop-release.yml은 desktop-v* 태그나 버전과 채널을 지정한 수동 dispatch에서 매트릭스 — 두 아키텍처의 macOS, Windows, Ubuntu — 를 빌드합니다. 태그에서 매니페스트 버전을 찍고(이를 건너뛴 릴리스는 영원히 자신을 업데이트로 제공합니다), 플랫폼별 매니페스트를 병합하고, latest.json과 모든 설치 프로그램 및 서명을 담은 draft GitHub 릴리스를 만듭니다 — beta 채널은 prerelease로 표시됩니다.
SUPASTACK_APP_URL과 SUPASTACK_UPDATER_ENDPOINT는 저장소 변수로, SUPASTACK_UPDATER_PUBKEY와 서명 개인 키 및 그 암호는 시크릿으로 필요합니다. Apple 서명 자격 증명은 선택적 추가 사항입니다. 전체 런북은 저장소의 docs/desktop-updates.md에 있습니다.
검증 및 문제 해결
빌드를 설치하고, 테스트 피드에 더 새로운 매니페스트를 게시하고, 다음 확인에서 업데이트 대화 상자가 도착하고 앱이 새 버전으로 재시작되는지 확인하세요. 그런 다음 beta로 전환하고 채널 피드 응답이 바뀌는지 확인하세요.