- 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>
58 lines
2.5 KiB
Bash
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"
|