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}"