Files
homelab-optimized/ansible/automation/playbooks/setup_gitea_runner.yml
Gitea Mirror Bot 2c439c62f7
Some checks failed
Documentation / Build Docusaurus (push) Failing after 18m11s
Documentation / Deploy to GitHub Pages (push) Has been skipped
Sanitized mirror from private repository - 2026-04-18 11:32:59 UTC
2026-04-18 11:32:59 +00:00

141 lines
4.0 KiB
YAML

---
# Setup Gitea Actions Runner
# This playbook sets up a Gitea Actions runner to process workflow jobs
# Run with: ansible-playbook -i hosts.ini playbooks/setup_gitea_runner.yml --limit homelab
#
# The Gitea API token is prompted at runtime and never stored in this file.
# Retrieve the token from Vaultwarden (collection: Homelab > Gitea API Tokens).
- name: Setup Gitea Actions Runner
hosts: homelab
become: yes
vars:
gitea_url: "https://git.vish.gg"
runner_name: "homelab-runner"
runner_labels: "ubuntu-latest,linux,x64"
runner_dir: "/opt/gitea-runner"
vars_prompt:
- name: gitea_token
prompt: "Enter Gitea API token (see Vaultwarden > Homelab > Gitea API Tokens)"
private: yes
tasks:
- name: Create runner directory
file:
path: "{{ runner_dir }}"
state: directory
owner: root
group: root
mode: '0755'
- name: Check if act_runner binary exists
stat:
path: "{{ runner_dir }}/act_runner"
register: runner_binary
- name: Download act_runner binary
get_url:
url: "https://dl.gitea.com/act_runner/0.2.6/act_runner-0.2.6-linux-amd64"
dest: "{{ runner_dir }}/act_runner"
mode: '0755'
owner: root
group: root
when: not runner_binary.stat.exists
- name: Get registration token from Gitea API
uri:
url: "{{ gitea_url }}/api/v1/repos/Vish/homelab-optimized/actions/runners/registration-token"
method: GET
headers:
Authorization: "token {{ gitea_token }}"
return_content: yes
register: registration_response
delegate_to: localhost
run_once: true
- name: Extract registration token
set_fact:
registration_token: "{{ registration_response.json.token }}"
- name: Check if runner is already registered
stat:
path: "{{ runner_dir }}/.runner"
register: runner_config
- name: Register runner with Gitea
shell: |
cd {{ runner_dir }}
echo "{{ gitea_url }}" | {{ runner_dir }}/act_runner register \
--token {{ registration_token }} \
--name {{ runner_name }} \
--labels {{ runner_labels }} \
--no-interactive
when: not runner_config.stat.exists
- name: Create systemd service file
copy:
content: |
[Unit]
Description=Gitea Actions Runner
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory={{ runner_dir }}
ExecStart={{ runner_dir }}/act_runner daemon
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
dest: /etc/systemd/system/gitea-runner.service
owner: root
group: root
mode: '0644'
- name: Reload systemd daemon
systemd:
daemon_reload: yes
- name: Enable and start gitea-runner service
systemd:
name: gitea-runner
enabled: yes
state: started
- name: Check runner status
systemd:
name: gitea-runner
register: runner_status
- name: Display runner status
debug:
msg: |
Gitea Actions Runner Status:
- Service: {{ runner_status.status.ActiveState }}
- Directory: {{ runner_dir }}
- Name: {{ runner_name }}
- Labels: {{ runner_labels }}
- Gitea URL: {{ gitea_url }}
- name: Verify runner registration
uri:
url: "{{ gitea_url }}/api/v1/repos/Vish/homelab-optimized/actions/runners"
method: GET
headers:
Authorization: "token {{ gitea_token }}"
return_content: yes
register: runners_list
delegate_to: localhost
run_once: true
- name: Display registered runners
debug:
msg: |
Registered Runners: {{ runners_list.json.total_count }}
{% for runner in runners_list.json.runners %}
- {{ runner.name }} ({{ runner.status }})
{% endfor %}