diff --git a/ansible/roles/forgejo_runner/defaults/main.yml b/ansible/roles/forgejo_runner/defaults/main.yml
index 6c87755..75cbd0c 100644
--- a/ansible/roles/forgejo_runner/defaults/main.yml
+++ b/ansible/roles/forgejo_runner/defaults/main.yml
@@ -1,42 +1,23 @@
---
-# Forgejo Runner - containerized daemon on tailnet-jobs network
+# Forgejo Runner - host execution mode
#
-# The runner daemon runs in a Docker container with access to the tailnet
-# via the tailscale-ci-gateway. This allows it to register with Forgejo
-# using the Tailscale URL, so job containers can also reach Forgejo.
+# The runner daemon runs directly on indri and executes jobs on the host.
+# This avoids container networking complexity since it can reach Forgejo
+# at localhost:3001 directly.
+forgejo_runner_binary: /Users/erichblume/code/3rd/forgejo-runner/forgejo-runner
forgejo_runner_data_dir: /Users/erichblume/.forgejo-runner
forgejo_runner_config_dir: /Users/erichblume/.config/forgejo-runner
forgejo_runner_log_dir: /Users/erichblume/Library/Logs
-# Container settings
-forgejo_runner_container_name: forgejo-runner
-forgejo_runner_image: code.forgejo.org/forgejo/runner:6.2.1
-forgejo_runner_network: tailnet-jobs
+# Runner registration - use localhost since we're running on indri
+forgejo_runner_instance_url: "http://localhost:3001"
+forgejo_runner_name: "indri-host-runner"
-# Runner registration - use Tailscale URL since we're on tailnet-jobs network
-forgejo_runner_instance_url: "https://forge.tail8d86e.ts.net"
-forgejo_runner_name: "indri-docker-runner"
-
-# Labels format: label:docker://image
-#
-# Job containers also run on tailnet-jobs network and can reach:
-# - forge.tail8d86e.ts.net for git clone
-# - registry.tail8d86e.ts.net for container push/pull
-#
-# Bootstrap mode (use upstream images until we build ci-base):
-# docker-builder:docker://docker:27-cli
-# ubuntu-latest:docker://catthehacker/ubuntu:act-22.04
-#
-# Production mode (use our own images from zot):
-# docker-builder:docker://registry.tail8d86e.ts.net/blumeops/ci-base:latest
-# ubuntu-latest:docker://registry.tail8d86e.ts.net/blumeops/ci-base:latest
-#
-forgejo_runner_labels: "docker-builder:docker://docker:27-cli,ubuntu-latest:docker://catthehacker/ubuntu:act-22.04,ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04"
+# Labels format for host execution: label:host
+# Jobs run directly on the host, not in containers
+forgejo_runner_labels: "ubuntu-latest:host,ubuntu-22.04:host"
# Runner config
forgejo_runner_capacity: 2
forgejo_runner_timeout: 3h
-
-# Docker container settings for jobs
-forgejo_runner_privileged: true # Needed for container builds
diff --git a/ansible/roles/forgejo_runner/tasks/main.yml b/ansible/roles/forgejo_runner/tasks/main.yml
index 0cce725..0f28d88 100644
--- a/ansible/roles/forgejo_runner/tasks/main.yml
+++ b/ansible/roles/forgejo_runner/tasks/main.yml
@@ -1,12 +1,8 @@
---
-# Forgejo Runner - containerized daemon on tailnet-jobs network
+# Forgejo Runner - host execution mode
#
-# The runner daemon runs in a Docker container with access to the tailnet
-# via the tailscale-ci-gateway. Job containers also run on tailnet-jobs
-# and can reach Forgejo via Tailscale.
-#
-# DEPENDENCIES:
-# - tailscale_ci_gateway role must run first (creates tailnet-jobs network)
+# The runner daemon runs directly on indri using a locally compiled binary.
+# Jobs execute on the host, reaching Forgejo at localhost:3001.
- name: Ensure forgejo-runner directories exist
ansible.builtin.file:
@@ -24,30 +20,21 @@
mode: '0644'
notify: Restart forgejo-runner
-- name: Pull forgejo-runner image
- ansible.builtin.command:
- cmd: docker pull {{ forgejo_runner_image }}
- register: forgejo_runner_pull
- changed_when: "'Downloaded newer image' in forgejo_runner_pull.stdout or 'Pull complete' in forgejo_runner_pull.stdout"
-
- name: Check if runner is registered
ansible.builtin.stat:
path: "{{ forgejo_runner_data_dir }}/.runner"
register: forgejo_runner_registered
-- name: Register runner with Forgejo (via tailnet)
+- name: Register runner with Forgejo
ansible.builtin.command:
cmd: >
- docker run --rm
- --network=container:tailscale-ci-gateway
- -v {{ forgejo_runner_data_dir }}:/data
- {{ forgejo_runner_image }}
- forgejo-runner register
+ {{ forgejo_runner_binary }} register
--instance "{{ forgejo_runner_instance_url }}"
--token "{{ forgejo_runner_token }}"
--name "{{ forgejo_runner_name }}"
--labels "{{ forgejo_runner_labels }}"
--no-interactive
+ chdir: "{{ forgejo_runner_data_dir }}"
when: not forgejo_runner_registered.stat.exists
changed_when: true
diff --git a/ansible/roles/forgejo_runner/templates/config.yaml.j2 b/ansible/roles/forgejo_runner/templates/config.yaml.j2
index 397fbbd..07bdb8d 100644
--- a/ansible/roles/forgejo_runner/templates/config.yaml.j2
+++ b/ansible/roles/forgejo_runner/templates/config.yaml.j2
@@ -3,15 +3,11 @@ log:
level: info
runner:
- # Path inside the container (data dir mounted at /data)
- file: /data/.runner
+ file: {{ forgejo_runner_data_dir }}/.runner
capacity: {{ forgejo_runner_capacity }}
timeout: {{ forgejo_runner_timeout }}
+# Even in host execution mode, some actions run in containers.
+# Use host networking so containers can access localhost services.
container:
- # Use tailnet-jobs network so job containers can reach Forgejo via Tailscale gateway
- network: "{{ forgejo_runner_network }}"
- privileged: {{ forgejo_runner_privileged | lower }}
- # Mount Docker socket so jobs can build containers
- valid_volumes:
- - /var/run/docker.sock
+ network: "host"
diff --git a/ansible/roles/forgejo_runner/templates/forgejo-runner.plist.j2 b/ansible/roles/forgejo_runner/templates/forgejo-runner.plist.j2
index e0d07a6..e04fa0d 100644
--- a/ansible/roles/forgejo_runner/templates/forgejo-runner.plist.j2
+++ b/ansible/roles/forgejo_runner/templates/forgejo-runner.plist.j2
@@ -7,28 +7,20 @@
mcquack.forgejo-runner
ProgramArguments
- /bin/bash
- -c
- /dev/null || true
-/usr/local/bin/docker rm {{ forgejo_runner_container_name }} 2>/dev/null || true
-
-# Run the forgejo-runner daemon in a container
-# - Uses gateway's network namespace for tailnet access (to poll Forgejo)
-# - Mounts docker socket to spawn job containers
-# - Mounts config and data directories
-exec /usr/local/bin/docker run --rm \
- --name {{ forgejo_runner_container_name }} \
- --network=container:tailscale-ci-gateway \
- --user root \
- -v {{ ansible_env.HOME }}/.docker/run/docker.sock:/var/run/docker.sock \
- -v {{ forgejo_runner_config_dir }}/config.yaml:/config.yaml:ro \
- -v {{ forgejo_runner_data_dir }}:/data \
- {{ forgejo_runner_image }} \
- forgejo-runner daemon --config /config.yaml
-]]>
+ {{ forgejo_runner_binary }}
+ daemon
+ --config
+ {{ forgejo_runner_config_dir }}/config.yaml
+ WorkingDirectory
+ {{ forgejo_runner_data_dir }}
+ EnvironmentVariables
+
+ PATH
+ /Users/erichblume/.local/share/mise/shims:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
+ HOME
+ /Users/erichblume
+
RunAtLoad
KeepAlive