diff --git a/ansible/roles/dev-desktop/files/refresh-crates.sh b/ansible/roles/dev-desktop/files/refresh-crates.sh new file mode 100644 index 000000000..9672d724a --- /dev/null +++ b/ansible/roles/dev-desktop/files/refresh-crates.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +set -euxo pipefail + +cd /home/crates-io-downloader + +# Refresh crates.io index +if [ -d crates.io-index ]; then + git -C crates.io-index pull --force +else + git clone https://github.com/rust-lang/crates.io-index.git +fi + +# Re-fetch latest copies of crates into ./all-crates. +# This will automatically skip downloading existing crates. +./.cargo/bin/get-all-crates --index ./crates.io-index --out /var/cache/all-crates diff --git a/ansible/roles/dev-desktop/tasks/crates-io.yml b/ansible/roles/dev-desktop/tasks/crates-io.yml new file mode 100644 index 000000000..0a516a78f --- /dev/null +++ b/ansible/roles/dev-desktop/tasks/crates-io.yml @@ -0,0 +1,48 @@ +--- + +- name: Set up user for crates.io downloads + user: + name: crates-io-downloader + state: present + +- name: Install Rust for crates-io-downloader + shell: "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y" + become_user: crates-io-downloader + +- name: Install get-all-crates + shell: "PATH=$PATH:$HOME/.cargo/bin cargo install get-all-crates --version 0.1.22 --locked" + become_user: crates-io-downloader + +- name: Set up get-all-crates systemd service + template: + src: get-all-crates.service.j2 + dest: /etc/systemd/system/get-all-crates.service + mode: 0644 + register: get_all_crates_service + +- name: Set up get-all-crates systemd timer + template: + src: get-all-crates.timer.j2 + dest: /etc/systemd/system/get-all-crates.timer + mode: 0644 + register: get_all_crates_timer + +- name: reload systemd + systemd: + daemon_reload: true + when: get_all_crates_timer is changed or get_all_crates_service is changed + +- name: setup all-crates directory + file: + path: /var/cache/all-crates + state: directory + owner: crates-io-downloader + group: crates-io-downloader + mode: 0755 + +- name: Set up get-all-crates script + copy: + src: files/refresh-crates.sh + dest: /home/crates-io-downloader/refresh-crates.sh + owner: crates-io-downloader + mode: u+x diff --git a/ansible/roles/dev-desktop/tasks/main.yml b/ansible/roles/dev-desktop/tasks/main.yml index 713b5c72f..663bb3f0f 100644 --- a/ansible/roles/dev-desktop/tasks/main.yml +++ b/ansible/roles/dev-desktop/tasks/main.yml @@ -1,5 +1,6 @@ --- +- include_tasks: crates-io.yml - include_tasks: cloud_provider.yml - include_tasks: oom.yml - include_tasks: dependencies.yml diff --git a/ansible/roles/dev-desktop/templates/get-all-crates.service.j2 b/ansible/roles/dev-desktop/templates/get-all-crates.service.j2 new file mode 100644 index 000000000..2ff9d18f3 --- /dev/null +++ b/ansible/roles/dev-desktop/templates/get-all-crates.service.j2 @@ -0,0 +1,8 @@ +[Unit] +Description=Refresh crates.io export + +[Service] +Type=oneshot +User=crates-io-downloader +ExecStart=/home/crates-io-downloader/refresh-crates.sh +MemoryMax=80% diff --git a/ansible/roles/dev-desktop/templates/get-all-crates.timer.j2 b/ansible/roles/dev-desktop/templates/get-all-crates.timer.j2 new file mode 100644 index 000000000..1d3a9cc25 --- /dev/null +++ b/ansible/roles/dev-desktop/templates/get-all-crates.timer.j2 @@ -0,0 +1,9 @@ +[Unit] +Description=Refresh crates.io export timer + +[Timer] +OnCalendar=daily +RandomizedDelaySec=3600 + +[Install] +#WantedBy=timers.target