new role gitea_repo

This commit is contained in:
2024-08-16 13:52:17 +02:00
parent 1b832cbd1d
commit 459d255471
15 changed files with 336 additions and 16 deletions

View File

@@ -0,0 +1,9 @@
---
# Nom du dépôt à créer
gitea_repo_name: factory
gitea_username: arcodange
gitea_organization: arcodange-org
# URL de base du serveur Gitea
gitea_base_url: http://{{ groups.gitea[0] }}:3000

View File

@@ -0,0 +1,133 @@
- name: Generate Gitea Token
when: gitea_api_token is undefined
include_role:
name: arcodange.factory.gitea_token
- name: Vérifier si le dépôt existe dans Gitea
uri:
url: "{{ gitea_base_url }}/api/v1/repos/{{ gitea_organization }}/{{ gitea_repo_name }}"
method: GET
headers:
Authorization: "token {{ gitea_api_token }}"
status_code: 200
register: gitea_repo_check
ignore_errors: yes
- name: Vérifier si le dépôt existe sur GitLab
uri:
url: "https://gitlab.com/api/v4/projects/{{ gitlab_root_group }}%2F{{ gitea_repo_name }}"
method: GET
headers:
Authorization: "Bearer {{ gitlab_api_token }}"
status_code: 200
register: gitlab_repo_check
ignore_errors: yes
- name: Vérifier si le dépôt existe sur GitHub
uri:
url: "https://api.github.com/repos/{{ github_organization }}/{{ gitea_repo_name }}"
method: GET
headers:
Authorization: "token {{ github_api_token }}"
status_code: 200
register: github_repo_check
ignore_errors: yes
- name: Importer un dépôt GitLab/GitHub vers Gitea
when: gitea_repo_check.status != 200 and (gitlab_repo_check.status == 200 or github_repo_check.status == 200)
uri:
url: "{{ gitea_base_url }}/api/v1/repos/migrate"
method: POST
headers:
Authorization: "token {{ gitea_api_token }}"
status_code: 201
body_format: json
body:
service: "{{ (gitlab_repo_check.status == 200) | ternary('gitlab','github') }}"
# URL du dépôt GitHub/GitLab
clone_addr: >-
{{ (gitlab_repo_check.status == 200) | ternary(gitlab_mirror_url,github_mirror_url) }}
auth_username: "{{ gitea_username }}" # Nom d'utilisateur pour l'authentification si nécessaire
# token d'accès
auth_token: >-
{{ (gitlab_repo_check.status == 200) | ternary(gitlab_api_token,github_api_token) }}
repo_name: "{{ gitea_repo_name }}" # Nom du dépôt dans Gitea
repo_owner: "{{ github_organization }}" # Propriétaire du dépôt dans Gitea (utilisateur ou organisation
mirror: true # Activer le mirroring pour synchroniser les changements
register: migration_result
- name: Vérifier l'importation du dépôt
debug:
msg: "Migration du dépôt vers Gitea réussie. ID du dépôt : {{ migration_result.json.id }}"
when: migration_result is defined and (migration_result.status|default(omit)) == 201
- name: Créer un dépôt sur GitLab si nécessaire
uri:
url: "https://gitlab.com/api/v4/projects"
method: POST
headers:
Authorization: "Bearer {{ gitlab_api_token }}"
body_format: json
body:
name: "{{ gitea_repo_name }}"
path: "{{ gitea_repo_name }}"
namespace_id: "{{ gitlab_namespace_id }}" # Remplacez par l'ID du groupe ou de l'utilisateur où le projet doit être créé
visibility: "{{ gitlab_repo_visibility | default('private') }}" # Définir la visibilité (private, internal, public)
description: "{{ gitea_repo_description | default('') }}"
status_code: 201
when: gitlab_repo_check.status != 200
- name: Créer un dépôt sur GitHub si nécessaire
uri:
url: "https://api.github.com/orgs/{{ github_organization }}/repos"
method: POST
headers:
Authorization: "token {{ github_api_token }}"
body_format: json
body:
name: "{{ gitea_repo_name }}"
description: "{{ gitea_repo_description | default('') }}"
private: "{{ github_repo_private | default(true) }}" # Définir si le dépôt est privé ou public
status_code: 201
when: github_repo_check.status != 200
- name: Vérifier l'existence des miroirs push sur GitHub et GitLab
uri:
url: "{{ gitea_base_url }}/api/v1/repos/{{ gitea_organization }}/{{ gitea_repo_name }}/push_mirrors"
method: GET
headers:
Authorization: "token {{ gitea_api_token }}"
return_content: yes
register: existing_mirrors
- name: Ajouter un miroir push vers GitHub si nécessaire
uri:
url: "{{ gitea_base_url }}/api/v1/repos/{{ gitea_organization }}/{{ gitea_repo_name }}/push_mirrors"
method: POST
headers:
Authorization: "token {{ gitea_api_token }}"
body_format: json
body:
interval: "8h"
remote_address: "{{ github_mirror_url }}"
remote_username: "{{ gitea_username }}"
remote_password: "{{ github_api_token }}"
sync_on_commit: true
status_code: 200
when: "github_mirror_url not in existing_mirrors.json | map(attribute='remote_address') | list"
- name: Ajouter un miroir push vers GitLab si nécessaire
uri:
url: "{{ gitea_base_url }}/api/v1/repos/{{ gitea_organization }}/{{ gitea_repo_name }}/push_mirrors"
method: POST
headers:
Authorization: "token {{ gitea_api_token }}"
body_format: json
body:
interval: "8h"
remote_address: "{{ gitlab_mirror_url }}"
remote_username: "{{ gitea_username }}"
remote_password: "{{ gitlab_api_token }}"
sync_on_commit: true
status_code: 200
when: "gitlab_mirror_url not in existing_mirrors.json | map(attribute='remote_address') | list"

View File

@@ -0,0 +1,10 @@
github_api_token: '{{ hostvars[groups.gitea[0]].gitea_vault.github_api_token }}'
gitlab_api_token: '{{ hostvars[groups.gitea[0]].gitea_vault.gitlab_api_token }}'
github_organization: '{{ gitea_organization }}'
gitlab_root_group: '{{ gitea_organization }}'
gitlab_namespace_id: 89826881 # https://gitlab.com/groups/arcodange-org/-/edit
# URLs des miroirs sur GitLab et GitHub
gitlab_mirror_url: "https://gitlab.com/{{ gitlab_root_group | default(gitlab_username | default(gitea_username)) }}/{{ gitea_repo_name }}.git"
github_mirror_url: "https://github.com/{{ github_organization | default(github_username | default(gitea_username)) }}/{{ gitea_repo_name }}.git"

View File

@@ -0,0 +1,4 @@
gitea_user_name: arcodange
gitea_container_name: gitea
gitea_token_scopes: write:admin,write:organization,write:package,write:repository,write:user
# gitea_base_url: 'http://{{ groups.gitea[0] }}:3000'

View File

@@ -0,0 +1,23 @@
# to see generated tokens
# go to https://gitea.arcodange.duckdns.org/user/settings/applications
- when: gitea_api_token is undefined
block:
- name: Create new token for ansible
delegate_to: "{{ groups.gitea[0] }}"
delegate_facts: true
ansible.builtin.command: >-
docker exec -u git {{ gitea_container_name }}
gitea admin user generate-access-token
--username {{ gitea_user_name }}
--token-name {{ gitea_token_name }}
--raw
--scopes {{gitea_token_scopes}}
register: gitea_api_token_cmd
vars:
# ansible_date_time requires having gathered facts
gitea_token_name: ansible-{{ ansible_date_time.iso8601 }}
- ansible.builtin.set_fact:
gitea_api_token: '{{ gitea_api_token_cmd.stdout }}'