Refactor online tool installation flows

This commit is contained in:
Fabio Scotto di Santolo
2026-04-10 21:54:28 +02:00
parent d045299f59
commit c2773fe236
2 changed files with 142 additions and 148 deletions

View File

@@ -349,37 +349,6 @@
- "{{ user_home }}/Maildir/iCloudAccount" - "{{ user_home }}/Maildir/iCloudAccount"
- "{{ user_home }}/Maildir/ProtonMailAccount" - "{{ user_home }}/Maildir/ProtonMailAccount"
- name: Clone st repository
tags: [packages]
ansible.builtin.git:
repo: https://codeberg.org/fscotto/st
dest: "{{ user_home }}/.local/src/st"
update: true
become_user: "{{ username }}"
environment:
HOME: "{{ user_home }}"
register: st_repo
- name: Check whether st binary is installed
tags: [packages]
ansible.builtin.stat:
path: /usr/local/bin/st
register: st_binary
- name: Build and install st
tags: [packages]
ansible.builtin.command:
cmd: make clean install
chdir: "{{ user_home }}/.local/src/st"
when: st_repo.changed or not st_binary.stat.exists
- name: Clean st build artifacts
tags: [packages]
ansible.builtin.command:
cmd: make clean
chdir: "{{ user_home }}/.local/src/st"
when: st_repo.changed or not st_binary.stat.exists
- name: Ensure flathub remote is configured - name: Ensure flathub remote is configured
tags: [packages] tags: [packages]
community.general.flatpak_remote: community.general.flatpak_remote:
@@ -414,6 +383,8 @@
tags: [packages] tags: [packages]
ansible.builtin.set_fact: ansible.builtin.set_fact:
desktop_tools_tmp_dir: /tmp/desktop-tools desktop_tools_tmp_dir: /tmp/desktop-tools
st_repo: https://codeberg.org/fscotto/st
st_src_dir: "{{ user_home }}/.local/src/st"
ollama_asset: >- ollama_asset: >-
{{ {{
'ollama-linux-amd64.tar.zst' if ansible_facts['architecture'] == 'x86_64' 'ollama-linux-amd64.tar.zst' if ansible_facts['architecture'] == 'x86_64'
@@ -435,11 +406,13 @@
else '' else ''
}} }}
- name: Ensure architecture is supported for OpenCode binary - name: Set derived desktop external tool asset metadata
tags: [packages] tags: [packages]
ansible.builtin.fail: ansible.builtin.set_fact:
msg: "Unsupported architecture {{ ansible_facts['architecture'] }} for OpenCode release binary" gitmux_asset: "gitmux_{{ gitmux_version }}_linux_{{ gitmux_arch }}.tar.gz"
when: opencode_asset_name == '' bw_asset: "bw-linux-{{ bw_version }}.zip"
bw_checksum: >-
sha256:https://github.com/bitwarden/cli/releases/download/v{{ bw_version }}/bw-linux-sha256-{{ bw_version }}.txt
- name: Ensure architecture is supported for Ollama binary - name: Ensure architecture is supported for Ollama binary
tags: [packages] tags: [packages]
@@ -447,6 +420,12 @@
msg: "Unsupported architecture {{ ansible_facts['architecture'] }} for Ollama release binary" msg: "Unsupported architecture {{ ansible_facts['architecture'] }} for Ollama release binary"
when: ollama_asset == '' when: ollama_asset == ''
- name: Ensure architecture is supported for OpenCode binary
tags: [packages]
ansible.builtin.fail:
msg: "Unsupported architecture {{ ansible_facts['architecture'] }} for OpenCode release binary"
when: opencode_asset_name == ''
- name: Ensure architecture is supported for gitmux binary - name: Ensure architecture is supported for gitmux binary
tags: [packages] tags: [packages]
ansible.builtin.fail: ansible.builtin.fail:
@@ -476,10 +455,9 @@
register: opencode_latest_release register: opencode_latest_release
changed_when: false changed_when: false
- name: Set OpenCode release asset metadata - name: Set effective OpenCode release metadata
tags: [packages] tags: [packages]
ansible.builtin.set_fact: ansible.builtin.set_fact:
opencode_version: "{{ opencode_latest_release.json.tag_name }}"
opencode_asset: >- opencode_asset: >-
{{ {{
opencode_latest_release.json.assets opencode_latest_release.json.assets
@@ -491,16 +469,96 @@
- name: Ensure latest OpenCode asset metadata is available - name: Ensure latest OpenCode asset metadata is available
tags: [packages] tags: [packages]
ansible.builtin.fail: ansible.builtin.fail:
msg: "Could not find OpenCode asset {{ opencode_asset_name }} in release {{ opencode_version }}" msg: "Could not find OpenCode asset {{ opencode_asset_name }} in the latest GitHub release"
when: opencode_asset == {} when: opencode_asset == {}
- name: Download OpenCode release archive - name: Define desktop online archive binaries
tags: [packages]
ansible.builtin.set_fact:
desktop_online_archive_binaries:
- name: opencode
asset_name: "{{ opencode_asset.name }}"
url: "{{ opencode_asset.browser_download_url }}"
checksum: "{{ opencode_asset.digest | default(omit) }}"
extracted_binary: opencode
install_dest: /usr/local/bin/opencode
- name: gitmux
asset_name: "{{ gitmux_asset }}"
url: "https://github.com/arl/gitmux/releases/download/{{ gitmux_version }}/{{ gitmux_asset }}"
checksum: "sha256:https://github.com/arl/gitmux/releases/download/{{ gitmux_version }}/checksums.txt"
extracted_binary: gitmux
install_dest: /usr/local/bin/gitmux
- name: bw
asset_name: "{{ bw_asset }}"
url: "https://github.com/bitwarden/cli/releases/download/v{{ bw_version }}/{{ bw_asset }}"
checksum: "{{ bw_checksum }}"
extracted_binary: bw
install_dest: /usr/local/bin/bw
- name: Download desktop online archive binary releases
tags: [packages] tags: [packages]
ansible.builtin.get_url: ansible.builtin.get_url:
url: "{{ opencode_asset.browser_download_url }}" url: "{{ item.url }}"
dest: "{{ desktop_tools_tmp_dir }}/{{ opencode_asset.name }}" dest: "{{ desktop_tools_tmp_dir }}/{{ item.asset_name }}"
checksum: "{{ opencode_asset.digest | default(omit) }}" checksum: "{{ item.checksum | default(omit) }}"
mode: "0644" mode: "0644"
loop: "{{ desktop_online_archive_binaries }}"
loop_control:
label: "{{ item.name }}"
- name: Extract desktop online archive binary releases
tags: [packages]
ansible.builtin.unarchive:
src: "{{ desktop_tools_tmp_dir }}/{{ item.asset_name }}"
dest: "{{ desktop_tools_tmp_dir }}"
remote_src: true
loop: "{{ desktop_online_archive_binaries }}"
loop_control:
label: "{{ item.name }}"
- name: Install desktop online archive binaries
tags: [packages]
ansible.builtin.copy:
src: "{{ desktop_tools_tmp_dir }}/{{ item.extracted_binary }}"
dest: "{{ item.install_dest }}"
remote_src: true
owner: root
group: root
mode: "0755"
loop: "{{ desktop_online_archive_binaries }}"
loop_control:
label: "{{ item.name }}"
- name: Clone st repository
tags: [packages]
ansible.builtin.git:
repo: "{{ st_repo }}"
dest: "{{ st_src_dir }}"
update: true
become_user: "{{ username }}"
environment:
HOME: "{{ user_home }}"
register: st_repo_state
- name: Check whether st binary is installed
tags: [packages]
ansible.builtin.stat:
path: /usr/local/bin/st
register: st_binary
- name: Build and install st
tags: [packages]
ansible.builtin.command:
cmd: make clean install
chdir: "{{ st_src_dir }}"
when: st_repo_state.changed or not st_binary.stat.exists
- name: Clean st build artifacts
tags: [packages]
ansible.builtin.command:
cmd: make clean
chdir: "{{ st_src_dir }}"
when: st_repo_state.changed or not st_binary.stat.exists
- name: Download Ollama release archive - name: Download Ollama release archive
tags: [packages] tags: [packages]
@@ -514,32 +572,15 @@
tags: [packages] tags: [packages]
ansible.builtin.stat: ansible.builtin.stat:
path: /usr/local/bin/ollama path: /usr/local/bin/ollama
register: ollama_binary register: ollama_install_state
- name: Extract OpenCode release archive - name: Remove previous Ollama install paths when required
tags: [packages]
ansible.builtin.unarchive:
src: "{{ desktop_tools_tmp_dir }}/{{ opencode_asset.name }}"
dest: "{{ desktop_tools_tmp_dir }}"
remote_src: true
- name: Install OpenCode binary
tags: [packages]
ansible.builtin.copy:
src: "{{ desktop_tools_tmp_dir }}/opencode"
dest: /usr/local/bin/opencode
remote_src: true
owner: root
group: root
mode: "0755"
- name: Remove previous Ollama libraries
tags: [packages] tags: [packages]
ansible.builtin.file: ansible.builtin.file:
path: /usr/local/lib/ollama path: /usr/local/lib/ollama
state: absent state: absent
when: when:
- ollama_archive_download.changed or not ollama_binary.stat.exists - ollama_archive_download.changed or not ollama_install_state.stat.exists
- name: Extract Ollama release archive into /usr/local - name: Extract Ollama release archive into /usr/local
tags: [packages] tags: [packages]
@@ -550,7 +591,7 @@
executable: /bin/sh executable: /bin/sh
changed_when: true changed_when: true
when: when:
- ollama_archive_download.changed or not ollama_binary.stat.exists - ollama_archive_download.changed or not ollama_install_state.stat.exists
- name: Install Codex CLI globally - name: Install Codex CLI globally
tags: [packages] tags: [packages]
@@ -558,63 +599,3 @@
name: "@openai/codex" name: "@openai/codex"
global: true global: true
state: present state: present
- name: Set gitmux asset metadata
tags: [packages]
ansible.builtin.set_fact:
gitmux_asset: "gitmux_{{ gitmux_version }}_linux_{{ gitmux_arch }}.tar.gz"
- name: Download gitmux release archive
tags: [packages]
ansible.builtin.get_url:
url: "https://github.com/arl/gitmux/releases/download/{{ gitmux_version }}/{{ gitmux_asset }}"
dest: "{{ desktop_tools_tmp_dir }}/{{ gitmux_asset }}"
checksum: "sha256:https://github.com/arl/gitmux/releases/download/{{ gitmux_version }}/checksums.txt"
mode: "0644"
- name: Extract gitmux release archive
tags: [packages]
ansible.builtin.unarchive:
src: "{{ desktop_tools_tmp_dir }}/{{ gitmux_asset }}"
dest: "{{ desktop_tools_tmp_dir }}"
remote_src: true
- name: Install gitmux binary
tags: [packages]
ansible.builtin.copy:
src: "{{ desktop_tools_tmp_dir }}/gitmux"
dest: /usr/local/bin/gitmux
remote_src: true
owner: root
group: root
mode: "0755"
- name: Set bw asset metadata
tags: [packages]
ansible.builtin.set_fact:
bw_asset: "bw-linux-{{ bw_version }}.zip"
- name: Download bw release archive
tags: [packages]
ansible.builtin.get_url:
url: "https://github.com/bitwarden/cli/releases/download/v{{ bw_version }}/{{ bw_asset }}"
dest: "{{ desktop_tools_tmp_dir }}/{{ bw_asset }}"
checksum: "sha256:https://github.com/bitwarden/cli/releases/download/v{{ bw_version }}/bw-linux-sha256-{{ bw_version }}.txt"
mode: "0644"
- name: Extract bw release archive
tags: [packages]
ansible.builtin.unarchive:
src: "{{ desktop_tools_tmp_dir }}/{{ bw_asset }}"
dest: "{{ desktop_tools_tmp_dir }}"
remote_src: true
- name: Install bw binary
tags: [packages]
ansible.builtin.copy:
src: "{{ desktop_tools_tmp_dir }}/bw"
dest: /usr/local/bin/bw
remote_src: true
owner: root
group: root
mode: "0755"

View File

@@ -47,7 +47,7 @@
}} }}
when: workstation_manage_opencode | default(false) when: workstation_manage_opencode | default(false)
- name: Ensure architecture is supported for OpenCode binary - name: Ensure architecture is supported for workstation OpenCode binary
tags: [packages] tags: [packages]
ansible.builtin.fail: ansible.builtin.fail:
msg: "Unsupported architecture {{ ansible_facts['architecture'] }} for OpenCode release binary" msg: "Unsupported architecture {{ ansible_facts['architecture'] }} for OpenCode release binary"
@@ -61,64 +61,77 @@
path: "{{ workstation_tools_tmp_dir }}" path: "{{ workstation_tools_tmp_dir }}"
state: directory state: directory
mode: "0755" mode: "0755"
when: workstation_manage_opencode | default(false)
- name: Fetch latest OpenCode release metadata - name: Fetch latest OpenCode release metadata for workstation
tags: [packages] tags: [packages]
ansible.builtin.uri: ansible.builtin.uri:
url: https://api.github.com/repos/anomalyco/opencode/releases/latest url: https://api.github.com/repos/anomalyco/opencode/releases/latest
headers: headers:
Accept: application/vnd.github+json Accept: application/vnd.github+json
return_content: true return_content: true
register: opencode_latest_release register: workstation_opencode_latest_release
changed_when: false changed_when: false
when: workstation_manage_opencode | default(false)
- name: Set OpenCode release asset metadata - name: Set effective workstation OpenCode release metadata
tags: [packages] tags: [packages]
ansible.builtin.set_fact: ansible.builtin.set_fact:
opencode_version: "{{ opencode_latest_release.json.tag_name }}" workstation_opencode_asset: >-
opencode_asset: >-
{{ {{
opencode_latest_release.json.assets workstation_opencode_latest_release.json.assets
| selectattr('name', 'equalto', opencode_asset_name) | selectattr('name', 'equalto', opencode_asset_name)
| first | first
| default({}) | default({})
}} }}
when: workstation_manage_opencode | default(false)
- name: Ensure latest OpenCode asset metadata is available - name: Ensure latest workstation OpenCode asset metadata is available
tags: [packages] tags: [packages]
ansible.builtin.fail: ansible.builtin.fail:
msg: "Could not find OpenCode asset {{ opencode_asset_name }} in release {{ opencode_version }}" msg: "Could not find OpenCode asset {{ opencode_asset_name }} in the latest GitHub release"
when: when:
- workstation_manage_opencode | default(false) - workstation_opencode_asset == {}
- opencode_asset == {}
- name: Download OpenCode release archive - name: Define workstation online archive binaries
tags: [packages]
ansible.builtin.set_fact:
workstation_online_archive_binaries:
- name: opencode
asset_name: "{{ workstation_opencode_asset.name }}"
url: "{{ workstation_opencode_asset.browser_download_url }}"
checksum: "{{ workstation_opencode_asset.digest | default(omit) }}"
extracted_binary: opencode
install_dest: /usr/local/bin/opencode
- name: Download workstation online archive binary releases
tags: [packages] tags: [packages]
ansible.builtin.get_url: ansible.builtin.get_url:
url: "{{ opencode_asset.browser_download_url }}" url: "{{ item.url }}"
dest: "{{ workstation_tools_tmp_dir }}/{{ opencode_asset.name }}" dest: "{{ workstation_tools_tmp_dir }}/{{ item.asset_name }}"
checksum: "{{ opencode_asset.digest | default(omit) }}" checksum: "{{ item.checksum | default(omit) }}"
mode: "0644" mode: "0644"
when: workstation_manage_opencode | default(false) loop: "{{ workstation_online_archive_binaries }}"
loop_control:
label: "{{ item.name }}"
- name: Extract OpenCode release archive - name: Extract workstation online archive binary releases
tags: [packages] tags: [packages]
ansible.builtin.unarchive: ansible.builtin.unarchive:
src: "{{ workstation_tools_tmp_dir }}/{{ opencode_asset.name }}" src: "{{ workstation_tools_tmp_dir }}/{{ item.asset_name }}"
dest: "{{ workstation_tools_tmp_dir }}" dest: "{{ workstation_tools_tmp_dir }}"
remote_src: true remote_src: true
when: workstation_manage_opencode | default(false) loop: "{{ workstation_online_archive_binaries }}"
loop_control:
label: "{{ item.name }}"
- name: Install OpenCode binary - name: Install workstation online archive binaries
tags: [packages] tags: [packages]
ansible.builtin.copy: ansible.builtin.copy:
src: "{{ workstation_tools_tmp_dir }}/opencode" src: "{{ workstation_tools_tmp_dir }}/{{ item.extracted_binary }}"
dest: /usr/local/bin/opencode dest: "{{ item.install_dest }}"
remote_src: true remote_src: true
owner: root owner: root
group: root group: root
mode: "0755" mode: "0755"
loop: "{{ workstation_online_archive_binaries }}"
loop_control:
label: "{{ item.name }}"
when: workstation_manage_opencode | default(false) when: workstation_manage_opencode | default(false)