Files
ansible-role-narratio/tasks/main.yml

148 lines
3.6 KiB
YAML

---
- name: Validate the supported platform
ansible.builtin.assert:
that:
- ansible_facts.distribution == "Ubuntu"
- ansible_facts.distribution_version == "26.04"
- ansible_facts.architecture in ["x86_64", "aarch64"]
fail_msg: Narratio supports Ubuntu 26.04 on x86_64 or aarch64.
- name: Install Git
become: true
ansible.builtin.apt:
name: git
state: present
update_cache: true
cache_valid_time: 3600
when: narratio_manage_build_dependencies
- name: Install Go
become: true
community.general.snap:
name: go
channel: "{{ narratio_go_snap_channel }}"
classic: true
state: present
when: narratio_manage_build_dependencies
- name: Create the Narratio group
become: true
ansible.builtin.group:
name: "{{ narratio_group }}"
system: true
- name: Create the Narratio account
become: true
ansible.builtin.user:
name: "{{ narratio_user }}"
group: "{{ narratio_group }}"
system: true
home: "{{ narratio_workspace_root }}"
create_home: false
shell: /usr/sbin/nologin
- name: Create installation parent directories
become: true
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: root
group: root
mode: "0755"
loop:
- "{{ narratio_source_dir | dirname }}"
- "{{ narratio_binary_path | dirname }}"
- name: Create configuration directory
become: true
ansible.builtin.file:
path: "{{ narratio_config_path | dirname }}"
state: directory
owner: root
group: "{{ narratio_group }}"
mode: "0750"
- name: Create mutable Narratio roots
become: true
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ narratio_user }}"
group: "{{ narratio_group }}"
mode: "2775"
loop:
- "{{ narratio_workspace_root }}"
- "{{ narratio_spool_root }}"
- "{{ narratio_cache_root }}"
- name: Create the campaign registry root
become: true
ansible.builtin.file:
path: "{{ narratio_campaigns_root }}"
state: directory
owner: root
group: "{{ narratio_group }}"
mode: "0755"
- name: Check out Narratio source
become: true
ansible.builtin.git:
repo: "{{ narratio_repository_url }}"
dest: "{{ narratio_source_dir }}"
version: "{{ narratio_version }}"
force: true
register: narratio_checkout
- name: Inspect the installed binary
ansible.builtin.stat:
path: "{{ narratio_binary_path }}"
register: narratio_binary
- name: Build Narratio
become: true
ansible.builtin.command:
argv:
- "{{ narratio_go_binary }}"
- build
- -trimpath
- -ldflags
- "-s -w -X gitea.maximumdirect.net/eric/narratio/internal/buildinfo.Version={{ narratio_version }}"
- -o
- "{{ narratio_binary_path }}"
- ./cmd/narratio
chdir: "{{ narratio_source_dir }}"
environment:
CGO_ENABLED: "0"
GOWORK: "off"
GOTOOLCHAIN: local
changed_when: true
when: >-
narratio_checkout.changed or
not narratio_binary.stat.exists
- name: Converge installed metadata
become: true
ansible.builtin.file:
path: "{{ item.path }}"
state: "{{ item.state }}"
owner: root
group: root
mode: "{{ item.mode | default(omit) }}"
recurse: "{{ item.recurse | default(omit) }}"
loop:
- path: "{{ narratio_source_dir }}"
state: directory
recurse: true
- path: "{{ narratio_binary_path }}"
state: file
mode: "0755"
- name: Write Narratio pipeline configuration
become: true
ansible.builtin.template:
src: pipeline.yml.j2
dest: "{{ narratio_config_path }}"
owner: root
group: "{{ narratio_group }}"
mode: "0640"