feat(forgejo): new forgejo role

This commit is contained in:
NaeiKinDus 2025-06-25 00:00:00 +00:00
parent cf657bcea0
commit 0ce3b20d45
Signed by: WoodSmellParticle
GPG key ID: 8E52ADFF7CA8AE56
16 changed files with 1210 additions and 1 deletions

View file

@ -0,0 +1,32 @@
---
- name: find systemd unit directory
become: true
ansible.builtin.command: pkg-config systemd --variable=systemd_system_conf_dir
changed_when: false
register: systemd_unit_directory_cmd
- name: find systemd version
become: true
ansible.builtin.shell: >
systemctl --version | awk '{if($1=="systemd" && $2~"^[0-9]+$"){print $2}}'
changed_when: false
register: systemd_version_cmd
- name: get local binary version information
ansible.builtin.shell: >
{{ forgejo_binary_filepath }} --version | sed -E 's/\w+\s+\w+\s+([0-9._]+)(\s|\+).*/\1/'
register: forgejo_local_version_cmd
failed_when: false
changed_when: false
- name: check app config file status
become: true
ansible.builtin.stat:
path: '{{ forgejo_config_dir }}/app.ini'
failed_when: false
register: forgejo_config_file_status
- name: set facts
ansible.builtin.set_fact:
forgejo_config_file_present: "{{ True if forgejo_config_file_status.stat.exists and forgejo_config_file_status.stat.size > 0 else False }}"
forgejo_local_installed: "{{ True if (forgejo_local_version_cmd.rc == 0 and forgejo_local_version_cmd.stdout_lines | length > 0) else False }}"
forgejo_local_version: "{{ forgejo_local_version_cmd.stdout_lines[0] | default('0') }}"
forgejo_asset_name: "{{ forgejo_asset_name | default('forgejo-{}-linux-amd64'.format(forgejo_target_version), True) }}"
systemd_unit_directory: "{{ systemd_unit_directory_cmd.stdout }}"
systemd_version: "{{ systemd_version_cmd.stdout | int }}"

View file

@ -0,0 +1,101 @@
---
- name: install dependencies
become: true
ansible.builtin.apt:
update_cache: yes
force_apt_get: true
state: present
cache_valid_time: 3600
pkg:
- git
- git-lfs
- name: gather facts
ansible.builtin.include_tasks: gather_facts.yml
- name: create service group
become: true
ansible.builtin.group:
name: '{{ forgejo_group }}'
system: true
state: present
- name: create service user
become: true
ansible.builtin.user:
name: '{{ forgejo_user }}'
group: '{{ forgejo_group }}'
shell: '/usr/sbin/nologin'
create_home: true
home: '{{ forgejo_home_dir }}'
system: true
state: present
- name: fetch Forgejo binary
become: true
ansible.builtin.get_url:
url: '{{ forgejo_assets_url }}/v{{ forgejo_target_version }}/{{ forgejo_asset_name }}'
checksum: 'sha256:{{ forgejo_assets_url }}/v{{ forgejo_target_version }}/{{ forgejo_asset_name }}.sha256'
mode: 'u=rwx,g=rx,o=rx'
owner: '{{ forgejo_user }}'
group: '{{ forgejo_group }}'
dest: '{{ forgejo_binary_filepath }}'
register: forgejo_install_cmd
- name: create directories
become: true
ansible.builtin.file:
path: '{{ item.path }}'
owner: '{{ item.owner }}'
group: '{{ forgejo_group }}'
mode: '{{ item.mode }}'
state: directory
loop:
- path: '{{ forgejo_config_dir }}'
mode: 'u=rwX,g=rwX,o='
owner: root
- path: '{{ forgejo_install_dir }}'
mode: 'u=rwX,g=rX,o='
owner: '{{ forgejo_user }}'
- name: install systemd unit files
become: true
ansible.builtin.template:
src: ../templates/systemd/forgejo.service.j2
dest: '{{ systemd_unit_directory }}/forgejo.service'
owner: root
group: root
mode: 'u=rwX,g=rX,o='
notify:
- 'forgejo : restart forgejo service'
- name: create app configuration from template
when: forgejo_custom_config is falsy and (forgejo_config_file_present is falsy or forgejo_overwrite_config_file is truthy)
become: true
ansible.builtin.template:
src: '../templates/app.ini.j2'
dest: '{{ forgejo_config_dir }}/app.ini'
owner: '{{ forgejo_user }}'
group: '{{ forgejo_group }}'
mode: 'u=rw,g=r,o='
notify:
- 'forgejo : restart forgejo service'
- name: create app configuration from custom content
when: forgejo_custom_config is truthy and (forgejo_config_file_present is falsy or forgejo_overwrite_config_file is truthy)
become: true
ansible.builtin.copy:
content: '{{ forgejo_custom_config }}'
dest: '{{ forgejo_config_dir }}/app.ini'
owner: '{{ forgejo_user }}'
group: '{{ forgejo_group }}'
mode: 'u=rw,g=r,o='
notify:
- 'forgejo : restart forgejo service'
- name: enable git-related configuration to sshd_config.d
become: true
ansible.builtin.template:
src: '../templates/sshd_config.d/git_env.conf.j2'
dest: '{{ forgejo_sshd_conf_dir }}/git_env.conf'
owner: root
group: root
mode: 'u=rw,g=r,o='
- name: start services
become: true
ansible.builtin.systemd:
name: forgejo.service
enabled: true
state: started
daemon_reload: true