84 lines
2.5 KiB
Bash
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}"
|