From 6a4a182cf573ce7903bebd24342a609c04446bb0 Mon Sep 17 00:00:00 2001
From: "Kenneth Benzie (Benie)" <benie@infektor.net>
Date: Fri, 28 Oct 2022 19:41:16 +0100
Subject: [PATCH] Add role for yq on Debina, macOS, and Windows

---
 roles/yq/tasks/Darwin.yaml  |  5 +++++
 roles/yq/tasks/Debian.yaml  | 37 +++++++++++++++++++++++++++++++++++++
 roles/yq/tasks/Windows.yaml |  5 +++++
 roles/yq/tasks/main.yaml    |  2 ++
 4 files changed, 49 insertions(+)
 create mode 100644 roles/yq/tasks/Darwin.yaml
 create mode 100644 roles/yq/tasks/Debian.yaml
 create mode 100644 roles/yq/tasks/Windows.yaml
 create mode 100644 roles/yq/tasks/main.yaml

diff --git a/roles/yq/tasks/Darwin.yaml b/roles/yq/tasks/Darwin.yaml
new file mode 100644
index 0000000..148ca99
--- /dev/null
+++ b/roles/yq/tasks/Darwin.yaml
@@ -0,0 +1,5 @@
+---
+- name: install homebrew package
+  homebrew:
+    name: yq
+    state: latest
diff --git a/roles/yq/tasks/Debian.yaml b/roles/yq/tasks/Debian.yaml
new file mode 100644
index 0000000..594d31d
--- /dev/null
+++ b/roles/yq/tasks/Debian.yaml
@@ -0,0 +1,37 @@
+---
+- name: get latest github release
+  uri:
+    url: https://api.github.com/repos/mikefarah/yq/releases/latest
+  register: latest
+
+- set_fact:
+    asset_query: '[?contains(name, `yq_linux_amd64`)] | [0]'
+    assets: '{{latest.json.assets}}'
+    latest_version: '{{latest.json.tag_name[1:]}}'
+    yq_exe: '{{ansible_env.HOME}}/.local/bin/yq'
+
+- name: check if alreayd installed
+  stat:
+    path: '{{yq_exe}}'
+  register: yq_stat
+
+- name: get installed version
+  when: yq_stat.stat.exists == True
+  command: '{{yq_exe}} --version'
+  register: yq_version_output
+  changed_when: false
+
+- when: yq_stat.stat.exists == True
+  set_fact:
+    installed_version:
+      '{{yq_version_output.stdout.strip() | regex_replace("^.*(\d+\.\d+\.\d+).*$", "\1")}}'
+
+- set_fact:
+    asset: '{{assets | to_json | from_json | json_query(asset_query)}}'
+
+- name: download executable
+  when: installed_version is not defined or installed_version != latest_version
+  get_url:
+    url: '{{asset.browser_download_url}}'
+    dest: '{{yq_exe}}'
+    mode: +x
diff --git a/roles/yq/tasks/Windows.yaml b/roles/yq/tasks/Windows.yaml
new file mode 100644
index 0000000..7c87b36
--- /dev/null
+++ b/roles/yq/tasks/Windows.yaml
@@ -0,0 +1,5 @@
+---
+- name: install chocolatey package
+  win_chocolatey:
+    name: yq
+    state: latest
diff --git a/roles/yq/tasks/main.yaml b/roles/yq/tasks/main.yaml
new file mode 100644
index 0000000..6853678
--- /dev/null
+++ b/roles/yq/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- include_tasks: '{{ansible_os_family}}.yaml'