From 94dcd1374eac0fbe713e16566a84c8b3d620d594 Mon Sep 17 00:00:00 2001
From: "pulsar89.5" <pulsar89.5@ykn.fr>
Date: Sun, 30 Mar 2025 06:22:54 +0200
Subject: [PATCH] feat: Add compatibility with CoreOS

---
 files/drone-downstream.bash                   | 24 ---------------
 handlers/main.yml                             |  2 +-
 meta/main.yml                                 |  3 ++
 tasks/configuration.yml                       | 28 ++++++------------
 tasks/installation-apt.yml                    |  7 +++++
 tasks/installation-atomic_container.yml       | 19 ++++++++++++
 ...tallation.yml => installation-service.yml} | 29 +++++--------------
 tasks/main.yml                                | 16 ++++++----
 8 files changed, 56 insertions(+), 72 deletions(-)
 delete mode 100644 files/drone-downstream.bash
 create mode 100644 tasks/installation-apt.yml
 create mode 100644 tasks/installation-atomic_container.yml
 rename tasks/{installation.yml => installation-service.yml} (52%)

diff --git a/files/drone-downstream.bash b/files/drone-downstream.bash
deleted file mode 100644
index e9ad841..0000000
--- a/files/drone-downstream.bash
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env bash
-
-# Lancer une pipeline
-request=$(curl --silent --request POST --header "Authorization: Bearer ${DRONE_TOKEN}" ${DRONE_BASE_URL}/api/repos/${DRONE_REPOSITORY_PATH}/builds${DRONE_URL_PARAM} | jq .number)
-
-# Attendre que la pipeline ne soit plus en exécution
-while true; do
-  # Récupérer l'état de la pipeline
-  status=$(curl --silent --request GET --header "Authorization: Bearer ${DRONE_TOKEN}" ${DRONE_BASE_URL}/api/repos/${DRONE_REPOSITORY_PATH}/builds/$request | jq .status)
-
-  case "${status}" in
-    "\"pending\"" | "\"running\"")
-      sleep 5s
-      ;;
-    "\"success\"")
-      echo "${DRONE_REPOSITORY_PATH}: ${status}"
-      exit 0
-      ;;
-    *)
-      echo "${DRONE_REPOSITORY_PATH}: ${status}"
-      exit 1
-      ;;
-  esac
-done
diff --git a/handlers/main.yml b/handlers/main.yml
index 16304e4..c13356a 100644
--- a/handlers/main.yml
+++ b/handlers/main.yml
@@ -1,7 +1,7 @@
 ---
 # handlers file for drone_runner_exec
 
-- name: Redémarrer drone-runner-exec.service
+- name: Restart drone-runner-exec.service
   ansible.builtin.systemd:
     enabled: true
     daemon_reload: true
diff --git a/meta/main.yml b/meta/main.yml
index 5c3b184..1496cb7 100644
--- a/meta/main.yml
+++ b/meta/main.yml
@@ -11,6 +11,9 @@ galaxy_info:
     - name: Debian
       versions:
         - all
+    - name: CoreOS
+      varsions:
+        - 41
 
 dependencies:
   - role: users
diff --git a/tasks/configuration.yml b/tasks/configuration.yml
index 188c34b..cff7cfe 100644
--- a/tasks/configuration.yml
+++ b/tasks/configuration.yml
@@ -1,7 +1,7 @@
 ---
 # tasks file for drone_runner_exec
 
-- name: Créer le dossier de configuration
+- name: Create configuration path
   ansible.builtin.file:
     state: directory
     path: "{{ drone_runner_exec_config_base_path }}"
@@ -10,7 +10,7 @@
     mode: u=rwX,g=rX,o=rX
   become: true
 
-- name: Créer le dossier de journalisation
+- name: Create log path
   ansible.builtin.file:
     state: directory
     path: /var/log/drone-runner-exec
@@ -19,7 +19,7 @@
     mode: u=rwX,g=rX,o=rX
   become: true
 
-- name: Configurer le runner
+- name: Deploy configuration
   ansible.builtin.template:
     src: config.j2
     dest: "{{ drone_runner_exec_config_base_path }}/config"
@@ -29,26 +29,26 @@
   become: true
   notify: Redémarrer drone-runner-exec.service
 
-- name: Récupérer les faits sur les services
+- name: Get service facts
   ansible.builtin.service_facts:
 
-- name: Installer drone-runner.service
+- name: Install runner service
   ansible.builtin.command:
     cmd: >-
-      /opt/drone-runner-exec/drone-runner-exec service install
+      /usr/local/bin/drone-runner-exec service install
       --config="{{ drone_runner_exec_config_base_path }}/config"
   when: "'drone-runner-exec.service' not in ansible_facts.services"
   become: true
-  notify: Redémarrer drone-runner-exec.service
+  notify: Restart drone-runner-exec.service
 
-- name: Créer le dossier de surcharge du service
+- name: Create systemd override directory
   ansible.builtin.file:
     state: directory
     path: /etc/systemd/system/drone-runner-exec.service.d
     mode: u=rwX,g=rX,o=rX
   become: true
 
-- name: Définir l'utilisateur du service
+- name: Deploy systemd override configuration
   ansible.builtin.template:
     src: override.conf.j2
     dest: /etc/systemd/system/drone-runner-exec.service.d/override.conf
@@ -57,13 +57,3 @@
     mode: u=rwX,g=rX,o=rX
   become: true
   notify: Redémarrer drone-runner-exec.service
-
-- name: Déployer le script permettant d'exécuter un pipeline depuis une autre
-  ansible.builtin.copy:
-    src: drone-downstream.bash
-    dest: /opt/drone-runner-exec/drone-downstream.bash
-    owner: root
-    group: root
-    mode: u=rwx,g=rx,o=rx
-  become: true
-  diff: false
diff --git a/tasks/installation-apt.yml b/tasks/installation-apt.yml
new file mode 100644
index 0000000..ecc7d29
--- /dev/null
+++ b/tasks/installation-apt.yml
@@ -0,0 +1,7 @@
+---
+# tasks file for ansible
+
+- name: Install prerequisites
+  ansible.builtin.apt:
+    name: "{{ drone_runner_exec_prerequisites }}"
+  become: true
diff --git a/tasks/installation-atomic_container.yml b/tasks/installation-atomic_container.yml
new file mode 100644
index 0000000..8c8e808
--- /dev/null
+++ b/tasks/installation-atomic_container.yml
@@ -0,0 +1,19 @@
+---
+# tasks file for borgmatic
+
+- name: Install prerequisites
+  ansible.builtin.command:
+    argv: "{{ rpm_ostree + drone_runner_exec_prerequisites }}"
+    creates: /sysroot/ostree/repo/refs/heads/rpmostree/pkg/borgmatic
+  become: true
+  vars:
+    rpm_ostree:
+      - /usr/bin/rpm-ostree
+      - install
+      - --allow-inactive
+      - --assumeyes
+      - --idempotent
+  notify: Apply installation
+
+- name: Flush handlers
+  meta: flush_handlers
diff --git a/tasks/installation.yml b/tasks/installation-service.yml
similarity index 52%
rename from tasks/installation.yml
rename to tasks/installation-service.yml
index 7a60655..178e6d7 100644
--- a/tasks/installation.yml
+++ b/tasks/installation-service.yml
@@ -1,29 +1,14 @@
 ---
 # tasks file for drone_runner_exec
 
-- name: Installer les prérequis
-  ansible.builtin.package:
-    name: "{{ item }}"
-  become: true
-  loop: "{{ drone_runner_exec_prerequisites }}"
-
-- name: Créer le dossier dédié
-  ansible.builtin.file:
-    path: /opt/drone-runner-exec
-    state: directory
-    owner: root
-    group: root
-    mode: u=rwX,g=rX,o=rX
-  become: true
-
-- name: Récupérer le contenu du fichier de version
+- name: Get version file
   ansible.builtin.uri:
     url: "{{ drone_runner_exec_url }}"
     return_content: true
     follow_redirects: all
   register: releases
 
-- name: Extraire l'URL du paquet
+- name: Extract URL
   ansible.builtin.set_fact:
     browser_download_url: >
       {{
@@ -33,14 +18,14 @@
       map(attribute='browser_download_url')
       }}
 
-- name: Extraire le runner
+- name: Install runner
   ansible.builtin.unarchive:
     src: "{{ browser_download_url | first }}"
-    dest: /opt/drone-runner-exec
+    dest: /usr/local/bin/
     remote_src: true
     list_files: true
-    owner: root
-    group: root
+    owner: "{{ drone_runner_exec_user }}"
+    group: "{{ drone_runner_exec_group }}"
     mode: u=rwX,g=rX,o=rX
   become: true
-  notify: Redémarrer drone-runner-exec.service
+  notify: Restart drone-runner-exec.service
diff --git a/tasks/main.yml b/tasks/main.yml
index ff2ee68..cef8f9f 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -1,10 +1,14 @@
 ---
 # tasks file for drone_runner_exec
 
-- name: Importer les tâches d'installation
-  tags: installation
-  ansible.builtin.import_tasks: installation.yml
+- name: Include installation tasks
+  ansible.builtin.include_tasks:
+    file: installation-{{ ansible_facts['pkg_mgr'] }}.yml
 
-- name: Importer les tâches de configuration
-  tags: configuration
-  ansible.builtin.import_tasks: configuration.yml
+- name: Import service installation tasks
+  ansible.builtin.import_tasks:
+    file: installation-service.yml
+
+- name: Import configuration tasks
+  ansible.builtin.import_tasks:
+    file: configuration.yml