#!/bin/bash set -euo pipefail REPO="DINKIssTyle/DINKIssTyle-IME-macOS" API_URL="https://api.github.com/repos/${REPO}/releases?per_page=100" MIN_MACOS_MAJOR=10 MIN_MACOS_MINOR=15 RELEASE_CHANNEL="${DKST_RELEASE_CHANNEL:-stable}" case "$RELEASE_CHANNEL" in stable|beta) ;; *) echo "오류: 알 수 없는 릴리즈 채널입니다: ${RELEASE_CHANNEL}" exit 1 ;; esac if [ "$(uname -s)" != "Darwin" ]; then echo "오류: 지원되지 않는 운영체제입니다. DKST 한글 입력기는 macOS 10.15 Catalina 이상에서만 설치할 수 있습니다." exit 1 fi if ! MACOS_VERSION="$(sw_vers -productVersion 2>/dev/null)"; then echo "오류: macOS 버전을 확인하지 못했습니다. DKST 한글 입력기는 macOS 10.15 Catalina 이상에서만 설치할 수 있습니다." exit 1 fi MACOS_MAJOR="${MACOS_VERSION%%.*}" MACOS_REMAINDER="${MACOS_VERSION#*.}" MACOS_MINOR="${MACOS_REMAINDER%%.*}" if [ "$MACOS_MAJOR" -lt "$MIN_MACOS_MAJOR" ] \ || { [ "$MACOS_MAJOR" -eq "$MIN_MACOS_MAJOR" ] && [ "$MACOS_MINOR" -lt "$MIN_MACOS_MINOR" ]; }; then echo "오류: 지원되지 않는 macOS 버전입니다. 현재 버전: ${MACOS_VERSION}" echo "DKST 한글 입력기는 macOS 10.15 Catalina 이상에서만 설치할 수 있습니다." exit 1 fi WORK_DIR="$(mktemp -d "${TMPDIR:-/tmp}/dkst-install.XXXXXX")" ARCHIVE_PATH="${WORK_DIR}/source.zip" EXTRACT_DIR="${WORK_DIR}/release" cleanup() { rm -rf "$WORK_DIR" } trap cleanup EXIT echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@%*=--:::::::::::::::::--=+*@@@@@@@@ @@@@@@=:..........::::::..........:+@@@@@@ @@@@%:.:::::.::=++******++=::.:::::.-@@@@@ @@@@=.::::.:=+**************+=:.::::.+@@@@ @@@@-::::.=********************=.::::-@@@@ @@@@::::.+**********************=.:::-@@@@ @@@@-::.=************************=.::-@@@@ @@@@-:::#**************#######****:::-@@@@ @@@@-:::##***********###########**:::-@@@@ @@@@-:::####*******##############*:::-@@@@ @@@@-::.=########################=.::-@@@@ @@@@-::::+######################+::::-@@@@ @@@@-:--::=####################=::--:-@@@@ @@@@+:----::=*##############*=::----:+@@@@ @@@@@=:-----::-=+**####**+=-::-----:-@@@@@ @@@@@@+-::----::::::--::::::----::-+@@@@@@ @@@@@@@@#+===-----------------==+#@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" echo "==========================================" echo " DKST 한글 입력기 설치 준비 " echo "==========================================" if [ "$RELEASE_CHANNEL" = "beta" ]; then echo "최신 베타 릴리즈 정보를 확인 중입니다..." else echo "최신 정식 릴리즈 정보를 확인 중입니다..." fi RELEASE_JSON="$(curl -fsSL \ -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ "$API_URL")" RELEASE_INFO="$(printf '%s\n' "$RELEASE_JSON" | awk -v channel="$RELEASE_CHANNEL" ' function reset_release() { tag = "" zip = "" prerelease = "" } function json_value(line, value) { value = line sub(/^[^:]*: *"/, "", value) sub(/",? *$/, "", value) return value } BEGIN { reset_release() } /"tag_name":/ { tag = json_value($0) } /"prerelease":/ { prerelease = $0 sub(/^[^:]*: */, "", prerelease) sub(/,? *$/, "", prerelease) } /"zipball_url":/ { zip = json_value($0) is_beta = (tolower(tag) ~ /beta/) if (channel == "stable" && tag != "" && zip != "" && prerelease == "false" && !is_beta) { print tag print zip exit } if (channel == "beta" && tag != "" && zip != "" && is_beta) { print tag print zip exit } } ')" TAG_NAME="$(printf '%s\n' "$RELEASE_INFO" | sed -n '1p')" SOURCE_ZIP_URL="$(printf '%s\n' "$RELEASE_INFO" | sed -n '2p')" if [ -z "$TAG_NAME" ]; then if [ "$RELEASE_CHANNEL" = "beta" ]; then echo "오류: 설치 가능한 베타 릴리즈 태그를 확인하지 못했습니다." else echo "오류: 설치 가능한 정식 릴리즈 태그를 확인하지 못했습니다." fi exit 1 fi if [ -z "$SOURCE_ZIP_URL" ]; then echo "오류: ${TAG_NAME} 릴리즈의 Source code zip 주소를 확인하지 못했습니다." exit 1 fi echo "대상 릴리즈: ${TAG_NAME}" echo "Source code zip 다운로드 중..." curl -fL "$SOURCE_ZIP_URL" -o "$ARCHIVE_PATH" echo "압축 해제 중..." mkdir -p "$EXTRACT_DIR" ditto -x -k "$ARCHIVE_PATH" "$EXTRACT_DIR" INSTALL_COMMAND="$(find "$EXTRACT_DIR" -type f -name "install.command" -print | head -n 1)" if [ -z "$INSTALL_COMMAND" ]; then echo "오류: 압축 파일 안에서 install.command를 찾지 못했습니다." exit 1 fi chmod +x "$INSTALL_COMMAND" echo "" echo "DKST 한글 입력기 설치 도우미를 실행합니다." echo "" "$INSTALL_COMMAND"