itsm_ysm/deploy/apk/publish_app_manifest.sh
itms-merge-dev 5e5ccc0ec7 docs+build(itms): CI/CD 정본 문서·APK 게시 자산·모바일 빌드 수정 (v1.0.0 APK 게시)
- docs/CICD_PIPELINE.md 정본(LIVE) + deploy/README.md 가동중 갱신
- deploy/apk/: publish_app_manifest.sh·mobile-app.html(WISE QR)·itms-latest.json
- deploy/nginx: /mobile-app(ITMS 전용)+/downloads/(APK)+매니페스트 서빙 반영
- mobile: EAS 빌드 의존 승격(react-navigation/expo-modules-core/metro)·.easignore·eas appVersionSource

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 19:41:29 +09:00

58 lines
2.5 KiB
Bash

#!/usr/bin/env bash
# ITMS 모바일 앱 배포 매니페스트 publish — APK 산출 후 1회 실행(웹 /mobile-app 자동 최신화).
# · 역할: 서버 APK 옆에 itms-latest.json(버전·다운로드URL·빌드일자·크기·sha256)을 원자적으로 기록.
# /mobile-app 페이지(또는 백엔드 공개 엔드포인트)가 이 파일을 읽어 QR/다운로드를 최신화.
# · 보안: 자격증명·키스토어·EXPO 토큰 미취급. 공개 다운로드 URL만 기록.
# · CAMP deploy/publish_app_manifest.sh 패턴 이식(솔루션=ITMS, 포트/도메인만 상이).
#
# 사용: publish_app_manifest.sh <version> <apk_path> [download_url]
# 예) cp itms-mobile-v1.0.0.apk /opt/itms/downloads/itms.apk
# publish_app_manifest.sh 1.0.0 /opt/itms/downloads/itms.apk https://itms.wise.ai.kr/downloads/itms.apk
set -euo pipefail
VERSION="${1:?usage: publish_app_manifest.sh <version> <apk_path> [download_url]}"
APK_PATH="${2:?usage: publish_app_manifest.sh <version> <apk_path> [download_url]}"
DOWNLOAD_URL="${3:-${ITMS_APP_DOWNLOAD_URL:-https://itms.wise.ai.kr/downloads/itms.apk}}"
MANIFEST="${ITMS_APP_MANIFEST:-/opt/itms/downloads/itms-latest.json}"
APP_NAME="${ITMS_APP_NAME:-ITMS 유지보수관리 모바일 앱}"
PLATFORM="${ITMS_APP_PLATFORM:-ANDROID}"
BUILT_AT="$(date +%Y-%m-%d)"
SIZE_BYTES="0"; SIZE_MB="null"; SHA256="null"
if [ -f "$APK_PATH" ]; then
SIZE_BYTES=$(stat -c%s "$APK_PATH" 2>/dev/null || wc -c < "$APK_PATH")
SIZE_MB=$(awk -v b="$SIZE_BYTES" 'BEGIN { printf "%.1f", b/1048576 }')
HASH=$(sha256sum "$APK_PATH" 2>/dev/null | awk '{print $1}')
[ -n "$HASH" ] && SHA256="\"${HASH}\""
fi
mkdir -p "$(dirname "$MANIFEST")"
TMP="${MANIFEST}.tmp.$$"
cat > "$TMP" <<JSON
{
"appName": "${APP_NAME}",
"version": "${VERSION}",
"platform": "${PLATFORM}",
"apkUrl": "${DOWNLOAD_URL}",
"downloadUrl": "${DOWNLOAD_URL}",
"sizeBytes": ${SIZE_BYTES},
"fileSizeMb": ${SIZE_MB},
"sha256": ${SHA256},
"publishedAt": "${BUILT_AT}",
"builtAt": "${BUILT_AT}",
"notes": null
}
JSON
mv -f "$TMP" "$MANIFEST"
# (선택) /mobile-app 정적 페이지 옆 QR 이미지 생성 — qrencode 설치 시.
if command -v qrencode >/dev/null 2>&1; then
qrencode -o "$(dirname "$MANIFEST")/itms-apk-qr.png" -s 8 "$DOWNLOAD_URL" || true
echo "[publish] QR -> $(dirname "$MANIFEST")/itms-apk-qr.png"
fi
echo "[publish] manifest -> $MANIFEST"
echo "[publish] version=$VERSION platform=$PLATFORM publishedAt=$BUILT_AT sizeBytes=$SIZE_BYTES sizeMb=$SIZE_MB"
echo "[publish] apkUrl=$DOWNLOAD_URL"