--- - name: Assert Debian-based distribution ansible.builtin.assert: that: - ansible_os_family == 'Debian' fail_msg: "ansible-role-semaphore .deb installation only supports Debian-based distributions" - name: Set architecture fact ansible.builtin.set_fact: _semaphore_arch: "{{ {'x86_64': 'amd64', 'aarch64': 'arm64', 'armv7l': 'arm'}.get(ansible_architecture, 'amd64') }}" - name: Get Semaphore release info from GitHub ansible.builtin.uri: url: >- {{ 'https://api.github.com/repos/semaphoreui/semaphore/releases/latest' if semaphore_version == '' else 'https://api.github.com/repos/semaphoreui/semaphore/releases/tags/v' + semaphore_version }} headers: Accept: "application/vnd.github.v3+json" return_content: true register: _semaphore_release - name: Set version and download URL facts ansible.builtin.set_fact: _semaphore_version_tag: "{{ _semaphore_release.json.tag_name }}" _semaphore_deb_url: >- {{ _semaphore_release.json.assets | selectattr('name', 'search', 'linux_' + _semaphore_arch + '.deb') | map(attribute='browser_download_url') | first }} - name: Read installed version ansible.builtin.command: cmd: semaphore version register: _semaphore_installed_raw changed_when: false ignore_errors: true become: true - name: Set installed version fact ansible.builtin.set_fact: _semaphore_installed_version: >- {{ ('v' + (_semaphore_installed_raw.stdout | trim)) if _semaphore_installed_raw is not failed else '' }} - name: Install or upgrade Semaphore when: _semaphore_installed_version != _semaphore_version_tag block: - name: Download Semaphore .deb package ansible.builtin.get_url: url: "{{ _semaphore_deb_url }}" dest: /tmp/semaphore.deb mode: '0644' - name: Install Semaphore .deb package ansible.builtin.apt: deb: /tmp/semaphore.deb state: present become: true - name: Remove downloaded .deb package ansible.builtin.file: path: /tmp/semaphore.deb state: absent - name: Create Semaphore config directory ansible.builtin.file: path: "{{ semaphore_config_dir }}" state: directory owner: "{{ semaphore_user }}" group: "{{ semaphore_group }}" mode: '0750' become: true - name: Create Semaphore data directory ansible.builtin.file: path: "{{ semaphore_data_dir }}" state: directory owner: "{{ semaphore_user }}" group: "{{ semaphore_group }}" mode: '0750' become: true - name: Create Semaphore systemd service ansible.builtin.copy: content: | [Unit] Description=Ansible Semaphore After=network.target [Service] Type=simple User={{ semaphore_user }} Group={{ semaphore_group }} WorkingDirectory={{ semaphore_data_dir }} ExecStart=/usr/bin/semaphore server --config {{ semaphore_config_dir }}/config.json Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target dest: /etc/systemd/system/semaphore.service mode: '0644' become: true - name: Enable and start Semaphore service ansible.builtin.systemd: name: semaphore enabled: "{{ semaphore_service_enabled }}" state: "{{ semaphore_service_state }}" daemon_reload: true become: true