53 lines
3.4 KiB
YAML
53 lines
3.4 KiB
YAML
---
|
|
- name: Determine Homebrew prefix
|
|
ansible.builtin.set_fact:
|
|
nodejs_homebrew_prefix: "{{ '/opt/homebrew' if ansible_facts['architecture'] in ['arm64', 'aarch64'] else '/usr/local' }}"
|
|
nodejs_homebrew_formula: "node@{{ nodejs_version_major | default(22) }}"
|
|
|
|
- name: Ensure unversioned Homebrew node formula is absent
|
|
ansible.builtin.command: "{{ nodejs_homebrew_prefix }}/bin/brew uninstall --ignore-dependencies --force node"
|
|
register: nodejs_brew_uninstall
|
|
changed_when: "'uninstalled' in (nodejs_brew_uninstall.stdout | lower) or 'uninstalled' in (nodejs_brew_uninstall.stderr | lower)"
|
|
failed_when: nodejs_brew_uninstall.rc != 0 and 'no such keg' not in (nodejs_brew_uninstall.stdout | lower) and 'not installed' not in (nodejs_brew_uninstall.stderr | lower)
|
|
environment:
|
|
HOMEBREW_DEVELOPER: "1"
|
|
HOMEBREW_NO_AUTO_UPDATE: "1"
|
|
HOMEBREW_NO_INSTALL_CLEANUP: "1"
|
|
HOMEBREW_API_DOMAIN: "{{ lookup('ansible.builtin.env', 'HOMEBREW_API_DOMAIN') | default('https://mirrors.ustc.edu.cn/homebrew-bottles/api', true) }}"
|
|
HOMEBREW_BOTTLE_DOMAIN: "{{ lookup('ansible.builtin.env', 'HOMEBREW_BOTTLE_DOMAIN') | default('https://mirrors.ustc.edu.cn/homebrew-bottles', true) }}"
|
|
|
|
- name: Ensure Homebrew {{ nodejs_homebrew_formula }} formula is installed
|
|
ansible.builtin.command: "{{ nodejs_homebrew_prefix }}/bin/brew install {{ nodejs_homebrew_formula }}"
|
|
register: nodejs_brew_install
|
|
changed_when: "'already installed' not in (nodejs_brew_install.stdout | lower) and 'already installed' not in (nodejs_brew_install.stderr | lower)"
|
|
failed_when: nodejs_brew_install.rc != 0 and 'already installed' not in (nodejs_brew_install.stdout | lower) and 'already installed' not in (nodejs_brew_install.stderr | lower)
|
|
environment:
|
|
HOMEBREW_DEVELOPER: "1"
|
|
HOMEBREW_NO_AUTO_UPDATE: "1"
|
|
HOMEBREW_NO_INSTALL_CLEANUP: "1"
|
|
HOMEBREW_API_DOMAIN: "{{ lookup('ansible.builtin.env', 'HOMEBREW_API_DOMAIN') | default('https://mirrors.ustc.edu.cn/homebrew-bottles/api', true) }}"
|
|
HOMEBREW_BOTTLE_DOMAIN: "{{ lookup('ansible.builtin.env', 'HOMEBREW_BOTTLE_DOMAIN') | default('https://mirrors.ustc.edu.cn/homebrew-bottles', true) }}"
|
|
|
|
- name: Ensure {{ nodejs_homebrew_formula }} is linked as the default node
|
|
ansible.builtin.command: "{{ nodejs_homebrew_prefix }}/bin/brew link --force --overwrite {{ nodejs_homebrew_formula }}"
|
|
register: nodejs_brew_link
|
|
changed_when: "'linking' in (nodejs_brew_link.stdout | lower)"
|
|
failed_when: nodejs_brew_link.rc != 0 and 'already linked' not in (nodejs_brew_link.stdout | lower) and 'already linked' not in (nodejs_brew_link.stderr | lower)
|
|
environment:
|
|
PATH: "{{ nodejs_homebrew_prefix }}/bin:/usr/local/bin:/usr/bin:/bin"
|
|
|
|
- name: Prioritize {{ nodejs_homebrew_formula }} binaries in the default shell path
|
|
ansible.builtin.lineinfile:
|
|
path: "{{ ansible_env.HOME }}/.zshrc"
|
|
line: "export PATH=\"{{ nodejs_homebrew_prefix }}/opt/{{ nodejs_homebrew_formula }}/bin:$PATH\""
|
|
insertafter: EOF
|
|
create: true
|
|
|
|
- name: Pin {{ nodejs_homebrew_formula }} to prevent automatic upgrades
|
|
ansible.builtin.command: "{{ nodejs_homebrew_prefix }}/bin/brew pin {{ nodejs_homebrew_formula }}"
|
|
register: nodejs_brew_pin
|
|
changed_when: "'pinned' in (nodejs_brew_pin.stdout | lower)"
|
|
failed_when: nodejs_brew_pin.rc != 0 and 'already pinned' not in (nodejs_brew_pin.stdout | lower) and 'already pinned' not in (nodejs_brew_pin.stderr | lower)
|
|
environment:
|
|
PATH: "{{ nodejs_homebrew_prefix }}/bin:/usr/local/bin:/usr/bin:/bin"
|