Files
Linux-Scripts/main/runner.sh
2025-12-21 06:40:52 -08:00

113 lines
3.4 KiB
Bash

#!/bin/bash
# Copyright (c) 2022 fithwum
# All rights reserved
set -eu
USER=fithwum
FILE=config.yaml
# openssh
apt-get install openssh-client openssh-server
# docker setup
apt-get remove -y $(dpkg --get-selections docker.io docker-compose docker-doc podman-docker containerd runc | cut -f1)
# Add Docker's official GPG key:
apt-get update
apt-get install ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# user
adduser $USER docker
# runner install
cd /usr/local/bin/
wget https://gitea.com/gitea/act_runner/releases/download/v0.2.13/act_runner-0.2.13-linux-amd64
mv act_runner-*-linux-amd64 act_runner
chmod +x act_runner
./act_runner generate-config | tee $FILE > /dev/null
chown fithwum:docker act_runner
chown fithwum:docker $FILE
############################################################################################
# Count label entries inside the labels block
LABEL_COUNT=$(awk '
$0 ~ /^ labels:/ {in=1; next}
in && $0 ~ /^ - / {c++}
in && NF==0 {in=0}
END {print c+0}
' "$FILE")
if [ "$LABEL_COUNT" -ne 3 ]; then
echo "[ERROR] Expected exactly 3 labels, found $LABEL_COUNT. Aborting."
exit 1
fi
# Verify expected existing labels
awk '
$0 ~ /^ labels:/ {in=1; next}
in && $0 ~ /^ - / {print}
in && NF==0 {exit}
' "$FILE" | grep -qx ' - "vm-ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest"' \
&& grep -qx ' - "vm-ubuntu-22.04:docker://docker.gitea.com/runner-images:ubuntu-22.04"' \
&& grep -qx ' - "vm-ubuntu-20.04:docker://docker.gitea.com/runner-images:ubuntu-20.04"' \
|| {
echo "[ERROR] Existing labels do not match expected values. Aborting."
exit 1
}
# Replace block
sed -i '/^ labels:/,/^$/c\
labels:\n\
- "vm-ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest"\n\
- "vm-ubuntu-22.04:docker://docker.gitea.com/runner-images:ubuntu-22.04"\n\
- "vm-ubuntu-20.04:docker://docker.gitea.com/runner-images:ubuntu-20.04"\n\
- "vm-docker-build:docker://catthehacker/ubuntu:custom-latest-20240215"\n\
- "vm-docker-build2:docker://catthehacker/ubuntu:act-latest"' "$FILE"
echo "[OK] labels block updated safely."
############################################################################################
./act_runner --config $FILE register
./act_runner register --no-interactive --instance <instance_url> --token <registration_token> --name <runner_name>
tee /etc/systemd/system/act_runner.service <<EOF
[Unit]
Description=Gitea Actions runner
Documentation=https://gitea.com/gitea/act_runner
After=docker.service
[Service]
ExecStart=/usr/local/bin/act_runner daemon --config /usr/local/bin/$FILE
ExecReload=/bin/kill -s HUP $MAINPID
WorkingDirectory=/usr/local/bin
TimeoutSec=0
RestartSec=10
Restart=always
User=$USER
[Install]
WantedBy=multi-user.target
EOF
# load the new systemd unit file
sudo systemctl daemon-reload
# start the service and enable it at boot
sudo systemctl enable act_runner --now