공개: 대안 메신저 결합 공백 항목 추가
This commit is contained in:
parent
1f10db0636
commit
88a78f32bc
6 changed files with 249 additions and 2 deletions
77
ALTERNATIVE_GAP.md
Normal file
77
ALTERNATIVE_GAP.md
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
# Why Existing Alternatives Still Leave A Gap
|
||||
|
||||
KoTalk가 말하는 문제의식은 단순히 “카카오톡 말고 다른 앱도 있다”는 수준이 아닙니다. 실제로 국내에서 대안으로 거론되는 서비스는 여럿 있습니다. 다만 현재 공개적으로 확인되는 자료를 기준으로 보면, 아래 축을 **한 번에** 충족하는 사례는 아직 보이지 않습니다.
|
||||
|
||||
- 한국어 사용자 습관과 국내 업무형 소통에 맞는 제품 표면
|
||||
- 기관·기업이 내부망 또는 자체 인프라에 올릴 수 있는 배포 선택권
|
||||
- 특정 사업자에 묶이지 않는 탈중앙화 또는 벤더 락인 완화 방향
|
||||
- 개인보안과 프라이버시를 전면에 둔 기술적 설계
|
||||
- 오픈소스, 커뮤니티 기여, 운영 설명 책임, 공개 거버넌스 같은 투명성
|
||||
|
||||
이 문서의 요지는 특정 대안을 폄하하는 것이 아닙니다. 오히려 각 대안은 분명한 장점이 있습니다. 문제는 **현재 국내에서 실제로 이동 후보로 거론되는 대안들**과 **보안·자체구축 관점에서 이상형으로 자주 언급되는 대안들**이 서로 다른 축을 잘 풀고 있다는 점입니다. KoTalk는 바로 그 끊어진 축들을 하나의 제품 표면으로 다시 묶으려 합니다.
|
||||
|
||||
## What The Publicly Discussed Alternatives Prove
|
||||
|
||||
2025년 가을 국내 기사 기준으로, 실제 “카카오톡에서 옮겨갈 수 있는 앱”으로 대중에게 가장 먼저 거론된 축은 LINE, NateOn, WhatsApp, Telegram 같은 소비자용 메신저였습니다. 즉, 시장은 이미 “대안 앱을 찾는 움직임” 자체는 보여 주었습니다.[^ytn-alt]
|
||||
|
||||
Telegram은 이 이동 후보 가운데 특히 흥미로운 사례입니다. Telegram 공식 자료는 앱 소스 공개와 reproducible builds를 전면에 둡니다.[^telegram-apps] 동시에 같은 공식 FAQ는 Telegram을 cloud-based messenger로 설명하고, 기술 FAQ에서는 cloud chats의 기본 구조가 client-server encryption이며 end-to-end encryption은 Secret Chats에 해당한다고 구분합니다.[^telegram-cloud][^telegram-tech] 즉, Telegram은 검증 가능성과 사용성 일부에서는 강점을 보이지만, 그것만으로 `자체 구축 + 탈중앙화 + 조직 통제권`까지 해결되지는 않습니다.
|
||||
|
||||
동시에 개인정보, 개인보안, 코드 검증 가능성 같은 축에서는 Signal이 꾸준히 강한 참고점으로 언급됩니다. Signal은 공식 지원 문서에서 기본 E2EE와 클라이언트·서버 소스 공개를 분명히 밝힙니다.[^signal-trust] 다만 같은 공식 문서에서 기존 전화번호와 SMS 또는 통화 기반 등록을 요구한다는 점도 분명히 설명합니다.[^signal-phone]
|
||||
|
||||
반면 자체 구축, 탈중앙화, 개방형 거버넌스, 조직 통제권 같은 축에서는 Matrix가 가장 강한 기준점입니다. Matrix는 공식 소개에서 자신을 “decentralised, secure communications”를 위한 오픈 프로토콜로 규정하고, 재단의 공개 거버넌스 모델을 전면에 둡니다.[^matrix-about] 또한 공식 호스팅 문서는 자체 호스팅, 조직 데이터 통제, 온프레미스 지원을 명시합니다.[^matrix-hosting]
|
||||
|
||||
즉, 현재 공개적으로 보이는 시장은 대략 이렇게 나뉩니다.
|
||||
|
||||
- **이동이 쉬운 소비자용 대안**은 존재한다.
|
||||
- **개인보안과 코드 검증성**을 강하게 보여 주는 대안도 존재한다.
|
||||
- **자체 구축, 탈중앙화, 공개 거버넌스**를 강하게 보여 주는 대안도 존재한다.
|
||||
|
||||
하지만 이 세 묶음이 **한국어 중심의 실제 대중 메신저 표면**에서 한 번에 붙어 있지는 않습니다.
|
||||
|
||||
## The Gap KoTalk Is Explicitly Targeting
|
||||
|
||||
KoTalk가 강조하는 차별점은 “조금 더 예쁜 메신저”가 아닙니다. 아래의 조합을 하나의 제품 경험으로 붙이는 것입니다.
|
||||
|
||||
| Axis | What exists now | Why KoTalk still sees a gap |
|
||||
|---|---|---|
|
||||
| 대중적 이동 가능성 | 국내 기사에서 실제로 라인, 네이트온, 왓츠앱, 텔레그램 같은 대안 이동 흐름이 관측됩니다.[^ytn-alt] | 실제 이동 후보로 거론되는 앱들이 곧바로 `자체 구축 + 공개 거버넌스 + 소스 투명성`까지 함께 제공하는 것은 아닙니다. |
|
||||
| 공개 검증성과 사용성의 절충 | Telegram은 공식적으로 앱 소스 공개와 reproducible builds를 제공하고, 대중적 이동 후보로도 반복 언급됩니다.[^telegram-apps][^ytn-alt] | 그러나 공식 설명 자체가 cloud-based 구조와 cloud chats/secret chats 분리를 전제로 하므로, 기관형 자체구축·탈중앙화 문제까지 한 번에 풀어 주는 해답은 아닙니다.[^telegram-cloud][^telegram-tech] |
|
||||
| 개인보안 | Signal은 기본 E2EE, 소스 공개, 안전번호 검증을 분명히 제시합니다.[^signal-trust] | 그러나 한국어 중심 대중 메신저 전환 표면, 기관용 내부망 배치, 국내 업무 흐름 친화 UX까지 한 번에 해결한다고 보긴 어렵습니다. |
|
||||
| 조직 통제권 | Matrix는 탈중앙화, 자체 호스팅, 온프레미스, 공개 거버넌스를 강하게 제공합니다.[^matrix-about][^matrix-hosting] | 하지만 현재 국내 대중이 “카톡 대안”으로 바로 이동하는 소비자용 표면과는 거리가 있습니다. |
|
||||
| 투명성 | Signal, Matrix는 각각 소스 공개나 공개 거버넌스 측면에서 강점이 있습니다.[^signal-trust][^matrix-about] | 반대로 국내에서 쉽게 떠올리는 대중 메신저 대안은 이 투명성 축을 전면 가치로 제시하지 않는 경우가 많습니다. |
|
||||
|
||||
## The Claim, Stated Carefully
|
||||
|
||||
KoTalk는 이 점을 분명히 말합니다.
|
||||
|
||||
> **현재 국내에서 대안으로 공개적으로 거론되는 서비스들과, 보안·자체구축 관점에서 이상형으로 참조되는 서비스들을 함께 놓고 보더라도, `한국어 중심 UX + 개인보안 + 내부망/자체구축 + 탈중앙화/락인 완화 + 커뮤니티 기반 투명성`을 한 번에 충족하는 사례는 공개 자료 기준으로 확인되지 않았습니다.**
|
||||
|
||||
이 문장은 시장 전체를 영원히 단정하는 선언이 아닙니다. 다만 **현재 공개적으로 확인 가능한 자료와 국내 대중 이동 담론**을 놓고 보면, KoTalk가 겨냥하는 결합점이 여전히 비어 있다는 뜻입니다.
|
||||
|
||||
## Why This Matters
|
||||
|
||||
이 차이는 단순한 포지셔닝 문구가 아니라 제품 방향에 직접 연결됩니다.
|
||||
|
||||
- 사내/기관 보안: 외부 SaaS에만 의존하지 않고 내부망·자체 인프라 선택권을 열어야 합니다.
|
||||
- 개인보안: 대화 상대, 장치, 세션, 전송 실패, 재연결, 검증 가능한 암호화 흐름을 기본값으로 다뤄야 합니다.
|
||||
- 투명성: 기능보다 먼저 정책·상태·데이터 경계를 설명할 수 있어야 합니다.
|
||||
- 커뮤니티성: 폐쇄적 단일 결정 구조보다 공개 저장소, 이슈, 릴리즈, 문서, 피드백 반영 기록이 남아야 합니다.
|
||||
|
||||
KoTalk는 이 네 가지를 보조 가치가 아니라 **핵심 가치**로 둡니다.
|
||||
|
||||
## Read Next
|
||||
|
||||
- 배경 맥락: [BACKGROUND.md](BACKGROUND.md)
|
||||
- 현재 상태: [PROJECT_STATUS.md](PROJECT_STATUS.md)
|
||||
- 신뢰 표면: [TRUST_CENTER.md](TRUST_CENTER.md)
|
||||
- 배포 모드: [DEPLOYMENT_MODES.md](DEPLOYMENT_MODES.md)
|
||||
- 마스터 플랜: [문서/README.md](문서/README.md)
|
||||
|
||||
[^ytn-alt]: YTN, `["나 간다?"...급기야 카톡 탈출 움직임](https://www.ytn.co.kr/_ln/0103_202509301503327210_001)` (2025-09-30). 기사에는 LINE, NateOn, WhatsApp, Telegram 등이 실제 대체 메신저 후보로 급부상한 흐름이 정리돼 있습니다.
|
||||
[^telegram-apps]: Telegram, [`Telegram Applications`](https://telegram.org/apps?setln=be). Telegram은 앱 소스 공개와 reproducible builds를 공식적으로 설명합니다.
|
||||
[^telegram-cloud]: Telegram, [`Telegram Messenger`](https://telegram.org/help/settings). Telegram은 자신을 cloud-based mobile and desktop messaging app으로 설명합니다.
|
||||
[^telegram-tech]: Telegram, [`FAQ for the Technically Inclined`](https://core.telegram.org/techfaq). Telegram은 cloud chats의 client-server encryption과 Secret Chats의 end-to-end encryption을 구분해 설명합니다.
|
||||
[^signal-trust]: Signal Support, [`Is it private? Can I trust it?`](https://support.signal.org/hc/en-us/articles/360007320391-Is-it-private-Can-I-trust-it). Signal은 기본 E2EE와 클라이언트/서버 소스 공개를 공식적으로 설명합니다.
|
||||
[^signal-phone]: Signal Support, [`Register a phone number`](https://support.signal.org/hc/en-us/articles/360007318691-Register-a-phone-number). Signal은 기존 전화번호와 SMS/통화 기반 등록을 요구한다고 설명합니다.
|
||||
[^matrix-about]: Matrix.org Foundation, [`About Matrix`](https://matrix.org/foundation/about/). Matrix는 자신을 분산형 보안 통신 오픈 프로토콜로 소개하고, 공개 거버넌스를 명시합니다.
|
||||
[^matrix-hosting]: Matrix.org, [`Hosting`](https://matrix.org/ecosystem/hosting/). Matrix 공식 문서는 자체 호스팅, 조직 데이터 통제, 온프레미스/운영 지원 사례를 제시합니다.
|
||||
|
|
@ -40,6 +40,14 @@ KoTalk가 다시 붙잡으려는 감각은 “메신저가 해야 할 기본기
|
|||
|
||||
즉, 낯선 제품 철학을 강요하기보다 익숙한 대화 문법을 현대적인 방식으로 다시 정돈하는 프로젝트입니다.
|
||||
|
||||
## Why Existing Alternatives Still Leave A Gap
|
||||
|
||||
KoTalk는 “대안 메신저는 이미 많다”는 반론을 피하지 않습니다. 실제로 국내 기사에서 이동 후보로 거론되는 메신저는 존재하고, 개인보안이나 탈중앙화 같은 일부 축을 강하게 풀어낸 프로젝트도 분명히 있습니다.
|
||||
|
||||
다만 현재 공개 자료를 기준으로 보면, `국내 사용자 친화적인 한국어 UX`, `기관·기업용 내부망 또는 자체구축 가능성`, `탈중앙화 또는 락인 완화`, `개인보안`, `오픈소스와 공개 거버넌스에 기반한 운영 투명성`을 한 번에 붙여 보여 주는 사례는 확인되지 않습니다.
|
||||
|
||||
이 점은 기존 배경의 보강 문장이 아니라 KoTalk의 별도 출발점입니다. 요약이 아니라 별도 문제 정의와 비교표는 [ALTERNATIVE_GAP.md](ALTERNATIVE_GAP.md)에 따로 정리했습니다.
|
||||
|
||||
## Tone And Position
|
||||
|
||||
이 프로젝트는 특정 서비스를 공격하거나, “누군가를 대체하기 위해 무너져야 한다”는 식으로 접근하지 않습니다. 오히려 아래와 같은 태도에 가깝습니다.
|
||||
|
|
@ -65,6 +73,7 @@ KoTalk가 다시 붙잡으려는 감각은 “메신저가 해야 할 기본기
|
|||
- YTN, `카톡 검열 논란`: <https://www.ytn.co.kr/_ln/0519_202506171620012347>
|
||||
- YTN, `카카오톡, 오전 한때 6분간 접속·메시지 전송 오류`: <https://www.ytn.co.kr/_ln/0102_202409201022119491>
|
||||
- 연합뉴스, `"최소 6만5천명 정보 유출"…카카오에 과징금 151억 '역대 최대'`: <https://www.yna.co.kr/view/AKR20240523065500530>
|
||||
- 대안 비교와 결합점 설명: [ALTERNATIVE_GAP.md](ALTERNATIVE_GAP.md)
|
||||
- 배경 정리 장문: [문서/14-project-background-and-market-context.md](문서/14-project-background-and-market-context.md)
|
||||
|
||||
## Read More
|
||||
|
|
|
|||
4
FAQ.md
4
FAQ.md
|
|
@ -18,6 +18,10 @@ KoTalk는 한국어 중심의 메시징 경험을 다시 설계하는 오픈소
|
|||
|
||||
아닙니다. 익숙한 구조는 참고하지만, 목표는 더 낮은 피로도와 더 짧은 복귀 흐름입니다. 복제보다 정제에 가깝습니다.
|
||||
|
||||
## 이미 대안 메신저가 많은데 왜 또 필요한가요
|
||||
|
||||
국내에서 실제로 이동 후보로 거론되는 메신저는 이미 있습니다. 다만 공개 자료를 기준으로 보면, `한국어 중심 UX`, `개인보안`, `기관·기업의 내부망 또는 자체 구축`, `탈중앙화 또는 락인 완화`, `오픈소스와 운영 투명성`을 한 번에 묶어 보여 주는 사례는 아직 뚜렷하지 않습니다. 이 프로젝트는 바로 그 결합점을 목표로 둡니다. 자세한 설명은 [ALTERNATIVE_GAP.md](ALTERNATIVE_GAP.md)에 따로 정리했습니다.
|
||||
|
||||
## 지금 실제로 되는 것은 무엇인가요
|
||||
|
||||
- Windows 빌드
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
<a href="PROJECT_STATUS.md">Project Status</a> ·
|
||||
<a href="SHOWCASE.md">Showcase</a> ·
|
||||
<a href="BACKGROUND.md">Background</a> ·
|
||||
<a href="ALTERNATIVE_GAP.md">Alternative Gap</a> ·
|
||||
<a href="branding/BRAND_GUIDE.md">Brand Guide</a> ·
|
||||
<a href="FAQ.md">FAQ</a> ·
|
||||
<a href="RELEASING.md">Releases</a> ·
|
||||
|
|
@ -79,6 +80,12 @@ KoTalk는 단순히 새로운 메신저를 하나 더 만드는 시도가 아닙
|
|||
|
||||
KoTalk는 이 배경을 리스크 문구로 숨기지 않고, 왜 이 프로젝트가 필요한지 설명하는 핵심 맥락으로 다룹니다. 배경 요약은 [BACKGROUND.md](BACKGROUND.md), 더 긴 맥락은 [문서/14-project-background-and-market-context.md](문서/14-project-background-and-market-context.md)에 정리돼 있습니다.
|
||||
|
||||
## Why Current Alternatives Still Leave A Gap
|
||||
|
||||
국내에서 실제로 대안으로 거론되는 메신저는 이미 존재합니다. 하지만 공개적으로 확인되는 자료를 기준으로 보면, `한국어 중심 UX`, `기관·기업의 내부망 또는 자체 인프라 배포`, `탈중앙화 또는 벤더 락인 완화`, `개인보안`, `오픈소스와 커뮤니티 기반 투명성`을 한 번에 묶어 보여 주는 사례는 아직 보이지 않습니다.
|
||||
|
||||
KoTalk는 바로 그 비어 있는 결합점을 목표로 둡니다. 이 항목은 기존 배경 설명의 보조 문장이 아니라, 프로젝트의 별도 문제 정의입니다. 자세한 비교와 근거는 [ALTERNATIVE_GAP.md](ALTERNATIVE_GAP.md)에서 따로 설명합니다.
|
||||
|
||||
## What Makes KoTalk Different
|
||||
|
||||
| Focus | KoTalk approach |
|
||||
|
|
@ -203,6 +210,7 @@ KoTalk의 현재 구조는 지나치게 복잡한 플랫폼보다, 작은 조각
|
|||
|
||||
- [ROADMAP.md](ROADMAP.md)
|
||||
- [BUSINESS_MODEL.md](BUSINESS_MODEL.md)
|
||||
- [ALTERNATIVE_GAP.md](ALTERNATIVE_GAP.md)
|
||||
- [문서/01-product-strategy-and-mvp.md](문서/01-product-strategy-and-mvp.md)
|
||||
- [문서/18-white-material-compact-ui-system.md](문서/18-white-material-compact-ui-system.md)
|
||||
- [문서/22-work-communication-ux-playbook.md](문서/22-work-communication-ux-playbook.md)
|
||||
|
|
|
|||
|
|
@ -94,6 +94,7 @@ fi
|
|||
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
release_root="$repo_root/release-assets/releases/$version"
|
||||
latest_root="$repo_root/release-assets/latest"
|
||||
download_root="$repo_root/release-assets/root"
|
||||
template_path="$repo_root/release-assets/templates/RELEASE_NOTES.ko.md"
|
||||
download_base_url="${DOWNLOAD_BASE_URL:-https://download-vstalk.phy.kr}"
|
||||
release_base_url="${RELEASE_BASE_URL:-}"
|
||||
|
|
@ -131,8 +132,8 @@ if [[ -e "$release_root" && "$force" != "true" ]]; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "$release_root" "$latest_root"
|
||||
mkdir -p "$release_root/screenshots" "$latest_root/screenshots"
|
||||
rm -rf "$release_root" "$latest_root" "$download_root"
|
||||
mkdir -p "$release_root/screenshots" "$latest_root/screenshots" "$download_root"
|
||||
|
||||
if [[ -n "$notes_path" ]]; then
|
||||
cp "$notes_path" "$release_root/RELEASE_NOTES.ko.md"
|
||||
|
|
@ -296,6 +297,145 @@ if (( ${#latest_hash_paths[@]} > 0 )); then
|
|||
)
|
||||
fi
|
||||
|
||||
windows_landing_card=""
|
||||
if [[ -n "$windows_zip" ]]; then
|
||||
windows_landing_card="$(cat <<EOF
|
||||
<a class="card" href="/windows/latest">
|
||||
<span class="eyebrow">Windows</span>
|
||||
<strong>Latest Windows build</strong>
|
||||
<span>ZIP package and SHA256 checksum</span>
|
||||
</a>
|
||||
EOF
|
||||
)"
|
||||
fi
|
||||
|
||||
android_landing_card=""
|
||||
if [[ -n "$android_apk" ]]; then
|
||||
android_landing_card="$(cat <<EOF
|
||||
<a class="card" href="/android/latest">
|
||||
<span class="eyebrow">Android</span>
|
||||
<strong>Latest Android build</strong>
|
||||
<span>Universal APK and SHA256 checksum</span>
|
||||
</a>
|
||||
EOF
|
||||
)"
|
||||
fi
|
||||
|
||||
cat > "$download_root/index.html" <<EOF
|
||||
<!doctype html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>KoTalk Downloads</title>
|
||||
<style>
|
||||
:root {
|
||||
color-scheme: light;
|
||||
--bg: #f7f3ee;
|
||||
--surface: #ffffff;
|
||||
--surface-muted: #f1ebe4;
|
||||
--border: #ddd1c4;
|
||||
--text: #20242b;
|
||||
--text-soft: #5f5a54;
|
||||
--accent: #f05b2b;
|
||||
--accent-soft: #394350;
|
||||
}
|
||||
* { box-sizing: border-box; }
|
||||
body {
|
||||
margin: 0;
|
||||
min-height: 100vh;
|
||||
font-family: Inter, "Segoe UI", system-ui, -apple-system, sans-serif;
|
||||
background: var(--bg);
|
||||
color: var(--text);
|
||||
}
|
||||
main {
|
||||
max-width: 920px;
|
||||
margin: 0 auto;
|
||||
padding: 48px 24px 64px;
|
||||
}
|
||||
.hero {
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--border);
|
||||
padding: 24px;
|
||||
}
|
||||
h1 {
|
||||
margin: 0 0 10px;
|
||||
font-size: 34px;
|
||||
line-height: 1.1;
|
||||
letter-spacing: -0.04em;
|
||||
}
|
||||
p {
|
||||
margin: 0;
|
||||
color: var(--text-soft);
|
||||
line-height: 1.6;
|
||||
}
|
||||
.grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
|
||||
gap: 16px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.card {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--border);
|
||||
padding: 18px;
|
||||
}
|
||||
.card:hover {
|
||||
border-color: var(--accent);
|
||||
}
|
||||
.eyebrow {
|
||||
color: var(--accent-soft);
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.08em;
|
||||
}
|
||||
.meta {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
|
||||
gap: 12px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.meta a {
|
||||
color: var(--accent-soft);
|
||||
}
|
||||
@media (max-width: 640px) {
|
||||
main { padding: 24px 16px 40px; }
|
||||
h1 { font-size: 28px; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<section class="hero">
|
||||
<h1>KoTalk Downloads</h1>
|
||||
<p>KoTalk의 최신 배포 파일과 버전 메타데이터를 제공하는 공식 다운로드 표면입니다.</p>
|
||||
<div class="grid">
|
||||
$windows_landing_card
|
||||
$android_landing_card
|
||||
<a class="card" href="/latest/version.json">
|
||||
<span class="eyebrow">Manifest</span>
|
||||
<strong>Version manifest</strong>
|
||||
<span>Current release metadata and asset URLs</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="meta">
|
||||
<p><strong>Version</strong><br>$version</p>
|
||||
<p><strong>Channel</strong><br>$channel</p>
|
||||
<p><strong>Published</strong><br>$published_at</p>
|
||||
<p><strong>Latest notes</strong><br><a href="/latest/RELEASE_NOTES.ko.md">RELEASE_NOTES.ko.md</a></p>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
|
||||
mapfile -t screenshot_files < <(find "$release_root/screenshots" -maxdepth 1 -type f \( -iname '*.png' -o -iname '*.jpg' -o -iname '*.jpeg' \) | sort)
|
||||
|
||||
screenshots_json="[]"
|
||||
|
|
@ -339,3 +479,4 @@ touch "$latest_root/.gitkeep"
|
|||
echo "Prepared release bundle:"
|
||||
echo " release-assets/releases/$version"
|
||||
echo " release-assets/latest"
|
||||
echo " release-assets/root"
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ fi
|
|||
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
release_root="$repo_root/release-assets/releases/$version"
|
||||
latest_root="$repo_root/release-assets/latest"
|
||||
download_root="$repo_root/release-assets/root"
|
||||
|
||||
if [[ ! -d "$release_root" || ! -d "$latest_root" ]]; then
|
||||
echo "Prepared release bundle not found for version $version" >&2
|
||||
|
|
@ -90,6 +91,13 @@ rsh="${ssh_cmd[*]}"
|
|||
"${ssh_cmd[@]}" "$target_host" "mkdir -p '$target/releases/$version' '$target/latest' '$target/windows/latest' '$target/android/latest'"
|
||||
rsync "${rsync_opts[@]}" -e "$rsh" "$release_root"/ "$target_host:$target/releases/$version/"
|
||||
rsync "${rsync_opts[@]}" -e "$rsh" "$latest_root"/ "$target_host:$target/latest/"
|
||||
if [[ -f "$download_root/index.html" ]]; then
|
||||
root_rsync_opts=(-az)
|
||||
if [[ "$dry_run" == "true" ]]; then
|
||||
root_rsync_opts+=(--dry-run)
|
||||
fi
|
||||
rsync "${root_rsync_opts[@]}" -e "$rsh" "$download_root/index.html" "$target_host:$target/index.html"
|
||||
fi
|
||||
if [[ -d "$latest_root/windows" ]]; then
|
||||
rsync "${rsync_opts[@]}" -e "$rsh" "$latest_root/windows/" "$target_host:$target/windows/latest/"
|
||||
fi
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue