summaryrefslogtreecommitdiff
path: root/roles/rss-aggregator/tasks/main.yml
blob: 9e23ca34228f0be87a2a81922b6d3c9a790ee37d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
- name: Install rss-aggregator by pre-compiling the binary
  when: ( not ( rss_aggregator_install_method is defined ) ) or rss_aggregator_install_method == "precompile"
  block:
    - name: Fetch rss-aggregator source code
      delegate_to: 127.0.0.1
      become: false
      ansible.builtin.git:
        repo: https://git.joeac.net/rss-aggregator.git
        dest: /tmp/rss-aggregator
        depth: 1
    - name: Cross-compile rss-aggregator
      delegate_to: 127.0.0.1
      become: false
      ansible.builtin.shell:
        cmd: cross build --release --target {{ rust_target }}
        chdir: /tmp/rss-aggregator
      changed_when: "'Compiling' in _task.result.stderr"
    - name: Install rss-aggregator binary
      ansible.builtin.copy:
        src: /tmp/rss-aggregator/target/{{ rust_target }}/release/rss-aggregator
        dest: /usr/bin/rss-aggregator
        mode: +x

- name: Install or update rss-aggregator using rustup
  when: rss_aggregator_install_method == "rustup"
  block:
    - name: Install Rust toolchain using installation script
      ansible.builtin.shell:
        cmd: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
        creates: /usr/bin/rustc
    - name: Update Rust toolchain with rustup
      ansible.builtin.shell: rustup update
      changed_when: "'updated' in _task.result.stdout"
    - name: Install or update rss-aggregator using cargo
      ansible.builtin.shell:
        cmd: cargo install --git git://git.joeac.net/rss-aggregator.git
      changed_when: "'Installed' in _task.result.stdout or 'Replaced' in _task.result.stdout"
    - name: Install daily crontab to update rss-aggregator using cargo
      ansible.builtin.cron:
        special_time: daily
        name: Update rss-aggregator
        job: cargo install --git git://git.joeac.net/rss-aggregator.git

- name: Install rss-aggregator using cargo provided by APK
  when: rss_aggregator_install_method == "cargo"
  block:
    - name: Install cargo using APK
      community.general.apk:
        name: cargo
    - name: Install or update rss-aggregator using cargo
      ansible.builtin.shell:
        cmd: cargo install --git git://git.joeac.net/rss-aggregator.git
      changed_when: "'Installed' in _task.result.stdout or 'Replaced' in _task.result.stdout"
    - name: Install daily crontab to update rss-aggregator using cargo
      ansible.builtin.cron:
        special_time: daily
        name: Update rss-aggregator
        job: cargo install --git git://git.joeac.net/rss-aggregator.git

- name: Create rss-aggregator configuration directory
  ansible.builtin.file:
    path: /etc/rss-aggregator
    state: directory

- name: Configure rss-aggregator
  ansible.builtin.template:
    src: rss-aggregator.toml
    dest: /etc/rss-aggregator/config.toml

- name: Fetch subscriptions
  ansible.builtin.git:
    repo: git://git.joeac.net/subscriptions.git
    dest: "{{ src_dir }}/subscriptions"
    depth: 1

- name: Symlink subscriptions into rss-aggregator configuration directory
  ansible.builtin.file:
    src: "{{ src_dir }}/subscriptions/subscriptions.txt"
    dest: /etc/rss-aggregator/subscriptions.txt
    state: link

- name: Create directory for RSS file
  ansible.builtin.file:
    path: "{{ http_files_dir }}/feed/{{ feed_dir }}"
    state: directory
    owner: nginx
    group: nginx

- name: Use rss-aggregator to generate RSS file
  ansible.builtin.shell:
    cmd: rss-aggregator > {{ http_files_dir }}/feed/{{ feed_rss_path }}
    creates: "{{ http_files_dir }}/feed/{{ feed_rss_path }}"

- name: Install nginx location config
  register: nginx_conf
  ansible.builtin.template:
    src: nginx/feed.conf
    dest: /etc/nginx/http.d/joeac.net.locations.d/feed.conf

- name: Restart nginx
  when: nginx_conf is changed
  ansible.builtin.service:
    name: nginx
    state: restarted

- name: Install hourly crontab to update subscriptions and run rss-aggregator
  ansible.builtin.cron:
    special_time: daily
    name: Run rss-aggregator
    job: >-
      git -C "{{ src_dir }}/subscriptions" pull;
      rss-aggregator > {{ http_files_dir }}/feed/{{ feed_rss_path }}