forgejo-actions-guide-docker.txt
· 9.7 KiB · Text
Raw
#!/bin/bash
# =============================================================================
# FORGEJO RUNNER - FULL SYSTEM DEPLOYMENT WITH SYSTEMD
# Supports both DIRECT and DOCKER modes
# =============================================================================
# --- CONFIGURATION VARIABLES ---
FORGEJO_URL="http://192.168.2.76:3006" # CHANGE THIS
REGISTRATION_TOKEN="your-registration-token" # CHANGE THIS
RUNNER_NAME="selfhosted-runner-01"
RUNNER_VERSION="latest" # "latest" or specific version
RUNNER_MODE="direct" # "direct" or "docker"
# =============================================================================
set -e
echo "============================================================"
echo "FORGEJO RUNNER DEPLOYMENT"
echo "============================================================"
echo "Mode: $RUNNER_MODE"
echo "Instance: $FORGEJO_URL"
echo ""
# --- STEP 1: Detect architecture ---
echo "Detecting architecture..."
export ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/;s/armv7l/armv7/')
echo "Architecture: $ARCH"
# --- STEP 2: Get latest version ---
if [ "$RUNNER_VERSION" = "latest" ]; then
echo "Fetching latest version..."
export RUNNER_VERSION=$(curl -s https://code.forgejo.org/api/v1/repos/forgejo/runner/releases/latest | grep -o '"tag_name":"v[0-9]\+\.[0-9]\+\.[0-9]\+"' | head -1 | sed 's/"tag_name":"//' | sed 's/"//' | sed 's/^v//')
echo "Version: $RUNNER_VERSION"
else
RUNNER_VERSION=${RUNNER_VERSION#v}
echo "Version: $RUNNER_VERSION"
fi
echo ""
# =============================================================================
# DIRECT MODE
# =============================================================================
if [ "$RUNNER_MODE" = "direct" ]; then
echo "=== DIRECT MODE INSTALLATION ==="
echo "Installing runner directly on the system"
echo ""
# --- Download binary ---
echo "Downloading runner binary..."
wget -O forgejo-runner https://code.forgejo.org/forgejo/runner/releases/download/v${RUNNER_VERSION}/forgejo-runner-${RUNNER_VERSION}-linux-${ARCH}
# --- Make executable ---
echo "Making executable..."
chmod +x forgejo-runner
# --- Move to /usr/local/bin ---
echo "Moving to /usr/local/bin..."
sudo mv forgejo-runner /usr/local/bin/
# --- Register runner ---
echo "Registering runner with Forgejo..."
forgejo-runner register \
--token "$REGISTRATION_TOKEN" \
--name "$RUNNER_NAME" \
--instance "$FORGEJO_URL" \
--labels "$RUNNER_NAME:host" \
--no-interactive
# --- Create config.yaml ---
echo "Creating configuration..."
cat > config.yaml << EOF
instance: $FORGEJO_URL
token: "$REGISTRATION_TOKEN"
log:
level: info
runner:
file: .runner
capacity: 1
timeout: 30m
shutdown_timeout: 30m
insecure: true
fetch_timeout: 30s
fetch_interval: 60s
report_interval: 10s
labels:
- "$RUNNER_NAME:host"
cache:
enabled: true
dir: ""
host:
workdir_parent: ""
EOF
# --- Create systemd service ---
echo "Creating systemd service..."
sudo tee /etc/systemd/system/forgejo-runner.service > /dev/null << EOF
[Unit]
Description=Forgejo Actions Runner
After=network.target
[Service]
Type=simple
User=$USER
Group=$USER
WorkingDirectory=$PWD
ExecStart=/usr/local/bin/forgejo-runner daemon --config $PWD/config.yaml
Restart=always
RestartSec=10
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=65536
LimitNPROC=65536
[Install]
WantedBy=multi-user.target
EOF
# --- Enable and start service ---
echo "Starting service..."
sudo systemctl daemon-reload
sudo systemctl enable forgejo-runner.service
sudo systemctl start forgejo-runner.service
echo ""
echo "=== DIRECT MODE DEPLOYMENT COMPLETE ==="
echo ""
echo "Service status:"
sudo systemctl status forgejo-runner.service --no-pager
echo ""
echo "To view logs:"
echo " sudo journalctl -u forgejo-runner -f"
echo ""
echo "Runner location: /usr/local/bin/forgejo-runner"
echo "Config location: $PWD/config.yaml"
# =============================================================================
# DOCKER MODE
# =============================================================================
elif [ "$RUNNER_MODE" = "docker" ]; then
echo "=== DOCKER MODE INSTALLATION ==="
echo "Installing runner with Docker Compose"
echo ""
# --- Check Docker ---
echo "Checking Docker..."
if ! command -v docker &> /dev/null; then
echo "Docker not found. Installing Docker..."
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
sudo systemctl enable docker --now
rm get-docker.sh
echo "Docker installed successfully"
else
echo "Docker is already installed"
fi
if ! systemctl is-active --quiet docker; then
echo "Starting Docker service..."
sudo systemctl start docker
fi
echo "Docker is running"
# --- Check Docker Compose ---
echo "Checking Docker Compose..."
if ! command -v docker compose &> /dev/null; then
echo "Docker Compose not found. Installing..."
if command -v apt-get &> /dev/null; then
sudo apt-get update && sudo apt-get install -y docker-compose-plugin
elif command -v yum &> /dev/null; then
sudo yum install -y docker-compose-plugin
else
echo "ERROR: Could not install docker-compose-plugin"
echo "Please install Docker Compose manually"
exit 1
fi
else
echo "Docker Compose is already installed"
fi
echo ""
# --- Create working directory ---
echo "Creating working directory..."
mkdir -p ~/forgejo-runner/{data,cache}
cd ~/forgejo-runner
# --- Register runner using Docker ---
echo "Registering runner with Forgejo..."
docker run -it --rm \
-v $(pwd)/data:/data \
-w /data \
--user root \
data.forgejo.org/forgejo/runner:${RUNNER_VERSION} \
forgejo-runner register \
--no-interactive \
--token "$REGISTRATION_TOKEN" \
--name "$RUNNER_NAME" \
--instance "$FORGEJO_URL" \
--labels "$RUNNER_NAME:host"
# --- Generate config.yaml ---
echo "Creating configuration..."
cat > data/config.yaml << EOF
instance: $FORGEJO_URL
token: "$REGISTRATION_TOKEN"
log:
level: info
runner:
file: .runner
capacity: 1
timeout: 30m
shutdown_timeout: 30m
insecure: true
fetch_timeout: 30s
fetch_interval: 60s
report_interval: 10s
labels:
- "$RUNNER_NAME:host"
cache:
enabled: true
dir: ""
container:
privileged: false
valid_volumes:
- '**'
docker_host: ""
force_pull: false
host:
workdir_parent: ""
EOF
# --- Create docker-compose.yml ---
echo "Creating docker-compose.yml..."
cat > docker-compose.yml << EOF
version: '3.8'
services:
docker-in-docker:
image: docker:dind
container_name: ${RUNNER_NAME}_dind
privileged: true
command: ['dockerd', '-H', 'tcp://0.0.0.0:2375', '--tls=false']
restart: unless-stopped
volumes:
- dind-storage:/var/lib/docker
runner:
image: data.forgejo.org/forgejo/runner:${RUNNER_VERSION}
container_name: ${RUNNER_NAME}
depends_on:
docker-in-docker:
condition: service_started
environment:
DOCKER_HOST: tcp://docker-in-docker:2375
user: 0:0
volumes:
- ./data:/data
- ./cache:/cache
restart: unless-stopped
command: /bin/sh -c "
apk update && apk add --no-cache nodejs npm &&
sleep 5 &&
forgejo-runner daemon --config /data/config.yaml
"
volumes:
dind-storage:
EOF
# --- Create systemd service ---
echo "Creating systemd service..."
sudo tee /etc/systemd/system/forgejo-runner-docker.service > /dev/null << EOF
[Unit]
Description=Forgejo Runner (Docker Compose)
After=docker.service
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=$HOME/forgejo-runner
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
ExecReload=/usr/bin/docker compose restart
StandardOutput=journal
User=$USER
Group=$USER
[Install]
WantedBy=multi-user.target
EOF
# --- Enable and start service ---
echo "Starting service..."
sudo systemctl daemon-reload
sudo systemctl enable forgejo-runner-docker.service
sudo systemctl start forgejo-runner-docker.service
echo ""
echo "=== DOCKER MODE DEPLOYMENT COMPLETE ==="
echo ""
echo "Service status:"
sudo systemctl status forgejo-runner-docker.service --no-pager
echo ""
echo "To view logs:"
echo " docker compose -f $HOME/forgejo-runner/docker-compose.yml logs -f runner"
echo ""
echo "To manage:"
echo " cd ~/forgejo-runner"
echo " docker compose up -d # start"
echo " docker compose down # stop"
echo " docker compose restart # restart"
echo ""
echo "Runner location: ~/forgejo-runner"
# =============================================================================
# INVALID MODE
# =============================================================================
else
echo "ERROR: Invalid RUNNER_MODE. Use 'direct' or 'docker'"
exit 1
fi
echo ""
echo "============================================================"
echo "DEPLOYMENT COMPLETE"
echo "============================================================"
echo ""
echo "Runner should now appear online in Forgejo Admin -> Actions -> Runners"
echo "URL: $FORGEJO_URL/admin/actions/runners"
echo ""
if [ "$RUNNER_MODE" = "direct" ]; then
echo "To check runner logs: sudo journalctl -u forgejo-runner -f"
else
echo "To check runner logs: docker compose -f $HOME/forgejo-runner/docker-compose.yml logs -f runner"
fi
echo "============================================================"
| 1 | #!/bin/bash |
| 2 | # ============================================================================= |
| 3 | # FORGEJO RUNNER - FULL SYSTEM DEPLOYMENT WITH SYSTEMD |
| 4 | # Supports both DIRECT and DOCKER modes |
| 5 | # ============================================================================= |
| 6 | |
| 7 | # --- CONFIGURATION VARIABLES --- |
| 8 | FORGEJO_URL="http://192.168.2.76:3006" # CHANGE THIS |
| 9 | REGISTRATION_TOKEN="your-registration-token" # CHANGE THIS |
| 10 | RUNNER_NAME="selfhosted-runner-01" |
| 11 | RUNNER_VERSION="latest" # "latest" or specific version |
| 12 | RUNNER_MODE="direct" # "direct" or "docker" |
| 13 | # ============================================================================= |
| 14 | |
| 15 | set -e |
| 16 | |
| 17 | echo "============================================================" |
| 18 | echo "FORGEJO RUNNER DEPLOYMENT" |
| 19 | echo "============================================================" |
| 20 | echo "Mode: $RUNNER_MODE" |
| 21 | echo "Instance: $FORGEJO_URL" |
| 22 | echo "" |
| 23 | |
| 24 | # --- STEP 1: Detect architecture --- |
| 25 | echo "Detecting architecture..." |
| 26 | export ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/;s/armv7l/armv7/') |
| 27 | echo "Architecture: $ARCH" |
| 28 | |
| 29 | # --- STEP 2: Get latest version --- |
| 30 | if [ "$RUNNER_VERSION" = "latest" ]; then |
| 31 | echo "Fetching latest version..." |
| 32 | export RUNNER_VERSION=$(curl -s https://code.forgejo.org/api/v1/repos/forgejo/runner/releases/latest | grep -o '"tag_name":"v[0-9]\+\.[0-9]\+\.[0-9]\+"' | head -1 | sed 's/"tag_name":"//' | sed 's/"//' | sed 's/^v//') |
| 33 | echo "Version: $RUNNER_VERSION" |
| 34 | else |
| 35 | RUNNER_VERSION=${RUNNER_VERSION#v} |
| 36 | echo "Version: $RUNNER_VERSION" |
| 37 | fi |
| 38 | echo "" |
| 39 | |
| 40 | # ============================================================================= |
| 41 | # DIRECT MODE |
| 42 | # ============================================================================= |
| 43 | if [ "$RUNNER_MODE" = "direct" ]; then |
| 44 | echo "=== DIRECT MODE INSTALLATION ===" |
| 45 | echo "Installing runner directly on the system" |
| 46 | echo "" |
| 47 | |
| 48 | # --- Download binary --- |
| 49 | echo "Downloading runner binary..." |
| 50 | wget -O forgejo-runner https://code.forgejo.org/forgejo/runner/releases/download/v${RUNNER_VERSION}/forgejo-runner-${RUNNER_VERSION}-linux-${ARCH} |
| 51 | |
| 52 | # --- Make executable --- |
| 53 | echo "Making executable..." |
| 54 | chmod +x forgejo-runner |
| 55 | |
| 56 | # --- Move to /usr/local/bin --- |
| 57 | echo "Moving to /usr/local/bin..." |
| 58 | sudo mv forgejo-runner /usr/local/bin/ |
| 59 | |
| 60 | # --- Register runner --- |
| 61 | echo "Registering runner with Forgejo..." |
| 62 | forgejo-runner register \ |
| 63 | --token "$REGISTRATION_TOKEN" \ |
| 64 | --name "$RUNNER_NAME" \ |
| 65 | --instance "$FORGEJO_URL" \ |
| 66 | --labels "$RUNNER_NAME:host" \ |
| 67 | --no-interactive |
| 68 | |
| 69 | # --- Create config.yaml --- |
| 70 | echo "Creating configuration..." |
| 71 | cat > config.yaml << EOF |
| 72 | instance: $FORGEJO_URL |
| 73 | token: "$REGISTRATION_TOKEN" |
| 74 | |
| 75 | log: |
| 76 | level: info |
| 77 | |
| 78 | runner: |
| 79 | file: .runner |
| 80 | capacity: 1 |
| 81 | timeout: 30m |
| 82 | shutdown_timeout: 30m |
| 83 | insecure: true |
| 84 | fetch_timeout: 30s |
| 85 | fetch_interval: 60s |
| 86 | report_interval: 10s |
| 87 | labels: |
| 88 | - "$RUNNER_NAME:host" |
| 89 | |
| 90 | cache: |
| 91 | enabled: true |
| 92 | dir: "" |
| 93 | |
| 94 | host: |
| 95 | workdir_parent: "" |
| 96 | EOF |
| 97 | |
| 98 | # --- Create systemd service --- |
| 99 | echo "Creating systemd service..." |
| 100 | sudo tee /etc/systemd/system/forgejo-runner.service > /dev/null << EOF |
| 101 | [Unit] |
| 102 | Description=Forgejo Actions Runner |
| 103 | After=network.target |
| 104 | |
| 105 | [Service] |
| 106 | Type=simple |
| 107 | User=$USER |
| 108 | Group=$USER |
| 109 | WorkingDirectory=$PWD |
| 110 | ExecStart=/usr/local/bin/forgejo-runner daemon --config $PWD/config.yaml |
| 111 | Restart=always |
| 112 | RestartSec=10 |
| 113 | StartLimitBurst=3 |
| 114 | StartLimitInterval=60s |
| 115 | LimitNOFILE=65536 |
| 116 | LimitNPROC=65536 |
| 117 | |
| 118 | [Install] |
| 119 | WantedBy=multi-user.target |
| 120 | EOF |
| 121 | |
| 122 | # --- Enable and start service --- |
| 123 | echo "Starting service..." |
| 124 | sudo systemctl daemon-reload |
| 125 | sudo systemctl enable forgejo-runner.service |
| 126 | sudo systemctl start forgejo-runner.service |
| 127 | |
| 128 | echo "" |
| 129 | echo "=== DIRECT MODE DEPLOYMENT COMPLETE ===" |
| 130 | echo "" |
| 131 | echo "Service status:" |
| 132 | sudo systemctl status forgejo-runner.service --no-pager |
| 133 | echo "" |
| 134 | echo "To view logs:" |
| 135 | echo " sudo journalctl -u forgejo-runner -f" |
| 136 | echo "" |
| 137 | echo "Runner location: /usr/local/bin/forgejo-runner" |
| 138 | echo "Config location: $PWD/config.yaml" |
| 139 | |
| 140 | # ============================================================================= |
| 141 | # DOCKER MODE |
| 142 | # ============================================================================= |
| 143 | elif [ "$RUNNER_MODE" = "docker" ]; then |
| 144 | echo "=== DOCKER MODE INSTALLATION ===" |
| 145 | echo "Installing runner with Docker Compose" |
| 146 | echo "" |
| 147 | |
| 148 | # --- Check Docker --- |
| 149 | echo "Checking Docker..." |
| 150 | if ! command -v docker &> /dev/null; then |
| 151 | echo "Docker not found. Installing Docker..." |
| 152 | curl -fsSL https://get.docker.com -o get-docker.sh |
| 153 | sudo sh get-docker.sh |
| 154 | sudo usermod -aG docker $USER |
| 155 | sudo systemctl enable docker --now |
| 156 | rm get-docker.sh |
| 157 | echo "Docker installed successfully" |
| 158 | else |
| 159 | echo "Docker is already installed" |
| 160 | fi |
| 161 | |
| 162 | if ! systemctl is-active --quiet docker; then |
| 163 | echo "Starting Docker service..." |
| 164 | sudo systemctl start docker |
| 165 | fi |
| 166 | echo "Docker is running" |
| 167 | |
| 168 | # --- Check Docker Compose --- |
| 169 | echo "Checking Docker Compose..." |
| 170 | if ! command -v docker compose &> /dev/null; then |
| 171 | echo "Docker Compose not found. Installing..." |
| 172 | if command -v apt-get &> /dev/null; then |
| 173 | sudo apt-get update && sudo apt-get install -y docker-compose-plugin |
| 174 | elif command -v yum &> /dev/null; then |
| 175 | sudo yum install -y docker-compose-plugin |
| 176 | else |
| 177 | echo "ERROR: Could not install docker-compose-plugin" |
| 178 | echo "Please install Docker Compose manually" |
| 179 | exit 1 |
| 180 | fi |
| 181 | else |
| 182 | echo "Docker Compose is already installed" |
| 183 | fi |
| 184 | echo "" |
| 185 | |
| 186 | # --- Create working directory --- |
| 187 | echo "Creating working directory..." |
| 188 | mkdir -p ~/forgejo-runner/{data,cache} |
| 189 | cd ~/forgejo-runner |
| 190 | |
| 191 | # --- Register runner using Docker --- |
| 192 | echo "Registering runner with Forgejo..." |
| 193 | docker run -it --rm \ |
| 194 | -v $(pwd)/data:/data \ |
| 195 | -w /data \ |
| 196 | --user root \ |
| 197 | data.forgejo.org/forgejo/runner:${RUNNER_VERSION} \ |
| 198 | forgejo-runner register \ |
| 199 | --no-interactive \ |
| 200 | --token "$REGISTRATION_TOKEN" \ |
| 201 | --name "$RUNNER_NAME" \ |
| 202 | --instance "$FORGEJO_URL" \ |
| 203 | --labels "$RUNNER_NAME:host" |
| 204 | |
| 205 | # --- Generate config.yaml --- |
| 206 | echo "Creating configuration..." |
| 207 | cat > data/config.yaml << EOF |
| 208 | instance: $FORGEJO_URL |
| 209 | token: "$REGISTRATION_TOKEN" |
| 210 | |
| 211 | log: |
| 212 | level: info |
| 213 | |
| 214 | runner: |
| 215 | file: .runner |
| 216 | capacity: 1 |
| 217 | timeout: 30m |
| 218 | shutdown_timeout: 30m |
| 219 | insecure: true |
| 220 | fetch_timeout: 30s |
| 221 | fetch_interval: 60s |
| 222 | report_interval: 10s |
| 223 | labels: |
| 224 | - "$RUNNER_NAME:host" |
| 225 | |
| 226 | cache: |
| 227 | enabled: true |
| 228 | dir: "" |
| 229 | |
| 230 | container: |
| 231 | privileged: false |
| 232 | valid_volumes: |
| 233 | - '**' |
| 234 | docker_host: "" |
| 235 | force_pull: false |
| 236 | |
| 237 | host: |
| 238 | workdir_parent: "" |
| 239 | EOF |
| 240 | |
| 241 | # --- Create docker-compose.yml --- |
| 242 | echo "Creating docker-compose.yml..." |
| 243 | cat > docker-compose.yml << EOF |
| 244 | version: '3.8' |
| 245 | |
| 246 | services: |
| 247 | docker-in-docker: |
| 248 | image: docker:dind |
| 249 | container_name: ${RUNNER_NAME}_dind |
| 250 | privileged: true |
| 251 | command: ['dockerd', '-H', 'tcp://0.0.0.0:2375', '--tls=false'] |
| 252 | restart: unless-stopped |
| 253 | volumes: |
| 254 | - dind-storage:/var/lib/docker |
| 255 | |
| 256 | runner: |
| 257 | image: data.forgejo.org/forgejo/runner:${RUNNER_VERSION} |
| 258 | container_name: ${RUNNER_NAME} |
| 259 | depends_on: |
| 260 | docker-in-docker: |
| 261 | condition: service_started |
| 262 | environment: |
| 263 | DOCKER_HOST: tcp://docker-in-docker:2375 |
| 264 | user: 0:0 |
| 265 | volumes: |
| 266 | - ./data:/data |
| 267 | - ./cache:/cache |
| 268 | restart: unless-stopped |
| 269 | command: /bin/sh -c " |
| 270 | apk update && apk add --no-cache nodejs npm && |
| 271 | sleep 5 && |
| 272 | forgejo-runner daemon --config /data/config.yaml |
| 273 | " |
| 274 | |
| 275 | volumes: |
| 276 | dind-storage: |
| 277 | EOF |
| 278 | |
| 279 | # --- Create systemd service --- |
| 280 | echo "Creating systemd service..." |
| 281 | sudo tee /etc/systemd/system/forgejo-runner-docker.service > /dev/null << EOF |
| 282 | [Unit] |
| 283 | Description=Forgejo Runner (Docker Compose) |
| 284 | After=docker.service |
| 285 | Requires=docker.service |
| 286 | |
| 287 | [Service] |
| 288 | Type=oneshot |
| 289 | RemainAfterExit=yes |
| 290 | WorkingDirectory=$HOME/forgejo-runner |
| 291 | ExecStart=/usr/bin/docker compose up -d |
| 292 | ExecStop=/usr/bin/docker compose down |
| 293 | ExecReload=/usr/bin/docker compose restart |
| 294 | StandardOutput=journal |
| 295 | User=$USER |
| 296 | Group=$USER |
| 297 | |
| 298 | [Install] |
| 299 | WantedBy=multi-user.target |
| 300 | EOF |
| 301 | |
| 302 | # --- Enable and start service --- |
| 303 | echo "Starting service..." |
| 304 | sudo systemctl daemon-reload |
| 305 | sudo systemctl enable forgejo-runner-docker.service |
| 306 | sudo systemctl start forgejo-runner-docker.service |
| 307 | |
| 308 | echo "" |
| 309 | echo "=== DOCKER MODE DEPLOYMENT COMPLETE ===" |
| 310 | echo "" |
| 311 | echo "Service status:" |
| 312 | sudo systemctl status forgejo-runner-docker.service --no-pager |
| 313 | echo "" |
| 314 | echo "To view logs:" |
| 315 | echo " docker compose -f $HOME/forgejo-runner/docker-compose.yml logs -f runner" |
| 316 | echo "" |
| 317 | echo "To manage:" |
| 318 | echo " cd ~/forgejo-runner" |
| 319 | echo " docker compose up -d # start" |
| 320 | echo " docker compose down # stop" |
| 321 | echo " docker compose restart # restart" |
| 322 | echo "" |
| 323 | echo "Runner location: ~/forgejo-runner" |
| 324 | |
| 325 | # ============================================================================= |
| 326 | # INVALID MODE |
| 327 | # ============================================================================= |
| 328 | else |
| 329 | echo "ERROR: Invalid RUNNER_MODE. Use 'direct' or 'docker'" |
| 330 | exit 1 |
| 331 | fi |
| 332 | |
| 333 | echo "" |
| 334 | echo "============================================================" |
| 335 | echo "DEPLOYMENT COMPLETE" |
| 336 | echo "============================================================" |
| 337 | echo "" |
| 338 | echo "Runner should now appear online in Forgejo Admin -> Actions -> Runners" |
| 339 | echo "URL: $FORGEJO_URL/admin/actions/runners" |
| 340 | echo "" |
| 341 | if [ "$RUNNER_MODE" = "direct" ]; then |
| 342 | echo "To check runner logs: sudo journalctl -u forgejo-runner -f" |
| 343 | else |
| 344 | echo "To check runner logs: docker compose -f $HOME/forgejo-runner/docker-compose.yml logs -f runner" |
| 345 | fi |
| 346 | echo "============================================================" |