mirror of
https://github.com/casjaysdevdocker/gitea
synced 2025-09-17 21:57:48 -04:00
91 lines
2.2 KiB
Bash
Executable File
91 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
# Function to log messages with timestamp
|
|
log() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
|
|
}
|
|
|
|
# Function to cleanup child processes on exit
|
|
cleanup() {
|
|
log "Shutting down runners..."
|
|
kill $(jobs -p) 2>/dev/null || true
|
|
wait
|
|
log "All runners stopped"
|
|
}
|
|
|
|
# Set up signal handling
|
|
trap cleanup SIGTERM SIGINT
|
|
|
|
# Validate required environment variables
|
|
if [ -n "$SERVER_ADDRESS" ]; then
|
|
if ! echo "$SERVER_ADDRESS" | grep -q '://'; then
|
|
SERVER_ADDRESS="http://$SERVER_ADDRESS"
|
|
fi
|
|
else
|
|
SERVER_ADDRESS=http://$HOSTNAME
|
|
fi
|
|
|
|
if [ -z "$SERVER_TOKEN" ]; then
|
|
log "ERROR: SERVER_TOKEN environment variable is required"
|
|
exit 1
|
|
fi
|
|
|
|
RUNNER_LABELS="${RUNNER_LABELS:-ubuntu-latest:docker://node:16-bullseye,ubuntu-22.04:docker://node:16-bullseye}"
|
|
# Determine number of runners to start
|
|
RUNNERS_COUNT=${RUNNERS_ENABLE:-1}
|
|
|
|
# Validate RUNNERS_COUNT is a positive integer
|
|
if ! [[ "$RUNNERS_COUNT" =~ ^[0-9]+$ ]] || [ "$RUNNERS_COUNT" -lt 1 ]; then
|
|
log "WARNING: Invalid RUNNERS_ENABLE value '$RUNNERS_ENABLE', defaulting to 1"
|
|
RUNNERS_COUNT=1
|
|
fi
|
|
|
|
log "Starting $RUNNERS_COUNT act_runner instance(s)"
|
|
log "Server Address: $SERVER_ADDRESS"
|
|
log "Runner Name Prefix: ${RUNNER_NAME_PREFIX:-runner}"
|
|
|
|
# Function to start a single runner
|
|
start_runner() {
|
|
local runner_id=$1
|
|
local runner_name="${RUNNER_NAME_PREFIX:-runner}-${runner_id}"
|
|
local runner_dir="/data/runner-${runner_id}"
|
|
|
|
# Create runner directory
|
|
mkdir -p "$runner_dir"
|
|
cd "$runner_dir"
|
|
|
|
log "Starting runner: $runner_name (ID: $runner_id)"
|
|
|
|
# Register the runner (this creates the .runner file)
|
|
log "Registering runner: $runner_name"
|
|
act_runner register \
|
|
--instance "$SERVER_ADDRESS" \
|
|
--token "$SERVER_TOKEN" \
|
|
--name "$runner_name" \
|
|
--labels "$RUNNER_LABELS" \
|
|
--no-interactive
|
|
|
|
if [ $? -ne 0 ]; then
|
|
log "ERROR: Failed to register runner $runner_name"
|
|
return 1
|
|
fi
|
|
|
|
# Start the daemon
|
|
log "Starting daemon for runner: $runner_name"
|
|
exec act_runner daemon --config .runner
|
|
}
|
|
|
|
# Start runners in background
|
|
for i in $(seq 1 $RUNNERS_COUNT); do
|
|
(start_runner $i) &
|
|
sleep 2 # Small delay between starting runners
|
|
done
|
|
|
|
log "All $RUNNERS_COUNT runners started successfully"
|
|
log "Process IDs: $(jobs -p | tr '\n' ' ')"
|
|
|
|
# Wait for all background processes
|
|
wait
|