72 lines
2.0 KiB
YAML

---
- name: Ensure Bun install root exists
ansible.builtin.file:
path: "{{ bun_install_root }}"
state: directory
owner: root
group: root
mode: "0755"
- name: Set Bun artifact values
ansible.builtin.set_fact:
bun_archive_name: "bun-{{ bun_arch_suffix }}.zip"
bun_download_url: "https://github.com/oven-sh/bun/releases/download/bun-v{{ bun_version }}/bun-{{ bun_arch_suffix }}.zip"
bun_archive_path: "/tmp/bun-v{{ bun_version }}-{{ bun_arch_suffix }}.zip"
bun_extract_path: "{{ bun_install_root }}/bun-v{{ bun_version }}-{{ bun_arch_suffix }}"
- name: Ensure versioned Bun extract directory exists
ansible.builtin.file:
path: "{{ bun_extract_path }}"
state: directory
owner: root
group: root
mode: "0755"
- name: Download Bun release archive
ansible.builtin.get_url:
url: "{{ bun_download_url }}"
dest: "{{ bun_archive_path }}"
mode: "0644"
- name: Extract Bun archive
ansible.builtin.unarchive:
src: "{{ bun_archive_path }}"
dest: "{{ bun_extract_path }}"
remote_src: true
creates: "{{ bun_extract_path }}/.extracted"
- name: Mark Bun extraction complete
ansible.builtin.file:
path: "{{ bun_extract_path }}/.extracted"
state: touch
mode: "0644"
- name: Locate extracted Bun binary
ansible.builtin.find:
paths: "{{ bun_extract_path }}"
recurse: true
file_type: file
patterns: bun
register: bun_binary_find
- name: Fail when Bun binary is missing
ansible.builtin.fail:
msg: "Bun binary was not found under {{ bun_extract_path }} after extraction."
when: bun_binary_find.matched | int == 0
- name: Select Bun binary path
ansible.builtin.set_fact:
bun_binary_path: "{{ (bun_binary_find.files | sort(attribute='path') | first).path }}"
- name: Ensure Bun binary has execute permission
ansible.builtin.file:
path: "{{ bun_binary_path }}"
mode: "0755"
- name: Link Bun binary into standard PATH
ansible.builtin.file:
src: "{{ bun_binary_path }}"
dest: /usr/local/bin/bun
state: link
force: true