--- - name: Validate Forgejo Runner variables ansible.builtin.import_tasks: validate.yaml - name: Deploy Forgejo Runner using shared docker_service role ansible.builtin.include_role: name: docker_service vars: service_name: "forgejo-runner" service_base_path: "{{ forgejo_runner_base_path }}" service_directories: - { path: "data" } - { path: "config" } service_templates: - { src: "config.yaml.j2", dest: "config/config.yaml" } - { src: "docker-compose.yml.j2", dest: "docker-compose.yml" } health_check_enabled: false # the runner exposes no port - name: Check if runner is already registered ansible.builtin.stat: path: "{{ forgejo_runner_base_path }}/data/.runner" register: runner_registered - name: Set permissions on data directory ansible.builtin.file: path: "{{ forgejo_runner_base_path }}/data" state: directory mode: '0777' recurse: true when: not runner_registered.stat.exists - name: Stop runner for registration community.docker.docker_compose_v2: project_src: "{{ forgejo_runner_base_path }}" state: stopped when: not runner_registered.stat.exists - name: Register runner with Forgejo ansible.builtin.command: cmd: > docker run --rm -v {{ forgejo_runner_base_path }}/data:/data -v {{ forgejo_runner_base_path }}/config/config.yaml:/config.yaml code.forgejo.org/forgejo/runner:{{ forgejo_runner_version }} forgejo-runner register --no-interactive --token {{ forgejo_runner_token }} --name runner-{{ inventory_hostname }} --instance http://{{ asxpio_ops_vpc_ip }}:{{ forgejo_http_port }} --labels ubuntu-latest:docker://node:20.20.2-bookworm,ubuntu-22.04:docker://node:20.20.2-bookworm,ubuntu-24.04:docker://node:22.23.5-bookworm,debian-latest:docker://debian:12.15,debian-12:docker://debian:12.15,debian-11:docker://debian:11.11,arch-latest:docker://archlinux:base-20261108.0.623074,nginx-latest:docker://nginx:1.31.8,nginx-alpine:docker://nginx:1.31.8-alpine,node-20:docker://node:20.20.2,node-22:docker://node:22.23.5,python-3.11:docker://python:3.11.18,python-3.12:docker://python:3.12.16,alpine-latest:docker://alpine:3.24.4 when: not runner_registered.stat.exists changed_when: true register: registration_result - name: Start runner after registration community.docker.docker_compose_v2: project_src: "{{ forgejo_runner_base_path }}" state: present when: not runner_registered.stat.exists - name: Display runner status ansible.builtin.debug: msg: | Forgejo Runner deployed successfully! Runner name: runner-{{ inventory_hostname }} Forgejo instance: http://{{ asxpio_ops_vpc_ip }}:{{ forgejo_http_port }} {% if runner_registered.stat.exists %} Status: Already registered (using existing registration) {% else %} Status: Newly registered {% endif %} Check runner status: docker logs forgejo-runner