- 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