commit 3e722409706753bbf1cf39b262fc14bf7c752e87
Author: oddstr13 <oddstr13@openshell.no>
Date:   Thu Apr 10 00:21:51 2025 +0000

    Add setup-forgejo-runner.sh

diff --git a/setup-forgejo-runner.sh b/setup-forgejo-runner.sh
new file mode 100644
index 0000000..8dfd19c
--- /dev/null
+++ b/setup-forgejo-runner.sh
@@ -0,0 +1,84 @@
+#!/bin/bash
+set -ex
+
+FORGEJO_URL=${FORGEJO_URL:-https://git.service.openshell.network/}
+FORGEJO_RUNNER_TOKEN=${FORGEJO_RUNNER_TOKEN:-}
+
+RUNNER_DIR="${RUNNER_DIR:-~/docker/ForgejoRunner}"
+RUNNER_USER=${RUNNER_USER:-forgejo-runner}
+RUNNER_NAME="${RUNNER_NAME:-$(hostname)}"
+RUNNER_LABELS="${RUNNER_LABELS:-docker:docker://ghcr.io/catthehacker/ubuntu:runner-latest,runner-latest-arm:docker://ghcr.io/catthehacker/ubuntu:runner-latest,runner-latest:docker://ghcr.io/catthehacker/ubuntu:runner-latest,runner:docker://ghcr.io/catthehacker/ubuntu:runner-latest,runner-22.04-arm:docker://ghcr.io/catthehacker/ubuntu:runner-22.04,runner-20.04-arm:docker://ghcr.io/catthehacker/ubuntu:runner-20.04,runner-22.04:docker://ghcr.io/catthehacker/ubuntu:runner-22.04,runner-20.04:docker://ghcr.io/catthehacker/ubuntu:runner-20.04}"
+
+mkdir -p "${RUNNER_DIR}"
+cd "${RUNNER_DIR}"
+
+if [[ -f compose.yaml ]]; then
+  echo The file compose.yaml exists, bailing... > /dev/stderr
+  exit 1
+fi
+
+if [ -z "${FORGEJO_URL}" ]; then
+  read -p "Forgejo URL: " FORGEJO_URL
+fi
+
+if [ -z "${FORGEJO_RUNNER_TOKEN}" ]; then
+  read -p "Registration token: " FORGEJO_RUNNER_TOKEN
+fi
+
+
+mkdir -p data/.cache
+touch data/.runner
+
+if ! id ${RUNNER_USER} >/dev/null 2>&1; then
+  echo Creating ${RUNNER_USER} user...
+  sudo useradd ${RUNNER_USER}
+fi
+
+FORGEJO_UID=$(id -u ${RUNNER_USER})
+FORGEJO_GID=$(id -g ${RUNNER_USER})
+
+
+chmod 775 data/.runner
+chmod 775 data/.cache
+
+sudo chown -R ${FORGEJO_UID}:${FORGEJO_GID} data/.cache
+sudo chown -R ${FORGEJO_UID}:${FORGEJO_GID} data/.runner
+sudo chmod g+s data/.runner
+sudo chmod g+s data/.cache
+
+
+cat > compose.yaml <<EOF
+services:
+  docker-in-docker:
+    image: docker:dind
+    container_name: 'docker_dind'
+    privileged: 'true'
+    command: ['dockerd', '-H', 'tcp://0.0.0.0:2375', '--tls=false']
+    restart: 'unless-stopped'
+
+  runner:
+    image: 'data.forgejo.org/forgejo/runner:6'
+    links:
+      - docker-in-docker
+    depends_on:
+      docker-in-docker:
+        condition: service_started
+    container_name: 'runner'
+    environment:
+      DOCKER_HOST: tcp://docker-in-docker:2375
+    # User without root privileges, but with access to `./data`.
+    user: ${FORGEJO_UID}:${FORGEJO_GID}
+    volumes:
+      - ./data:/data
+    restart: 'unless-stopped'
+
+    command: '/bin/sh -c "sleep 5; forgejo-runner daemon"'
+EOF
+
+docker compose up -d
+docker compose exec -it runner forgejo-runner register \
+  --no-interactive \
+  --token ${FORGEJO_RUNNER_TOKEN} \
+  --instance ${FORGEJO_URL} \
+  --name "${RUNNER_NAME}" \
+  --labels "${RUNNER_LABELS}"