diff --git a/scraper/internal/orchestrator/orchestrator.go b/scraper/internal/orchestrator/orchestrator.go index e9fba33..55b97d0 100644 --- a/scraper/internal/orchestrator/orchestrator.go +++ b/scraper/internal/orchestrator/orchestrator.go @@ -247,10 +247,11 @@ func (o *Orchestrator) Run(ctx context.Context) error { }() var bookWG sync.WaitGroup + bookLoop: for entry := range entries { select { case <-ctx.Done(): - break + break bookLoop default: } diff --git a/scripts/setup_runner.sh b/scripts/setup_runner.sh new file mode 100755 index 0000000..1afbd40 --- /dev/null +++ b/scripts/setup_runner.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ── usage ───────────────────────────────────────────────────────────────────── +usage() { + echo "Usage: $0 " + echo " runner-name: runner-node-1 | runner-node-2 | runner-node-3" + exit 1 +} + +[[ $# -ne 1 ]] && usage + +RUNNER_NAME="$1" + +# validate +case "$RUNNER_NAME" in + runner-node-1|runner-node-2|runner-node-3) ;; + *) echo "ERROR: unknown runner name '$RUNNER_NAME'"; usage ;; +esac + +# ── config ──────────────────────────────────────────────────────────────────── +CACHE_PORT=8088 +GITEA_URL="https://gitea.kalekber.cc/" +REGISTRATION_TOKEN="AboxpDKWx7gizwJ9xeheHVqKjj9J9N9BgyX96wvu" +IMAGE="docker.io/gitea/act_runner:latest" +DATA_DIR="$PWD/data/$RUNNER_NAME" +CFG_PATH="$DATA_DIR/config.yaml" + +# ── detect THIS machine's LAN IP ────────────────────────────────────────────── +HOST_IP=$(ip route get 1.1.1.1 | awk '{for(i=1;i<=NF;i++) if($i=="src") print $(i+1); exit}') +if [[ -z "$HOST_IP" ]]; then + echo "ERROR: could not detect host LAN IP" >&2 + exit 1 +fi +echo "Host LAN IP: $HOST_IP" + +# ── generate config.yaml ────────────────────────────────────────────────────── +mkdir -p "$DATA_DIR" + +docker run --rm --entrypoint="" "$IMAGE" \ + act_runner generate-config > "$CFG_PATH" + +awk -v host="$HOST_IP" -v port="$CACHE_PORT" ' + /^cache:/ { in_cache=1 } + in_cache && /enabled:/ { $0 = " enabled: true" } + in_cache && /dir:/ { $0 = " dir: \"/data/cache\"" } + in_cache && /host:/ { $0 = " host: \"" host "\"" } + in_cache && /port:/ { $0 = " port: " port; in_cache=0 } + { print } +' "$CFG_PATH" > "${CFG_PATH}.tmp" && mv "${CFG_PATH}.tmp" "$CFG_PATH" + +echo "Config written to $CFG_PATH (cache $HOST_IP:$CACHE_PORT)" + +# ── stop + remove old container if exists ──────────────────────────────────── +if docker inspect "$RUNNER_NAME" &>/dev/null; then + echo "Removing existing $RUNNER_NAME..." + docker stop "$RUNNER_NAME" || true + docker rm "$RUNNER_NAME" || true +fi + +# ── start runner ────────────────────────────────────────────────────────────── +docker run \ + -v "$DATA_DIR:/data" \ + -v "$CFG_PATH:/config.yaml" \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -e CONFIG_FILE=/config.yaml \ + -e GITEA_INSTANCE_URL="$GITEA_URL" \ + -e GITEA_RUNNER_REGISTRATION_TOKEN="$REGISTRATION_TOKEN" \ + -e GITEA_RUNNER_NAME="$RUNNER_NAME" \ + -p "${CACHE_PORT}:${CACHE_PORT}" \ + --restart unless-stopped \ + --name "$RUNNER_NAME" \ + -d "$IMAGE" + +echo "Runner $RUNNER_NAME started" +docker ps --filter "name=$RUNNER_NAME" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"