From 21b6fa07d66fb6ed86d03605c613827c0327f10d Mon Sep 17 00:00:00 2001 From: Jane Alesi Date: Fri, 27 Feb 2026 16:21:49 +0100 Subject: [PATCH] feat: implement maintenance and dev-tools roles and enhance maintenance script --- ansible/roles/dev-tools/tasks/main.yml | 21 ++++++++ ansible/roles/maintenance/tasks/main.yml | 28 +++++++++++ scripts/maintenance.sh | 63 +++++++++++++++--------- 3 files changed, 90 insertions(+), 22 deletions(-) create mode 100644 ansible/roles/dev-tools/tasks/main.yml create mode 100644 ansible/roles/maintenance/tasks/main.yml diff --git a/ansible/roles/dev-tools/tasks/main.yml b/ansible/roles/dev-tools/tasks/main.yml new file mode 100644 index 0000000..88df87b --- /dev/null +++ b/ansible/roles/dev-tools/tasks/main.yml @@ -0,0 +1,21 @@ +--- +- name: Ensure core workstation development tools are installed + community.general.pacman: + name: + - git + - base-devel + - ripgrep + - fd + - jq + - bat + - eza + - ansible + state: present + +- name: Ensure legacy editor packages are removed + community.general.pacman: + name: + - code + - code-oss + - code-marketplace + state: absent diff --git a/ansible/roles/maintenance/tasks/main.yml b/ansible/roles/maintenance/tasks/main.yml new file mode 100644 index 0000000..ef821a3 --- /dev/null +++ b/ansible/roles/maintenance/tasks/main.yml @@ -0,0 +1,28 @@ +--- +- name: Cleanup legacy VS Code remnants + ansible.builtin.file: + path: "{{ item }}" + state: absent + loop: + - "/home/mw/.vscode-oss" + - "/home/mw/.vscode" + - "/home/mw/.config/Code" + - "/home/mw/.config/Code - OSS" + +- name: Cleanup legacy local AI tools + ansible.builtin.file: + path: "{{ item }}" + state: absent + loop: + - "/home/mw/.local/share/ollama" + - "/home/mw/.ollama" + +- name: System maintenance tasks + ansible.builtin.command: + cmd: "{{ item }}" + loop: + - "paccache -r" + - "journalctl --vacuum-time=7d" + register: maintenance_result + changed_when: "'deleted' in maintenance_result.stdout or 'Vacuuming' in maintenance_result.stdout" + failed_when: false \ No newline at end of file diff --git a/scripts/maintenance.sh b/scripts/maintenance.sh index 4b95f77..137e999 100755 --- a/scripts/maintenance.sh +++ b/scripts/maintenance.sh @@ -2,21 +2,23 @@ set -euo pipefail # saTway Maintenance Script -# Version: 1.0.0 +# Version: 1.1.0 # Target: mw-pfeddersheim-workstation -LOG_FILE="/var/log/satway/maintenance-$(date +%Y%m%d).log" +CHECK_MODE=false +if [[ "${1:-}" == "--check" ]]; then + CHECK_MODE=true + echo "Running in CHECK mode (non-destructive)..." +fi -# Ensure log directory exists (needs sudo for /var/log usually, or local if not sudo) -# For now we'll log to stdout and optionally a local file if permitted. -# If /var/log/satway is not writeable, fallback to local log. +# Ensure log directory exists mkdir -p "$HOME/logs" 2>/dev/null || true LOCAL_LOG="$HOME/logs/maintenance-$(date +%Y%m%d).log" echo "--- Starting saTway Maintenance $(date) ---" | tee -a "$LOCAL_LOG" # 1. System Update Check -echo "[1/4] Checking for system updates..." | tee -a "$LOCAL_LOG" +echo "[1/6] Checking for system updates..." | tee -a "$LOCAL_LOG" if command -v checkupdates &> /dev/null; then checkupdates | tee -a "$LOCAL_LOG" elif command -v pacman &> /dev/null; then @@ -26,21 +28,32 @@ fi # 2. System Optimization (Journald & Packages) echo "[2/6] Optimizing system logs and package cache..." | tee -a "$LOCAL_LOG" if command -v journalctl &> /dev/null; then - echo "Pruning systemd journal logs..." | tee -a "$LOCAL_LOG" - sudo journalctl --vacuum-time=7d --vacuum-size=500M 2>&1 | tee -a "$LOCAL_LOG" || echo "Journald vacuum failed (requires sudo)" | tee -a "$LOCAL_LOG" + echo "Checking systemd journal logs..." | tee -a "$LOCAL_LOG" + if [ "$CHECK_MODE" = true ]; then + journalctl --disk-usage | tee -a "$LOCAL_LOG" + else + sudo journalctl --vacuum-time=7d --vacuum-size=500M 2>&1 | tee -a "$LOCAL_LOG" || echo "Journald vacuum failed (requires sudo)" | tee -a "$LOCAL_LOG" + fi fi if command -v paccache &> /dev/null; then - echo "Cleaning Arch package cache (keeping last 2)..." | tee -a "$LOCAL_LOG" - sudo paccache -rk2 2>&1 | tee -a "$LOCAL_LOG" || echo "paccache failed (requires sudo)" | tee -a "$LOCAL_LOG" + echo "Checking Arch package cache..." | tee -a "$LOCAL_LOG" + if [ "$CHECK_MODE" = true ]; then + du -sh /var/cache/pacman/pkg/ | tee -a "$LOCAL_LOG" + else + sudo paccache -rk2 2>&1 | tee -a "$LOCAL_LOG" || echo "paccache failed (requires sudo)" | tee -a "$LOCAL_LOG" + fi fi if command -v pacman &> /dev/null; then echo "Checking for orphaned packages..." | tee -a "$LOCAL_LOG" ORPHANS=$(pacman -Qtdq) || ORPHANS="" if [ -n "$ORPHANS" ]; then - echo "Removing orphaned packages: $ORPHANS" | tee -a "$LOCAL_LOG" - sudo pacman -Rns --noconfirm $ORPHANS | tee -a "$LOCAL_LOG" + echo "Orphaned packages found: $ORPHANS" | tee -a "$LOCAL_LOG" + if [ "$CHECK_MODE" = false ]; then + echo "Removing orphaned packages..." | tee -a "$LOCAL_LOG" + sudo pacman -Rns --noconfirm $ORPHANS | tee -a "$LOCAL_LOG" + fi else echo "No orphaned packages found." | tee -a "$LOCAL_LOG" fi @@ -48,27 +61,33 @@ fi # 3. Docker Cleanup if command -v docker &> /dev/null; then - echo "[3/6] Cleaning up Docker resources..." | tee -a "$LOCAL_LOG" - echo "Pruning unused docker data..." | tee -a "$LOCAL_LOG" - # Use prune safely for unused data - docker system prune -f 2>&1 | tee -a "$LOCAL_LOG" - echo "Pruning unused docker volumes (RECLAIMABLE)..." | tee -a "$LOCAL_LOG" - docker volume prune -f 2>&1 | tee -a "$LOCAL_LOG" + echo "[3/6] Checking Docker resources..." | tee -a "$LOCAL_LOG" + if [ "$CHECK_MODE" = true ]; then + docker system df | tee -a "$LOCAL_LOG" + else + echo "Pruning unused docker data..." | tee -a "$LOCAL_LOG" + docker system prune -f 2>&1 | tee -a "$LOCAL_LOG" + echo "Pruning unused docker volumes..." | tee -a "$LOCAL_LOG" + docker volume prune -f 2>&1 | tee -a "$LOCAL_LOG" + fi fi # 4. pnpm/npm check if command -v pnpm &> /dev/null; then echo "[4/6] Checking global pnpm packages..." | tee -a "$LOCAL_LOG" pnpm list -g --depth 0 | tee -a "$LOCAL_LOG" - echo "Suggested: pnpm store prune" | tee -a "$LOCAL_LOG" + if [ "$CHECK_MODE" = false ]; then + echo "Pruning pnpm store..." | tee -a "$LOCAL_LOG" + pnpm store prune 2>&1 | tee -a "$LOCAL_LOG" + fi fi # 5. Git Repos Status echo "[5/6] Checking infra repo status..." | tee -a "$LOCAL_LOG" git status | tee -a "$LOCAL_LOG" -# 6. Disk Space Check (after cleanup) +# 6. Disk Space Check echo "[6/6] Current disk usage summary:" | tee -a "$LOCAL_LOG" -df -h / | tail -n 1 | tee -a "$LOCAL_LOG" +df -h / | tee -a "$LOCAL_LOG" -echo "--- Maintenance Complete $(date) ---" | tee -a "$LOCAL_LOG" +echo "--- Maintenance Task Finished $(date) ---" | tee -a "$LOCAL_LOG" \ No newline at end of file