webhost-setup/playbook.yaml

211 lines
6.5 KiB
YAML

# vi:syntax=yaml.ansible
---
- name: Environment Setup
hosts: webhost
gather_facts: true
become: false
tasks:
- name: Set variables
ansible.builtin.set_fact:
home: "{{ ansible_env.HOME | regex_replace('/$', '') }}"
composer_packages:
- friendsofphp/php-cs-fixer
- phpcompatibility/php-compatibility
- phpstan/phpstan
- psy/psysh
- rector/rector
- slevomat/coding-standard
- squizlabs/php_codesniffer
- vimeo/psalm
- name: Copy zshrc
ansible.builtin.copy:
dest: "{{ home }}/.zshrc"
src: configurations/zshrc
- name: Copy zshenv
ansible.builtin.copy:
dest: "{{ home }}/.zshenv"
src: configurations/zshenv
- name: Copy npmrc
ansible.builtin.copy:
dest: "{{ home }}/.npmrc"
src: configurations/npmrc
- name: Copy vimrc
ansible.builtin.copy:
dest: "{{ home }}/.vimrc"
src: configurations/vimrc
- name: Copy tmux.conf
ansible.builtin.copy:
dest: "{{ home }}/.tmux.conf"
src: configurations/tmux.conf
- name: Install npm tools
community.general.npm:
name: "{{ item }}"
global: true
loop:
- eslint
- prettier
- name: Update npm packages
community.general.npm:
global: true
state: latest
- name: Configure composer
# composer requires a modern amount of memory to update,
# so only run on systems with 2gb or more
when: ansible_memtotal_mb >= 2048
changed_when: false
community.general.composer:
arguments: "--no-interaction {{ item.key }} {{ item.value }}"
command: config
global_command: true
environment:
COMPOSER_HOME: "{{ home }}/.config/composer"
loop:
- key: allow-plugins.dealerdirect/phpcodesniffer-composer-installer
value: "true"
- key: minimum-stability
value: "stable"
- key: prefer-stable
value: "true"
- name: Install composer packages
# composer requires a modern amount of memory to update,
# so only run on systems with 2gb or more
when: ansible_memtotal_mb >= 2048
community.general.composer:
arguments: "--no-interaction --dev {{ composer_packages | join(' ') }}"
command: require
global_command: true
no_dev: false
optimize_autoloader: false
environment:
COMPOSER_HOME: "{{ home }}/.config/composer"
- name: Update composer packages
# composer requires a modern amount of memory to update,
# so only run on systems with 2gb or more
when: ansible_memtotal_mb >= 2048
community.general.composer:
arguments: --no-interaction
command: update
global_command: true
no_dev: false
optimize_autoloader: false
environment:
COMPOSER_HOME: "{{ home }}/.config/composer"
- name: Install pip packages
ansible.builtin.pip:
name:
- hyfetch
- powerline-gitstatus
- powerline-status
extra_args: --user
state: latest
- name: tmux plugins
ansible.builtin.git:
repo: https://github.com/{{ item.owner }}/{{ item.repo }}
dest: "{{ home }}/.tmux/plugins/{{ item.repo }}"
depth: 1
force: true # disregard local changes
loop:
- owner: tmux-plugins
repo: tmux-sensible
- owner: tmux-plugins
repo: tpm
- name: create vim directory
ansible.builtin.file:
path: "{{ home }}/.vim/pack/git-plugins/start"
state: directory
- name: vim plugins
ansible.builtin.git:
repo: https://github.com/{{ item.owner }}/{{ item.repo }}
dest: "{{ home }}/.vim/pack/git-plugins/start/{{ item.repo }}"
depth: 1
force: true # disregard local changes
loop:
- owner: adelarsq
repo: vim-matchit
- owner: cespare
repo: vim-toml
- owner: chrisbra
repo: csv.vim
- owner: dense-analysis
repo: ale
- owner: editorconfig
repo: editorconfig-vim
- owner: fatih
repo: vim-go
- owner: flazz
repo: vim-colorschemes
- owner: fpob
repo: nette.vim
- owner: idanarye
repo: vim-vebugger
- owner: imsnif
repo: kdl.vim
- owner: leafgarland
repo: typescript-vim
- owner: lumiliet
repo: vim-twig
- owner: martinda
repo: jenkinsfile-vim-syntax
- owner: mattn
repo: emmet-vim
- owner: pearofducks
repo: ansible-vim
- owner: plasticboy
repo: vim-markdown
- owner: quramy
repo: tsuquyomi
- owner: rust-lang
repo: rust.vim
- owner: ryanoasis
repo: vim-devicons
- owner: scrooloose
repo: nerdtree
- owner: shougo
repo: vimproc.vim
- owner: towolf
repo: vim-helm
- owner: tpope
repo: vim-fugitive
- owner: tpope
repo: vim-liquid
- owner: tpope
repo: vim-sensible
- name: symlink vim colors
ansible.builtin.file:
dest: "{{ home }}/.vim/colors"
src: "{{ home }}/.vim/pack/git-plugins/start/vim-colorschemes/colors"
state: link
- name: Register rustc version
ansible.builtin.shell: rustc --version | awk '{ print $2 }'
args:
executable: /usr/local/bin/zsh
changed_when: false
register: rustc_version
- name: Install cargo packages
ansible.builtin.command:
cmd: >-
cargo install {{ item.package }}@{{
rustc_version.stdout is version('1.83.0', '>=', version_type='semver')
| ternary(item.version, '')
| default('*', true) }} --locked
creates: "{{ home }}/.cargo/bin/{{ item.bin }}"
loop:
- package: cargo-update
bin: cargo-install-update
- package: eza
bin: eza
version: 0.20.24
- package: ripgrep
bin: rg
- package: sd
bin: sd
- package: starship
bin: starship
version: 1.20.1
- name: Update cargo packages
when: rustc_version.stdout is version('1.85.0', '>=', version_type='semver')
ansible.builtin.command:
cmd: cargo install-update --all
register: cargo_update
changed_when: cargo_update.stdout.find('No packages need updating.') == -1