--- - name: Ensure workstation user directories exist tags: [dotfiles, dotfiles:workstation] ansible.builtin.file: path: "{{ item.path }}" state: directory owner: "{{ username }}" group: "{{ user_group }}" mode: "{{ item.mode }}" loop: "{{ workstation_user_directories | default([]) }}" loop_control: label: "{{ item.path }}" - name: Copy workstation dotfiles tags: [dotfiles, dotfiles:workstation] ansible.builtin.copy: src: "{{ playbook_dir }}/../dotfiles/workstation/{{ item.src }}" dest: "{{ user_home }}/{{ item.dest }}" owner: "{{ username }}" group: "{{ user_group }}" mode: "{{ item.mode }}" loop: "{{ workstation_dotfiles | default([]) }}" loop_control: label: "{{ item.dest }}" - name: Render workstation templates tags: [dotfiles, dotfiles:workstation] ansible.builtin.template: src: "{{ item.src }}" dest: "{{ user_home }}/{{ item.dest }}" owner: "{{ username }}" group: "{{ user_group }}" mode: "{{ item.mode }}" loop: "{{ workstation_templates | default([]) }}" loop_control: label: "{{ item.dest }}" - name: Set workstation external tool release metadata 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" 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 }}" 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)