mirror of
https://github.com/fscotto/infra.git
synced 2026-05-30 15:39:58 +00:00
Refactor online tool installation flows
This commit is contained in:
@@ -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"
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user