327 lines
8.3 KiB
YAML
327 lines
8.3 KiB
YAML
---
|
|
# Tâches principales pour le déploiement de Forgejo
|
|
|
|
- name: Installer les dépendances système
|
|
apt:
|
|
name:
|
|
- git
|
|
- wget
|
|
- curl
|
|
- sqlite3
|
|
- build-essential
|
|
- tar
|
|
- acl
|
|
- ca-certificates
|
|
- gnupg
|
|
- rsync
|
|
state: present
|
|
update_cache: yes
|
|
tags: [install, dependencies]
|
|
|
|
- name: Créer le répertoire pour les clés APT
|
|
file:
|
|
path: /usr/share/keyrings
|
|
state: directory
|
|
mode: '0755'
|
|
tags: [install, dependencies]
|
|
|
|
- name: Télécharger la clé GPG NodeSource
|
|
get_url:
|
|
url: https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key
|
|
dest: /tmp/nodesource.gpg.key
|
|
mode: '0644'
|
|
tags: [install, dependencies]
|
|
|
|
- name: Déarmer la clé GPG et l'installer
|
|
shell: |
|
|
cat /tmp/nodesource.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg
|
|
chmod 644 /usr/share/keyrings/nodesource.gpg
|
|
args:
|
|
creates: /usr/share/keyrings/nodesource.gpg
|
|
tags: [install, dependencies]
|
|
|
|
- name: Ajouter le dépôt NodeSource pour Node.js 20.x
|
|
apt_repository:
|
|
repo: "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main"
|
|
state: present
|
|
filename: nodesource
|
|
tags: [install, dependencies]
|
|
|
|
- name: Installer Node.js
|
|
apt:
|
|
name: nodejs
|
|
state: present
|
|
update_cache: yes
|
|
tags: [install, dependencies]
|
|
|
|
- name: Vérifier l'installation de Node.js et npm
|
|
shell: |
|
|
echo "Node: $(node --version)"
|
|
echo "npm: $(npm --version)"
|
|
register: node_npm_version
|
|
changed_when: false
|
|
tags: [install, dependencies]
|
|
|
|
- name: Afficher les versions Node.js et npm
|
|
debug:
|
|
msg: "{{ node_npm_version.stdout_lines }}"
|
|
tags: [install, dependencies]
|
|
|
|
- name: Vérifier si Go est installé et sa version
|
|
shell: |
|
|
if command -v go &> /dev/null; then
|
|
version=$(go version | awk '{print $3}' | sed 's/go//')
|
|
if [ ! -z "$version" ]; then
|
|
# Extraire la version majeure.mineure
|
|
major_minor=$(echo $version | cut -d. -f1,2)
|
|
# Vérifier si >= 1.21
|
|
if awk "BEGIN {exit !($major_minor >= 1.21)}"; then
|
|
echo "ok"
|
|
else
|
|
echo "old"
|
|
fi
|
|
else
|
|
echo "none"
|
|
fi
|
|
else
|
|
echo "none"
|
|
fi
|
|
register: go_status
|
|
changed_when: false
|
|
tags: [install, build]
|
|
|
|
- name: Définir la version de Go requise
|
|
set_fact:
|
|
go_required_version: "1.22.2"
|
|
tags: [install, build]
|
|
|
|
- name: Afficher le statut de Go
|
|
debug:
|
|
msg: "Statut Go : {{ go_status.stdout }}"
|
|
tags: [install, build]
|
|
|
|
- name: Installer ou mettre à jour Go
|
|
block:
|
|
- name: Supprimer l'ancienne installation de Go
|
|
file:
|
|
path: /usr/local/go
|
|
state: absent
|
|
|
|
- name: Télécharger Go {{ go_required_version }}
|
|
get_url:
|
|
url: "https://go.dev/dl/go{{ go_required_version }}.linux-amd64.tar.gz"
|
|
dest: "/tmp/go{{ go_required_version }}.linux-amd64.tar.gz"
|
|
mode: '0644'
|
|
|
|
- name: Extraire Go
|
|
unarchive:
|
|
src: "/tmp/go{{ go_required_version }}.linux-amd64.tar.gz"
|
|
dest: /usr/local
|
|
remote_src: yes
|
|
|
|
- name: Nettoyer le tarball
|
|
file:
|
|
path: "/tmp/go{{ go_required_version }}.linux-amd64.tar.gz"
|
|
state: absent
|
|
|
|
- name: Configurer le PATH pour Go
|
|
copy:
|
|
content: |
|
|
export PATH=$PATH:/usr/local/go/bin
|
|
export GOPATH=$HOME/go
|
|
export PATH=$PATH:$GOPATH/bin
|
|
dest: /etc/profile.d/go.sh
|
|
mode: '0755'
|
|
|
|
when: go_status.stdout != "ok"
|
|
tags: [install, build]
|
|
|
|
- name: Vérifier l'installation de Go
|
|
command: /usr/local/go/bin/go version
|
|
register: go_final_version
|
|
changed_when: false
|
|
tags: [install, build]
|
|
|
|
- name: Afficher la version de Go installée
|
|
debug:
|
|
msg: "✓ Go installé: {{ go_final_version.stdout }}"
|
|
tags: [install, build]
|
|
|
|
- name: Créer le groupe système pour Forgejo
|
|
group:
|
|
name: "{{ forgejo_group }}"
|
|
system: yes
|
|
state: present
|
|
tags: [install]
|
|
|
|
- name: Créer l'utilisateur système pour Forgejo
|
|
user:
|
|
name: "{{ forgejo_user }}"
|
|
group: "{{ forgejo_group }}"
|
|
system: yes
|
|
home: "{{ forgejo_home }}"
|
|
shell: /bin/bash
|
|
create_home: yes
|
|
state: present
|
|
tags: [install]
|
|
|
|
- name: Créer les répertoires nécessaires
|
|
file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
owner: "{{ forgejo_user }}"
|
|
group: "{{ forgejo_group }}"
|
|
mode: '0755'
|
|
loop:
|
|
- "{{ forgejo_home }}"
|
|
- "{{ forgejo_data_dir }}"
|
|
- "{{ forgejo_custom_dir }}"
|
|
- "{{ forgejo_custom_dir }}/conf"
|
|
- "{{ forgejo_log_dir }}"
|
|
- "{{ forgejo_data_dir }}/repositories"
|
|
- "{{ forgejo_data_dir }}/actions"
|
|
tags: [install]
|
|
|
|
- name: Supprimer le répertoire source existant (si présent)
|
|
file:
|
|
path: "{{ forgejo_home }}/src"
|
|
state: absent
|
|
when: ansible_check_mode == false
|
|
tags: [install, build]
|
|
|
|
- name: Cloner le dépôt Forgejo depuis les sources
|
|
git:
|
|
repo: 'https://codeberg.org/forgejo/forgejo.git'
|
|
dest: "{{ forgejo_home }}/src"
|
|
version: "v{{ forgejo_version }}"
|
|
force: yes
|
|
tags: [install, build]
|
|
|
|
- name: Changer le propriétaire du code source
|
|
file:
|
|
path: "{{ forgejo_home }}/src"
|
|
owner: "{{ forgejo_user }}"
|
|
group: "{{ forgejo_group }}"
|
|
recurse: yes
|
|
tags: [install, build]
|
|
|
|
- name: Configurer Git safe.directory pour l'utilisateur git
|
|
become_user: "{{ forgejo_user }}"
|
|
command: git config --global --add safe.directory {{ forgejo_home }}/src
|
|
args:
|
|
creates: /home/{{ forgejo_user }}/.gitconfig
|
|
tags: [install, build]
|
|
|
|
- name: Vérifier que Node.js est accessible
|
|
command: which node
|
|
register: node_path
|
|
failed_when: node_path.rc != 0
|
|
changed_when: false
|
|
tags: [install, build]
|
|
|
|
- name: Vérifier que npm est accessible
|
|
command: which npm
|
|
register: npm_path
|
|
failed_when: npm_path.rc != 0
|
|
changed_when: false
|
|
tags: [install, build]
|
|
|
|
- name: Afficher les chemins Node.js et npm
|
|
debug:
|
|
msg:
|
|
- "Node.js: {{ node_path.stdout }}"
|
|
- "npm: {{ npm_path.stdout }}"
|
|
tags: [install, build]
|
|
|
|
- name: Compiler Forgejo depuis les sources
|
|
shell: |
|
|
cd {{ forgejo_home }}/src
|
|
export PATH=/usr/local/go/bin:/usr/bin:$PATH
|
|
export NODE_PATH=/usr/lib/node_modules
|
|
TAGS="bindata sqlite sqlite_unlock_notify" make build
|
|
become_user: "{{ forgejo_user }}"
|
|
environment:
|
|
GOPATH: "{{ forgejo_home }}/go"
|
|
PATH: "/usr/local/go/bin:/usr/bin:{{ ansible_env.PATH }}"
|
|
NODE_PATH: "/usr/lib/node_modules"
|
|
tags: [install, build]
|
|
|
|
- name: Vérifier quel binaire a été créé
|
|
find:
|
|
paths: "{{ forgejo_home }}/src"
|
|
patterns:
|
|
- "forgejo"
|
|
- "gitea"
|
|
file_type: file
|
|
register: binary_files
|
|
tags: [install, build]
|
|
|
|
- name: Afficher les binaires trouvés
|
|
debug:
|
|
msg: "Binaires trouvés: {{ binary_files.files | map(attribute='path') | list }}"
|
|
tags: [install, build]
|
|
|
|
- name: Déterminer le nom du binaire
|
|
set_fact:
|
|
source_binary: "{{ binary_files.files[0].path if binary_files.files | length > 0 else '' }}"
|
|
tags: [install, build]
|
|
|
|
- name: Échouer si aucun binaire trouvé
|
|
fail:
|
|
msg: "Aucun binaire Forgejo/Gitea trouvé dans {{ forgejo_home }}/src"
|
|
when: source_binary == ""
|
|
tags: [install, build]
|
|
|
|
- name: Copier le binaire Forgejo
|
|
copy:
|
|
src: "{{ source_binary }}"
|
|
dest: "{{ forgejo_home }}/forgejo"
|
|
remote_src: yes
|
|
owner: "{{ forgejo_user }}"
|
|
group: "{{ forgejo_group }}"
|
|
mode: '0755'
|
|
tags: [install, build]
|
|
|
|
- name: Créer le fichier de configuration app.ini
|
|
template:
|
|
src: app.ini.j2
|
|
dest: "{{ forgejo_custom_dir }}/conf/app.ini"
|
|
owner: "{{ forgejo_user }}"
|
|
group: "{{ forgejo_group }}"
|
|
mode: '0640'
|
|
notify: restart forgejo
|
|
tags: [config]
|
|
|
|
- name: Créer le service systemd
|
|
template:
|
|
src: forgejo.service.j2
|
|
dest: /etc/systemd/system/forgejo.service
|
|
mode: '0644'
|
|
notify:
|
|
- reload systemd
|
|
- restart forgejo
|
|
tags: [install, service]
|
|
|
|
- name: Activer et démarrer le service Forgejo
|
|
systemd:
|
|
name: forgejo
|
|
enabled: yes
|
|
state: started
|
|
daemon_reload: yes
|
|
tags: [install, service]
|
|
|
|
- name: Attendre que Forgejo soit prêt
|
|
wait_for:
|
|
port: "{{ forgejo_port }}"
|
|
timeout: 60
|
|
tags: [install]
|
|
|
|
- name: Configurer Forgejo Actions (CI/CD)
|
|
include_tasks: actions.yml
|
|
when: forgejo_enable_actions | bool
|
|
tags: [ci, actions]
|
|
|
|
- name: Créer un runner Forgejo pour CI/CD
|
|
include_tasks: runner.yml
|
|
when: forgejo_enable_actions | bool
|
|
tags: [ci, runner]
|