#!/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}"