Set-OPS-Public/roles/serveur_forgejo/tasks/main.yml
Daniel Allaire e9ca943425 Forgejo : identité visuelle Alliance (custom/ officiel, léger)
Branding via le dossier custom/ de Forgejo (mécanisme officiel, résistant
aux MAJ) : accent aurore par variables CSS, logo/favicon étoile, page
d'accueil brandée (home.tmpl), thème sombre, nom + méta. Codifié dans
serveur_forgejo (branding/app_name/theme). Prouvé sur forge-01.

+ CHANGELOG : entrées wiki pédagogique (14 unités) et GUI (boutons cohérents).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
EOF
2026-07-04 15:47:39 -04:00

160 lines
5.1 KiB
YAML

---
- name: Exiger les secrets Forgejo (Vault)
ansible.builtin.assert:
that:
- serveur_forgejo_secret_key | length > 0
- serveur_forgejo_internal_token | length > 0
- serveur_forgejo_admin_password | length > 0
fail_msg: "secret_key, internal_token et admin_password sont requis (Ansible Vault)."
- name: Resoudre la base de donnees depuis le registre (role partage)
ansible.builtin.include_role:
name: resoudre_base
vars:
resoudre_base_groupe: "{{ serveur_forgejo_groupe }}"
- name: Adopter les facts de base pour Forgejo
ansible.builtin.set_fact:
serveur_forgejo_entree: "{{ resoudre_base_entree }}"
serveur_forgejo_db_password: "{{ resoudre_base_db_password }}"
serveur_forgejo_db_host: "{{ resoudre_base_db_host }}"
serveur_forgejo_db_port: "{{ resoudre_base_db_port }}"
no_log: true
- name: Creer l'utilisateur systeme git
ansible.builtin.user:
name: "{{ serveur_forgejo_utilisateur }}"
system: true
shell: /bin/bash
home: "/home/{{ serveur_forgejo_utilisateur }}"
create_home: true
comment: "Git Version Control"
- name: Telecharger le binaire Forgejo
ansible.builtin.get_url:
url: "{{ serveur_forgejo_url }}"
dest: "/usr/local/bin/forgejo-{{ serveur_forgejo_version }}"
owner: root
group: root
mode: "0755"
- name: Activer la version courante du binaire
ansible.builtin.file:
src: "/usr/local/bin/forgejo-{{ serveur_forgejo_version }}"
dest: "{{ serveur_forgejo_binaire }}"
state: link
notify: Redemarrer forgejo
- name: Creer les repertoires de donnees
ansible.builtin.file:
path: "{{ serveur_forgejo_data }}/{{ item }}"
state: directory
owner: "{{ serveur_forgejo_utilisateur }}"
group: "{{ serveur_forgejo_utilisateur }}"
mode: "0750"
loop:
- ""
- custom
- data
- log
- name: Creer le repertoire de configuration
ansible.builtin.file:
path: "{{ serveur_forgejo_config_dir }}"
state: directory
owner: root
group: "{{ serveur_forgejo_utilisateur }}"
mode: "0770"
- name: Deployer app.ini
ansible.builtin.template:
src: app.ini.j2
dest: "{{ serveur_forgejo_config }}"
owner: "{{ serveur_forgejo_utilisateur }}" # Forgejo persiste des secrets générés (oauth2 JWT) → doit pouvoir écrire
group: "{{ serveur_forgejo_utilisateur }}"
mode: "0640"
no_log: true
notify: Redemarrer forgejo
- name: Deployer l'identite visuelle (logo, favicon, accent aurore, accueil)
ansible.builtin.copy:
src: custom/
dest: "{{ serveur_forgejo_data }}/custom/"
owner: "{{ serveur_forgejo_utilisateur }}"
group: "{{ serveur_forgejo_utilisateur }}"
mode: "0644"
directory_mode: "0755"
when: serveur_forgejo_branding | bool
notify: Redemarrer forgejo
- name: Deployer l'unite systemd forgejo
ansible.builtin.template:
src: forgejo.service.j2
dest: /etc/systemd/system/forgejo.service
owner: root
group: root
mode: "0644"
notify: Redemarrer forgejo
- name: Activer et demarrer Forgejo
when: not ansible_check_mode
ansible.builtin.systemd:
name: "{{ serveur_forgejo_service }}"
enabled: true
state: started
daemon_reload: true
- name: Appliquer les redemarrages Forgejo (config a jour) avant admin/OAuth2
ansible.builtin.meta: flush_handlers
- name: Attendre que Forgejo reponde (migrations terminees)
ansible.builtin.wait_for:
host: 127.0.0.1
port: "{{ serveur_forgejo_http_port }}"
timeout: 120
when: not ansible_check_mode
- name: Creer le compte administrateur (une fois)
ansible.builtin.shell:
cmd: >-
{{ serveur_forgejo_binaire }} admin user create
--admin --username {{ serveur_forgejo_admin_user }}
--email {{ serveur_forgejo_admin_email }}
--password '{{ serveur_forgejo_admin_password }}'
--config {{ serveur_forgejo_config }}
&& touch {{ serveur_forgejo_data }}/.admin-created
creates: "{{ serveur_forgejo_data }}/.admin-created"
become: true
become_user: "{{ serveur_forgejo_utilisateur }}"
environment:
GITEA_WORK_DIR: "{{ serveur_forgejo_data }}"
no_log: true
- name: Configurer la source OAuth2 SSO (Keycloak, idempotent)
ansible.builtin.shell:
executable: /bin/bash
cmd: |
set -euo pipefail
FJ="{{ serveur_forgejo_binaire }} --config {{ serveur_forgejo_config }}"
if $FJ admin auth list 2>/dev/null | grep -qw "{{ serveur_forgejo_oidc_nom }}"; then
echo SETOPS_OK
else
$FJ admin auth add-oauth \
--name "{{ serveur_forgejo_oidc_nom }}" \
--provider openidConnect \
--key "{{ serveur_forgejo_oidc_client_id }}" \
--secret "$OIDC_SECRET" \
--auto-discover-url "{{ serveur_forgejo_oidc_discovery }}" >/dev/null
echo SETOPS_CHANGED
fi
environment:
OIDC_SECRET: "{{ serveur_forgejo_oidc_client_secret }}"
GITEA_WORK_DIR: "{{ serveur_forgejo_data }}"
become: true
become_user: "{{ serveur_forgejo_utilisateur }}"
register: serveur_forgejo_oauth
changed_when: "'SETOPS_CHANGED' in serveur_forgejo_oauth.stdout"
no_log: true
when:
- serveur_forgejo_oidc_actif | bool
- not ansible_check_mode