new role gitea_repo
This commit is contained in:
@@ -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
|
||||
133
ansible/arcodange/factory/roles/gitea_repo/tasks/main.yml
Normal file
133
ansible/arcodange/factory/roles/gitea_repo/tasks/main.yml
Normal 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"
|
||||
10
ansible/arcodange/factory/roles/gitea_repo/vars/main.yml
Normal file
10
ansible/arcodange/factory/roles/gitea_repo/vars/main.yml
Normal 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"
|
||||
@@ -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'
|
||||
23
ansible/arcodange/factory/roles/gitea_token/tasks/main.yml
Normal file
23
ansible/arcodange/factory/roles/gitea_token/tasks/main.yml
Normal 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 }}'
|
||||
Reference in New Issue
Block a user