#!/bin/sh

# ================================================================= #
# SMART INSTALLER: ACT_RUNNER + OPENRC + SYSTEM LABELS (ALPINE)
# ================================================================= #

set -e

# --- Проверка, что это Alpine Linux ---
if [ ! -f /sbin/openrc-run ]; then
    echo "Ошибка: Этот скрипт предназначен только для Alpine Linux (OpenRC)"
    exit 1
fi

# --- Конфигурация ---
WORK_DIR="/opt/act_runner"
EXE_URL="https://git.dadehard.ru/kalugin66/act_runner/raw/branch/main/act_runner-0.4.0-linux-amd64"
INSTANCE_URL="https://git.dadehard.ru/"
TOKEN="UzVNobPFBJe8ZoQXwu5ZamfgqCpTJZGR3LDVnX7N"
SERVICE_NAME="act_runner"
DEFAULT_LABEL="sber"

# --- 1. Установка зависимостей ---
echo "--- Проверка зависимостей ---"
apk add --no-cache wget

# --- 2. Сбор системной информации ---
HOSTNAME=$(hostname)
ARCH="linux-amd64"
MEM_TOTAL_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')
MEM_GB=$(( MEM_TOTAL_KB / 1024 / 1024 ))
MEM_LABEL="${MEM_GB}GB_RAM"

FULL_LABELS="$DEFAULT_LABEL:host,linux-amd64:host,self-hosted:host,$HOSTNAME:host,$ARCH:host,$MEM_LABEL:host"

echo "--- Данные системы: ПК=$HOSTNAME, ОЗУ=$MEM_LABEL, Метка=$DEFAULT_LABEL ---"

# --- 3. Подготовка окружения ---
if [ ! -d "$WORK_DIR" ]; then
   mkdir -p "$WORK_DIR"
fi
cd "$WORK_DIR"

# --- 4. Остановка и удаление старой службы (если есть) ---
echo "--- Шаг 1: Очистка ---"
if [ -f "/etc/init.d/${SERVICE_NAME}" ]; then
   rc-service "$SERVICE_NAME" stop 2>/dev/null || true
   rc-update del "$SERVICE_NAME" 2>/dev/null || true
   rm -f "/etc/init.d/${SERVICE_NAME}"
fi

# --- 5. Загрузка бинарного файла ---
echo "--- Шаг 2: Загрузка act_runner ---"
if [ ! -f "$WORK_DIR/act_runner" ]; then
     wget -q --show-progress -O act_runner "$EXE_URL"
     chmod +x act_runner
fi

# --- 6. Создание конфигурационного файла config.yaml ---
echo "--- Шаг 3: Формирование конфига ---"
 tee "$WORK_DIR/config.yaml" > /dev/null <<EOF
log:
  level: info
runner:
  file: .runner
  capacity: 1
  labels:
    - "${DEFAULT_LABEL}:host"
    - "linux-amd64:host"
    - "self-hosted:host"
    - "${HOSTNAME}:host"
    - "${ARCH}:host"
    - "${MEM_LABEL}:host"
container:
  force_pull: false
host:
  workdir: ""
EOF

# --- 7. Регистрация раннера (если ещё не зарегистрирован) ---
echo "--- Шаг 4: Авторизация в Gitea ---"
if [ ! -f "$WORK_DIR/.runner" ]; then
    echo "Регистрация нового раннера..."
     ./act_runner register \
        --instance "$INSTANCE_URL" \
        --token "$TOKEN" \
        --no-interactive \
        --name "$HOSTNAME" \
        --labels "$FULL_LABELS"
fi

# --- 8. Создание OpenRC init-скрипта ---
echo "--- Шаг 5: Установка службы OpenRC ---"
 tee "/etc/init.d/${SERVICE_NAME}" > /dev/null <<EOF
#!/sbin/openrc-run

description="Gitea Act Runner"
command="${WORK_DIR}/act_runner"
command_args="daemon --config ${WORK_DIR}/config.yaml"
command_user="root"
command_background=true
pidfile="/run/\${RC_SVCNAME}.pid"

depend() {
    need net
}
EOF

chmod +x "/etc/init.d/${SERVICE_NAME}"

# --- 9. Добавление в автозагрузку и запуск ---
echo "--- Шаг 6: Запуск ---"
rc-update add "$SERVICE_NAME" default
rc-service "$SERVICE_NAME" start

# --- 10. Проверка статуса ---
sleep 2
if rc-service "$SERVICE_NAME" status; then
    echo "==============================================="
    echo "ГОТОВО! Раннер активен с меткой $DEFAULT_LABEL"
    echo "==============================================="
else
    echo "Ошибка: служба не запустилась. Проверьте журнал: rc-service $SERVICE_NAME status"
    exit 1
fi
