name: Agile Squad Operations run-name: 🚀 Antigravity Daily Cycle on: schedule: # UTC Time: 07:00(09 UA), 11:00(13 UA), 15:00(17 UA), 19:00(21 UA) - cron: '0 7,11,15,19 * * *' # Кнопка для ручного запуску (щоб перевірити прямо зараз) workflow_dispatch: jobs: # === АГЕНТ 1: РАНКОВИЙ ЗБІР (Standup) === standup-check: runs-on: ubuntu-latest container: node:16-bullseye steps: - name: 📞 Check Connectivity run: | apt-get update && apt-get install -y curl # Перевіряємо, чи відповідає Gitea (код 200/300) # Якщо Gitea лежить - немає сенсу працювати далі curl -f -I https://git.smagentsconsulting.uk/ || exit 1 echo "✅ Gitea is Alive. Starting the day..." # === АГЕНТ 2: ОСНОВНА РОБОТА (Worker) === heavy-worker: needs: standup-check # Чекаємо, поки пройде перевірка зв'язку runs-on: ubuntu-latest container: image: node:16-bullseye # Прокидаємо сокет, щоб запускати docker compose volumes: - /var/run/docker.sock:/var/run/docker.sock steps: - name: 📥 Check out repository uses: actions/checkout@v3 - name: 🛠️ Setup Docker Tools run: | # Встановлюємо найновіший Docker CLI вручну (як ми вже робили) apt-get update && apt-get install -y curl tar curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-26.1.3.tgz -o docker.tgz tar xzvf docker.tgz && mv docker/docker /usr/local/bin/ && chmod +x /usr/local/bin/docker - name: 🔨 Run Main Task run: | # Запускаємо основний скрипт у мережі stack_app_net # --rm видаляє контейнер після роботи, щоб не займати місце docker compose run --rm antigravity_core python main.py # === АГЕНТ 3: АУДИТОР (QA) === qa-auditor: needs: heavy-worker # Запускається ТІЛЬКИ після завершення роботи Worker runs-on: ubuntu-latest container: image: node:16-bullseye volumes: - /var/run/docker.sock:/var/run/docker.sock steps: - name: 📥 Check out repository uses: actions/checkout@v3 - name: 🛠️ Setup Docker Tools run: | apt-get update && apt-get install -y curl tar python3 curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-26.1.3.tgz -o docker.tgz tar xzvf docker.tgz && mv docker/docker /usr/local/bin/ && chmod +x /usr/local/bin/docker - name: 🛡️ Infrastructure Audit run: | # Якщо у нас є скрипт аудиту - запускаємо, якщо ні - просто статус if [ -f audit.py ]; then python3 audit.py else echo "Audit script not found, checking docker ps..." docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Image}}" fi # === АГЕНТ 4: РЕПОРТЕР (Scrum Master) === scrum-report: if: always() # Виконується ЗАВЖДИ, навіть якщо Worker впав needs: [standup-check, heavy-worker, qa-auditor] runs-on: ubuntu-latest steps: - name: 📢 Daily Report run: | echo "=========================" echo "📊 SPRINT REPORT" echo "=========================" echo "Standup Check: ${{ needs.standup-check.result }}" echo "Heavy Worker: ${{ needs.heavy-worker.result }}" echo "QA Audit: ${{ needs.qa-auditor.result }}" echo "=========================" if [ "${{ needs.heavy-worker.result }}" == "success" ]; then echo "✅ Day Successful. System Stable." else echo "❌ Issues Detected! Check logs above." # Не ламаємо цей крок, просто повідомляємо fi