From d7d27764a5f4c35679f753af4d37788c29a3e8fc Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Sat, 18 Apr 2026 09:56:35 +0200 Subject: [PATCH] Switch OpenCode from GitHub tarball to npm package --- ansible/inventory/group_vars/desktop.yml | 4 + ansible/inventory/group_vars/workstation.yml | 4 + .../profile_desktop_common/tasks/main.yml | 108 ++---------------- .../tasks/main.yml | 103 ++--------------- 4 files changed, 28 insertions(+), 191 deletions(-) diff --git a/ansible/inventory/group_vars/desktop.yml b/ansible/inventory/group_vars/desktop.yml index 891c7b1..bc2ad9b 100644 --- a/ansible/inventory/group_vars/desktop.yml +++ b/ansible/inventory/group_vars/desktop.yml @@ -133,6 +133,10 @@ desktop_source_tools: binary_name: gf2 install_name: gf +desktop_npm_packages: + - name: "opencode-ai" + state: latest + desktop_common_dotfiles: - name: XDG autostart entries src: .config/autostart/ diff --git a/ansible/inventory/group_vars/workstation.yml b/ansible/inventory/group_vars/workstation.yml index 2745a6d..cd0c553 100644 --- a/ansible/inventory/group_vars/workstation.yml +++ b/ansible/inventory/group_vars/workstation.yml @@ -1,2 +1,6 @@ --- workstation_manage_opencode: true + +workstation_npm_packages: + - name: "opencode-ai" + state: latest diff --git a/ansible/roles/profile_desktop_common/tasks/main.yml b/ansible/roles/profile_desktop_common/tasks/main.yml index 96060d5..31e2e2a 100644 --- a/ansible/roles/profile_desktop_common/tasks/main.yml +++ b/ansible/roles/profile_desktop_common/tasks/main.yml @@ -432,102 +432,6 @@ - (desktop_flatpak_extensions | default([])) | length > 0 - item | length > 0 -- name: Set desktop external tool release metadata - tags: [packages] - ansible.builtin.set_fact: - desktop_tools_tmp_dir: /tmp/desktop-tools - opencode_asset_name: >- - {{ - 'opencode-linux-x64-baseline.tar.gz' if ansible_facts['architecture'] == 'x86_64' - else 'opencode-linux-arm64.tar.gz' if ansible_facts['architecture'] in ['aarch64', 'arm64'] - else '' - }} - -- 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 temporary directory exists for external tools - tags: [packages] - ansible.builtin.file: - path: "{{ desktop_tools_tmp_dir }}" - state: directory - mode: "0755" - -- name: Fetch latest OpenCode release metadata - tags: [packages] - ansible.builtin.uri: - url: https://api.github.com/repos/anomalyco/opencode/releases/latest - headers: - Accept: application/vnd.github+json - return_content: true - register: opencode_latest_release - changed_when: false - -- name: Set effective OpenCode release metadata - tags: [packages] - ansible.builtin.set_fact: - opencode_asset: >- - {{ - opencode_latest_release.json.assets - | selectattr('name', 'equalto', opencode_asset_name) - | first - | default({}) - }} - -- name: Ensure latest OpenCode asset metadata is available - tags: [packages] - ansible.builtin.fail: - msg: "Could not find OpenCode asset {{ opencode_asset_name }} in the latest GitHub release" - when: opencode_asset == {} - -- 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: Download desktop online archive binary releases - tags: [packages] - ansible.builtin.get_url: - url: "{{ item.url }}" - dest: "{{ desktop_tools_tmp_dir }}/{{ item.asset_name }}" - checksum: "{{ item.checksum | default(omit) }}" - 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: Build and install desktop source tools tags: [packages] ansible.builtin.include_tasks: source_tool.yml @@ -535,3 +439,15 @@ loop_control: loop_var: source_tool label: "{{ source_tool.name }}" + +- name: Install desktop npm packages + tags: [packages] + community.general.npm: + name: "{{ item.name }}" + global: true + state: "{{ item.state | default('present') }}" + become: true + loop: "{{ desktop_npm_packages | default([]) }}" + when: desktop_npm_packages | length > 0 + loop_control: + label: "{{ item.name }}" diff --git a/ansible/roles/profile_workstation_dev_common/tasks/main.yml b/ansible/roles/profile_workstation_dev_common/tasks/main.yml index 7c0af5d..a377a96 100644 --- a/ansible/roles/profile_workstation_dev_common/tasks/main.yml +++ b/ansible/roles/profile_workstation_dev_common/tasks/main.yml @@ -35,103 +35,16 @@ loop_control: label: "{{ item.dest }}" -- name: Set workstation external tool release metadata +- name: Install workstation npm packages tags: [packages] - ansible.builtin.set_fact: - workstation_tools_tmp_dir: /tmp/workstation-tools - opencode_asset_name: >- - {{ - 'opencode-linux-x64-baseline.tar.gz' if ansible_facts['architecture'] == 'x86_64' - else 'opencode-linux-arm64.tar.gz' if ansible_facts['architecture'] in ['aarch64', 'arm64'] - else '' - }} - when: workstation_manage_opencode | default(false) - -- name: Ensure architecture is supported for workstation OpenCode binary - tags: [packages] - ansible.builtin.fail: - msg: "Unsupported architecture {{ ansible_facts['architecture'] }} for OpenCode release binary" + community.general.npm: + name: "{{ item.name }}" + global: true + state: "{{ item.state | default('present') }}" + become: true + loop: "{{ workstation_npm_packages | default([]) }}" when: - workstation_manage_opencode | default(false) - - opencode_asset_name == '' - -- name: Ensure temporary directory exists for workstation external tools - tags: [packages] - ansible.builtin.file: - path: "{{ workstation_tools_tmp_dir }}" - state: directory - mode: "0755" - -- name: Fetch latest OpenCode release metadata for workstation - tags: [packages] - ansible.builtin.uri: - url: https://api.github.com/repos/anomalyco/opencode/releases/latest - headers: - Accept: application/vnd.github+json - return_content: true - register: workstation_opencode_latest_release - changed_when: false - -- name: Set effective workstation OpenCode release metadata - tags: [packages] - ansible.builtin.set_fact: - workstation_opencode_asset: >- - {{ - workstation_opencode_latest_release.json.assets - | selectattr('name', 'equalto', opencode_asset_name) - | first - | default({}) - }} - -- name: Ensure latest workstation OpenCode asset metadata is available - tags: [packages] - ansible.builtin.fail: - msg: "Could not find OpenCode asset {{ opencode_asset_name }} in the latest GitHub release" - when: - - workstation_opencode_asset == {} - -- 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] - ansible.builtin.get_url: - url: "{{ item.url }}" - dest: "{{ workstation_tools_tmp_dir }}/{{ item.asset_name }}" - checksum: "{{ item.checksum | default(omit) }}" - mode: "0644" - loop: "{{ workstation_online_archive_binaries }}" + - workstation_npm_packages | length > 0 loop_control: label: "{{ item.name }}" - -- name: Extract workstation online archive binary releases - tags: [packages] - ansible.builtin.unarchive: - src: "{{ workstation_tools_tmp_dir }}/{{ item.asset_name }}" - dest: "{{ workstation_tools_tmp_dir }}" - remote_src: true - loop: "{{ workstation_online_archive_binaries }}" - loop_control: - label: "{{ item.name }}" - -- name: Install workstation online archive binaries - tags: [packages] - ansible.builtin.copy: - src: "{{ workstation_tools_tmp_dir }}/{{ item.extracted_binary }}" - dest: "{{ item.install_dest }}" - remote_src: true - owner: root - group: root - mode: "0755" - loop: "{{ workstation_online_archive_binaries }}" - loop_control: - label: "{{ item.name }}" - when: workstation_manage_opencode | default(false)