blumeops/ansible/roles/forgejo_runner/tasks/main.yml
Erich Blume 676c1782d1
All checks were successful
Test CI / test (pull_request) Successful in 2s
Add forgejo_runner Ansible role for indri
Run forgejo-runner directly on indri using Docker container mode
instead of trying to build containers inside k8s pods. This avoids
nested containerization complexity.

Features:
- Build from source using mise + Go
- Docker container mode for job isolation
- Can build containers via Docker socket
- Labels: docker-builder (distinct from k8s runner)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:28:44 -08:00

83 lines
2.6 KiB
YAML

---
# Forgejo Runner on indri
#
# Uses Docker container mode for job isolation.
# Can build containers using Docker (via socket).
#
# ONE-TIME SETUP (before running ansible):
#
# 1. Clone forgejo-runner from forge mirror:
# ssh indri 'git clone https://forge.tail8d86e.ts.net/eblume/forgejo-runner.git ~/code/3rd/forgejo-runner'
#
# 2. Set up Go via mise:
# ssh indri 'cd ~/code/3rd/forgejo-runner && mise use go@1.24'
#
# 3. Build:
# ssh indri 'cd ~/code/3rd/forgejo-runner && mise x -- make build'
#
# 4. Run ansible to deploy config and LaunchAgent
- name: Verify forgejo-runner binary exists
ansible.builtin.stat:
path: "{{ forgejo_runner_binary }}"
register: forgejo_runner_binary_stat
- name: Fail if forgejo-runner binary not found
ansible.builtin.fail:
msg: |
Forgejo-runner binary not found at {{ forgejo_runner_binary }}.
Please build from source first:
ssh indri 'cd ~/code/3rd/forgejo-runner && mise x -- make build'
when: not forgejo_runner_binary_stat.stat.exists
- name: Ensure forgejo-runner directories exist
ansible.builtin.file:
path: "{{ item }}"
state: directory
mode: '0755'
loop:
- "{{ forgejo_runner_data_dir }}"
- "{{ forgejo_runner_config_dir }}"
- name: Deploy forgejo-runner config
ansible.builtin.template:
src: config.yaml.j2
dest: "{{ forgejo_runner_config_dir }}/config.yaml"
mode: '0644'
notify: Restart forgejo-runner
- name: Check if runner is registered
ansible.builtin.stat:
path: "{{ forgejo_runner_data_dir }}/.runner"
register: forgejo_runner_registered
- name: Register runner with Forgejo
ansible.builtin.command:
cmd: >
{{ 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
- name: Deploy forgejo-runner LaunchAgent plist
ansible.builtin.template:
src: forgejo-runner.plist.j2
dest: ~/Library/LaunchAgents/mcquack.eblume.forgejo-runner.plist
mode: '0644'
notify: Restart forgejo-runner
- name: Check if forgejo-runner LaunchAgent is loaded
ansible.builtin.command: launchctl list mcquack.eblume.forgejo-runner
register: forgejo_runner_launchctl_check
changed_when: false
failed_when: false
- name: Load forgejo-runner LaunchAgent if not loaded
ansible.builtin.command: launchctl load ~/Library/LaunchAgents/mcquack.eblume.forgejo-runner.plist
when: forgejo_runner_launchctl_check.rc != 0
changed_when: true