- name: GitOps deploy docker compose services (Semaphore) hosts: all become: true vars: # Resolve real repo root (IMPORTANT for Semaphore) repo_dir: "{{ playbook_dir | realpath }}/.." tasks: - name: Show repo root (debug) debug: msg: "Repo root resolved to: {{ repo_dir }}" - name: Find all compose.yml files find: paths: "{{ repo_dir }}" patterns: "compose.yml" file_type: file depth: 2 register: compose_files - name: Fail if no compose.yml found (safety) fail: msg: "No compose.yml files found under {{ repo_dir }}" when: compose_files.matched == 0 - name: Deploy each service shell: | set -e service_dir=$(dirname "{{ item.path }}") echo "==================================================" echo "Deploying service in $service_dir" echo "==================================================" docker compose -f "{{ item.path }}" up -d loop: "{{ compose_files.files }}" args: executable: /bin/bash