From e055999f0c7b70ac5c479ef9b2c2010bdabb4738 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Mon, 21 Sep 2026 18:50:13 +0200 Subject: [PATCH] =?UTF-8?q?Feat:=20Runner-Capacity=20=C3=BCber=20RUNNER=5F?= =?UTF-8?q?CAPACITY=20in=20.env=20konfigurierbar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das offizielle gitea/runner-Image kennt keine Umgebungsvariable für runner.capacity, dieser Wert lässt sich nur über die config.yaml setzen. entrypoint.sh kopiert config/runner.yaml beim Containerstart daher nach /data/config.runtime.yaml und überschreibt dort per `gitea-runner config set` die capacity, falls RUNNER_CAPACITY gesetzt ist, bevor das eigentliche run.sh des Images gestartet wird. Co-Authored-By: Claude Sonnet 5 --- .env.example | 3 +++ README.md | 11 +++++++++++ config/runner.yaml | 1 + docker-compose.yaml | 5 ++++- entrypoint.sh | 18 ++++++++++++++++++ 5 files changed, 37 insertions(+), 1 deletion(-) create mode 100755 entrypoint.sh diff --git a/.env.example b/.env.example index 3467fc6..e06eedd 100644 --- a/.env.example +++ b/.env.example @@ -2,3 +2,6 @@ INSTANCE_URL=https://gitea.creative-dragonslayer.de REGISTRATION_TOKEN=ABC RUNNER_NAME=gitea_main RUNNER_LABELS= +# Optional: überschreibt runner.capacity aus config/runner.yaml zur Laufzeit. +# Leer lassen, um den Wert aus config/runner.yaml zu verwenden. +RUNNER_CAPACITY= diff --git a/README.md b/README.md index 592de35..469f169 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ Enthält eine einfache docker-compose, um einen gitea_runner zu starten. - `config/runner.yaml` — Konfiguration des Runners - `config/cache.yaml` — Konfiguration des Cache-Servers +- `entrypoint.sh` — Wrapper-Entrypoint des Runner-Containers (siehe „Capacity über .env“ unten) - `data/runner` — persistenter Zustand des Runners (u. a. `.runner`-Registrierungsdatei) - `data/cache` — persistente Cache-Daten - `cache-secret` — gemeinsames Secret für Runner ↔ Cache-Server (siehe unten, **nicht** in Git) @@ -50,6 +51,16 @@ Falls vorher schon ein eigenständiger Cache-Ordner existierte (z. B. unter `data/runner/cache` oder `cache-data/` aus einer Zwischenversion), diesen entsprechend nach `data/cache` verschieben. +## Capacity über .env + +Das offizielle `gitea/runner`-Image kennt keine Umgebungsvariable für `runner.capacity` — +dieser Wert lässt sich nur über die `config.yaml` setzen. `entrypoint.sh` schließt diese +Lücke: beim Containerstart wird `config/runner.yaml` nach `/data/config.runtime.yaml` +kopiert und dort, falls `RUNNER_CAPACITY` in der `.env` gesetzt ist, per +`gitea-runner config set` überschrieben, bevor das eigentliche `run.sh` des Images +gestartet wird. Ist `RUNNER_CAPACITY` leer, bleibt der Wert aus `config/runner.yaml` +unverändert. + ## Cache-Service Der Cache läuft als eigener Service (`cache` in `docker-compose.yaml`), getrennt vom diff --git a/config/runner.yaml b/config/runner.yaml index 3c8e6c8..33f7918 100644 --- a/config/runner.yaml +++ b/config/runner.yaml @@ -1,6 +1,7 @@ runner: # Bis zu 5 Jobs gleichzeitig. container.network bleibt leer, damit jeder Job weiterhin # sein eigenes isoliertes Docker-Netzwerk bekommt (kein gegenseitiger Zugriff der Jobs). + # Standardwert, falls RUNNER_CAPACITY in der .env nicht gesetzt ist (siehe entrypoint.sh). capacity: 5 cache: diff --git a/docker-compose.yaml b/docker-compose.yaml index 9059890..67403da 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -6,14 +6,17 @@ services: depends_on: cache: condition: service_healthy + entrypoint: ["/sbin/tini", "--", "bash", "/entrypoint.sh"] environment: CONFIG_FILE: /config.yaml + RUNNER_CAPACITY: "${RUNNER_CAPACITY:-}" GITEA_INSTANCE_URL: "${INSTANCE_URL}" GITEA_RUNNER_REGISTRATION_TOKEN: "${REGISTRATION_TOKEN}" GITEA_RUNNER_NAME: "${RUNNER_NAME}" GITEA_RUNNER_LABELS: "${RUNNER_LABELS}" volumes: - - ./config/runner.yaml:/config.yaml + - ./entrypoint.sh:/entrypoint.sh:ro + - ./config/runner.yaml:/config.yaml:ro - ./data/runner:/data - ./cache-secret:/run/cache-secret:ro - /var/run/docker.sock:/var/run/docker.sock diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..f45d150 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# Kopiert die (read-only gemountete) config/runner.yaml in einen beschreibbaren +# Pfad in /data und wendet dort optional RUNNER_CAPACITY aus der .env an, bevor +# das eigentliche Runner-Entrypoint-Skript des Images gestartet wird. +set -euo pipefail + +SOURCE_CONFIG="${CONFIG_FILE:-/config.yaml}" +RUNTIME_CONFIG="/data/config.runtime.yaml" + +mkdir -p /data +cp "$SOURCE_CONFIG" "$RUNTIME_CONFIG" + +if [[ -n "${RUNNER_CAPACITY:-}" ]]; then + gitea-runner config set -c "$RUNTIME_CONFIG" runner.capacity "$RUNNER_CAPACITY" +fi + +export CONFIG_FILE="$RUNTIME_CONFIG" +exec /usr/local/bin/run.sh