Forgejo-tools/setup-forgejo-runner.sh

84 lines
2.5 KiB
Bash

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