|
|
|
- name: install xcaddy from debian/ubuntu repository
|
|
|
|
block:
|
|
|
|
- name: install dependencies
|
|
|
|
package:
|
|
|
|
name:
|
|
|
|
- debian-keyring
|
|
|
|
- debian-archive-keyring
|
|
|
|
- apt-transport-https
|
|
|
|
|
|
|
|
|
|
|
|
- name: get xcaddy signing key location
|
|
|
|
set_fact:
|
|
|
|
caddy_xcaddy_signing_key_file: "{{ (gpg_keyrings_dir, 'xcaddy.asc') | path_join }}"
|
|
|
|
|
|
|
|
|
|
|
|
- name: add xcaddy signing key
|
|
|
|
get_url:
|
|
|
|
url: "{{ caddy_xcaddy_gpg_key_url }}"
|
|
|
|
dest: "{{ caddy_xcaddy_signing_key_file }}"
|
|
|
|
mode: a+r
|
|
|
|
|
|
|
|
|
|
|
|
- name: add apt repo
|
|
|
|
apt_repository:
|
|
|
|
repo: "deb [signed-by={{ caddy_xcaddy_signing_key_file | quote }}] {{ caddy_xcaddy_repo_url }} any-version main"
|
|
|
|
register: result
|
|
|
|
|
|
|
|
|
|
|
|
- name: update repository index
|
|
|
|
apt:
|
|
|
|
force_apt_get: yes
|
|
|
|
update_cache: yes
|
|
|
|
changed_when: no
|
|
|
|
when: result.changed
|
|
|
|
|
|
|
|
|
|
|
|
- name: install xcaddy
|
|
|
|
package:
|
|
|
|
name:
|
|
|
|
- xcaddy
|
|
|
|
- golang
|
|
|
|
|
|
|
|
when: ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu'
|
|
|
|
|
|
|
|
|
|
|
|
- name: install xcaddy from github
|
|
|
|
block:
|
|
|
|
- name: determine host architecture
|
|
|
|
include_tasks: tasks/get_host_arch.yml
|
|
|
|
|
|
|
|
|
|
|
|
- name: create xcaddy dir
|
|
|
|
file:
|
|
|
|
path: "{{ caddy_xcaddy_dir }}"
|
|
|
|
state: directory
|
|
|
|
|
|
|
|
|
|
|
|
- name: get latest xcaddy version
|
|
|
|
include_tasks: tasks/get_lastversion.yml
|
|
|
|
vars:
|
|
|
|
package:
|
|
|
|
name: caddyserver/xcaddy
|
|
|
|
location: github
|
|
|
|
file: "{{ (caddy_conf_dir, 'last_xcaddy_version') | path_join }}"
|
|
|
|
assets: yes
|
|
|
|
asset_filter: "{{ 'linux_' ~ host_architecture ~ '.tar.gz$' }}"
|
|
|
|
extract: "{{ caddy_xcaddy_dir }}"
|
|
|
|
|
|
|
|
|
|
|
|
- name: ensure xcaddy binary has executable flag set
|
|
|
|
file:
|
|
|
|
path: "{{ (caddy_xcaddy_dir, 'xcaddy') | path_join }}"
|
|
|
|
mode: "+x"
|
|
|
|
|
|
|
|
|
|
|
|
- name: copy xcaddy to bin dir
|
|
|
|
copy:
|
|
|
|
src: "{{ (caddy_xcaddy_dir, 'xcaddy') | path_join }}"
|
|
|
|
dest: "{{ (caddy_bin_dir, 'xcaddy') | path_join }}"
|
|
|
|
remote_src: yes
|
|
|
|
mode: "+x"
|
|
|
|
|
|
|
|
|
|
|
|
- name: install golang
|
|
|
|
package:
|
|
|
|
name: go
|
|
|
|
|
|
|
|
when: ansible_distribution == 'Alpine'
|
|
|
|
|
|
|
|
|
|
|
|
- name: get latest caddy version
|
|
|
|
include_tasks: tasks/get_lastversion.yml
|
|
|
|
vars:
|
|
|
|
package:
|
|
|
|
name: caddyserver/caddy
|
|
|
|
location: github
|
|
|
|
file: "{{ (caddy_conf_dir, 'last_caddy_version') | path_join }}"
|
|
|
|
|
|
|
|
|
|
|
|
- name: generate build command
|
|
|
|
set_fact:
|
|
|
|
caddy_build_command: >-
|
|
|
|
{{
|
|
|
|
'xcaddy build ' ~ (
|
|
|
|
[] | zip_longest((caddy_default_plugins | d([])) +
|
|
|
|
(caddy_custom_plugins | d([])) | select() | map('quote'), fillvalue='--with ')
|
|
|
|
| map('join') | list | join(' ')
|
|
|
|
) ~ ' --output ' ~ ((caddy_bin_dir, 'caddy') | path_join | quote) }}
|
|
|
|
|
|
|
|
|
|
|
|
- name: save build command to a file
|
|
|
|
copy:
|
|
|
|
content: "{{ caddy_build_command }}"
|
|
|
|
dest: "{{ (caddy_conf_dir, 'build_info') | path_join }}"
|
|
|
|
mode: 0400
|
|
|
|
register: result
|
|
|
|
|
|
|
|
|
|
|
|
- name: build caddy binary if a new version is found or build command was changed
|
|
|
|
shell:
|
|
|
|
cmd: "{{ caddy_build_command }}"
|
|
|
|
chdir: "{{ caddy_bin_dir }}"
|
|
|
|
register: result
|
|
|
|
when: package_changed or result.changed
|
|
|
|
notify: restart caddy
|
|
|
|
|
|
|
|
|
|
|
|
- name: check if caddy version and last version are identical
|
|
|
|
shell:
|
|
|
|
cmd: "caddy version | cut -d ' ' -f1 | cut -b2- | diff -wq {{ (caddy_conf_dir, 'last_caddy_version') | path_join | quote }} -"
|
|
|
|
register: result
|
|
|
|
failed_when: result.rc != 0
|
|
|
|
changed_when: no
|