runner

Ansible role that deployes services on my runner machine

5 KBYML
forgejo.yml
5 KB164 lines • yaml
1---
2# Runner Services - Forgejo Git Server
3
4- name: Create Forgejo configuration directories
5  file:
6    path: "{{ item }}"
7    state: directory
8    owner: "{{ runner_user }}"
9    group: "users"
10    mode: '2775'  # setgid bit for inheritance, group writable (umask 002)
11  loop:
12    - "{{ forgejo_config_dir }}"
13    - "{{ forgejo_config_dir }}/data"
14    - "{{ forgejo_config_dir }}/forgejo-runner-data"
15
16- name: Create Forgejo NFS directories
17  file:
18    path: "{{ item }}"
19    state: directory
20    owner: "{{ runner_user }}"
21    group: "users"
22    mode: '2775'  # setgid bit for inheritance, group writable (umask 002)
23  loop:
24    - "{{ forgejo_data_dir }}"
25    - "{{ forgejo_data_dir }}/git"
26    - "{{ forgejo_data_dir }}/lfs"
27
28- name: Generate Forgejo environment file
29  template:
30    src: forgejo.env.j2
31    dest: "{{ forgejo_config_dir }}/.env"
32    owner: "{{ runner_user }}"
33    group: "users"
34    mode: '0664'
35  notify: restart forgejo
36
37- name: Create Forgejo runner config
38  template:
39    src: forgejo-runner-config.yaml.j2
40    dest: "{{ forgejo_config_dir }}/forgejo-runner-data/config.yaml"
41    owner: "{{ runner_user }}"
42    group: "{{ runner_group }}"
43    mode: '0664'
44
45- name: Create Forgejo Dockerfile
46  template:
47    src: forgejo-Dockerfile.j2
48    dest: "{{ forgejo_config_dir }}/Dockerfile"
49    owner: "{{ runner_user }}"
50    group: "{{ runner_group }}"
51    mode: '0664'
52
53- name: Create Forgejo Docker Compose file
54  template:
55    src: forgejo-compose.yml.j2
56    dest: "{{ forgejo_config_dir }}/docker-compose.yml"
57    owner: "{{ runner_user }}"
58    group: "{{ runner_group }}"
59    mode: '0664'
60  notify: restart forgejo
61
62- name: Check if Forgejo is already running
63  community.docker.docker_compose_v2:
64    project_src: "{{ forgejo_config_dir }}"
65    state: present
66    restarted: false
67  register: forgejo_running
68  changed_when: false
69  failed_when: false
70
71- name: Start Forgejo service
72  community.docker.docker_compose_v2:
73    project_src: "{{ forgejo_config_dir }}"
74    state: present
75  register: forgejo_start_result
76  check_mode: no
77
78- name: Wait for Forgejo to be healthy
79  uri:
80    url: "http://localhost:{{ forgejo_http_port }}/api/v1/version"
81    method: GET
82    status_code: 200
83  register: forgejo_health
84  until: forgejo_health.status == 200
85  retries: 30
86  delay: 10
87  when: forgejo_start_result is changed
88  check_mode: no
89
90- name: Create SSH key directory for git operations
91  file:
92    path: "{{ forgejo_config_dir }}/ssh"
93    state: directory
94    owner: "{{ runner_user }}"
95    group: "{{ runner_group }}"
96    mode: '0700'
97
98- name: Generate SSH host keys for Forgejo
99  command: ssh-keygen -t {{ item.type }} -f {{ forgejo_config_dir }}/ssh/ssh_host_{{ item.type }}_key -N ""
100  args:
101    creates: "{{ forgejo_config_dir }}/ssh/ssh_host_{{ item.type }}_key"
102  loop:
103    - { type: "rsa" }
104    - { type: "ecdsa" }
105    - { type: "ed25519" }
106  check_mode: no
107
108- name: Set proper permissions on SSH keys
109  file:
110    path: "{{ forgejo_config_dir }}/ssh/ssh_host_{{ item.type }}_key"
111    owner: "{{ runner_user }}"
112    group: "{{ runner_group }}"
113    mode: '0664'
114  loop:
115    - { type: "rsa" }
116    - { type: "ecdsa" }
117    - { type: "ed25519" }
118
119
120- name: Create Forgejo Git hooks directory
121  file:
122    path: "{{ forgejo_config_dir }}/git/hooks"
123    state: directory
124    owner: "{{ runner_user }}"
125    group: "{{ runner_group }}"
126    mode: '0755'
127
128- name: Display Forgejo deployment summary
129  debug:
130    msg: |
131      Forgejo Git Server Deployment:
132      - Status: {{ 'Started' if forgejo_start_result is changed else 'Already running' }}
133      - Web UI: http://{{ ansible_default_ipv4.address }}:{{ forgejo_http_port }}
134      - SSH Clone: ssh://git@{{ ansible_default_ipv4.address }}:{{ forgejo_ssh_port }}/user/repo.git
135      - HTTP Clone: http://{{ ansible_default_ipv4.address }}:{{ forgejo_http_port }}/user/repo.git
136      - API Endpoint: http://{{ ansible_default_ipv4.address }}:{{ forgejo_http_port }}/api/v1
137      - Configuration: {{ forgejo_config_dir }}/config/app.ini
138      - Data Storage: {{ forgejo_data_dir }}
139      - Repository Storage: {{ forgejo_data_dir }}/git/repositories
140      - Database: {{ forgejo_db_type | upper }}
141      - SSH Domain: {{ forgejo_ssh_domain }}
142      {% if forgejo_runner_enabled %}
143      - CI/CD Runner: {{ 'Enabled' if forgejo_runner_enabled else 'Disabled' }}
144      - Runner Token: {{ forgejo_runner_token }}
145      - Runner Name: {{ forgejo_runner_name }}
146      - Runner Data: {{ forgejo_config_dir }}/forgejo-runner-data
147      {% endif %}
148      
149      Management Commands:
150      - forgejo-logs.sh - View service logs
151      - forgejo-restart.sh - Restart service
152      - forgejo-status.sh - Check service status
153      - forgejo-backup.sh - Backup repositories and database
154      - forgejo-cli.sh - Administration CLI
155      
156      Initial Setup:
157      1. Visit {{ forgejo_domain }}:{{ forgejo_http_port }}
158      2. Complete the installation wizard
159      3. Create admin account
160      4. Configure organization and repository settings
161      {% if forgejo_runner_enabled %}
162      5. Runner will auto-register with the Forgejo instance
163      {% endif %}
164