MQL5-Google-Onedrive/scripts/setup_forge_runner.sh

141 lines
4.1 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
# ============================================================================
# MQL5 Forge Runner Setup Script
# ============================================================================
# This script helps set up a Gitea Action runner for MQL5 Forge.
# It downloads the act_runner binary, registers it with the provided token,
# and prepares a systemd service (on Linux).
# ============================================================================
set -euo pipefail
# Color codes
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# Default values
FORGE_URL="https://forge.mql5.io"
RUNNER_NAME="mql5-forge-runner"
DEFAULT_TOKEN=""
log_info() { echo -e "${CYAN}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
print_header() {
echo "============================================================"
echo " MQL5 Forge Action Runner Setup"
echo "============================================================"
}
install_dependencies() {
log_info "Installing dependencies (curl, docker)..."
if ! command -v curl &> /dev/null; then
sudo apt-get update && sudo apt-get install -y curl
fi
if ! command -v docker &> /dev/null; then
log_warn "Docker not found. Docker is required to run most Gitea Actions."
log_info "Installing Docker..."
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
log_warn "You may need to log out and back in for docker group changes to take effect."
fi
}
download_runner() {
log_info "Downloading act_runner..."
# Get latest version for Linux amd64
# For simplicity, we use a specific known good version or try to find latest.
# Architecture check
ARCH=$(uname -m)
case $ARCH in
x86_64) BIN_ARCH="amd64" ;;
aarch64) BIN_ARCH="arm64" ;;
*) log_error "Unsupported architecture: $ARCH"; exit 1 ;;
esac
VERSION="v0.2.10" # Example version
URL="https://gitea.com/gitea/act_runner/releases/download/${VERSION}/act_runner-${VERSION#v}-linux-${BIN_ARCH}"
curl -L "$URL" -o act_runner
chmod +x act_runner
log_success "act_runner downloaded."
}
register_runner() {
local token=${1:-$DEFAULT_TOKEN}
if [[ -z "$token" ]]; then
echo -n "Enter your Forge Runner Registration Token: "
read token
fi
if [[ -f ".runner" ]]; then
log_warn "A runner is already registered (.runner file exists)."
echo -n "Do you want to re-register? (y/N): "
read answer
if [[ "$answer" != "y" ]]; then
return
fi
fi
log_info "Registering runner with Forge..."
./act_runner register \
--instance "$FORGE_URL" \
--token "$token" \
--name "$RUNNER_NAME" \
--labels "ubuntu-latest:docker://gitea/proto-messages,ubuntu-22.04:docker://node:16-bullseye,ubuntu-20.04:docker://node:16-bullseye" \
--no-interactive
log_success "Runner registered successfully."
}
setup_systemd() {
log_info "Setting up systemd service..."
WORKING_DIR=$(pwd)
USER_NAME=$(whoami)
SERVICE_FILE="[Unit]
Description=Gitea Actions runner
After=network.target docker.service
[Service]
ExecStart=${WORKING_DIR}/act_runner daemon
WorkingDirectory=${WORKING_DIR}
User=${USER_NAME}
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target"
echo "$SERVICE_FILE" | sudo tee /etc/systemd/system/forge-runner.service > /dev/null
sudo systemctl daemon-reload
log_success "Systemd service 'forge-runner.service' created."
log_info "You can start it with: sudo systemctl start forge-runner"
}
main() {
print_header
TOKEN=${1:-""}
install_dependencies
download_runner
register_runner "$TOKEN"
setup_systemd
echo ""
log_success "Setup complete!"
echo "To start the runner now: ./act_runner daemon"
echo "To start as a service: sudo systemctl enable --now forge-runner"
}
main "$@"