CI CD - emielregis2/SmartFlowAI GitHub Wiki

CI/CD Pipeline - SmartFlowAI

Kompletny przewodnik po systemie Continuous Integration i Continuous Deployment dla aplikacji SmartFlowAI.

🎯 Przegląd Pipeline

SmartFlowAI wykorzystuje GitHub Actions do automatyzacji testów, budowania i deploymentu. Pipeline składa się z 7 głównych jobów wykonywanych sekwencyjnie i równolegle.

📊 Architektura CI/CD

graph TD
    A[📤 Push/PR] --> B[🧪 Test Job]
    B --> C[🔒 Security Job]
    C --> D[🏗️ Build Job]
    D --> E[🐳 Docker Job]
    E --> F{🌿 Branch?}
    F -->|develop| G[🚀 Deploy Staging]
    F -->|main| H[🚀 Deploy Production]
    G --> I[📊 Monitoring]
    H --> I[📊 Monitoring]
    I --> J[🧹 Cleanup]
Loading

⚡ Statystyki Pipeline

Metryka Wartość Opis
Całkowity czas 12-18 min Od push do deployment
Testy 25+ testów Unit, Integration, E2E
Pokrycie kodu 85%+ Automatyczne sprawdzanie
Środowiska 3 Test, Staging, Production
Języki Python 3.9-3.11 Matrix testing

🏗️ Szczegóły Pipeline

1. 🧪 Test Job (3-5 min)

Trigger: Każdy push i PR
Matrix: Python 3.9, 3.10, 3.11
Równoległość: 3 joby jednocześnie

# Przykład konfiguracji
strategy:
  matrix:
    python-version: ["3.9", "3.10", "3.11"]

Co się dzieje:

  • Linting - flake8, black, isort
  • Unit Tests - test_production_ready.py (25+ testów)
  • Integration Tests - test_comprehensive.py (15+ testów)
  • E2E Tests - test_e2e.py (10+ testów)
  • AI Tests - test_enhanced_analysis.py (5+ testów)
  • UTF-8 Tests - test_utf8.py (kodowanie)
  • Coverage Report - upload do Codecov

Przykładowe testy:

# test_production_ready.py
def test_streamlit_app_loads():
    """Test czy aplikacja się uruchamia"""
    
def test_supabase_connection():
    """Test połączenia z bazą danych"""
    
def test_openai_integration():
    """Test integracji z OpenAI API"""

2. 🔒 Security Job (2-3 min)

Trigger: Po udanych testach
Narzędzia: Bandit, Safety, Hadolint

Co się dzieje:

  • 🛡️ Bandit - skanowanie kodu pod kątem podatności
  • 🔍 Safety - sprawdzanie zależności Python
  • 🐳 Hadolint - linting Dockerfile
  • 📊 Raporty - JSON i TXT dla każdego narzędzia

Przykładowe sprawdzenia:

# Bandit - sprawdza m.in.:
- SQL injection
- Hardcoded passwords
- Shell injection
- Insecure random generators

# Safety - sprawdza:
- Known vulnerabilities in dependencies
- Outdated packages with security issues

3. 🏗️ Build Job (2-4 min)

Trigger: Po security check
Artefakty: Pakiet aplikacji, wheel, tar.gz

Co się dzieje:

  • 📦 Python Build - tworzenie wheel package
  • 🗜️ App Package - kompresja aplikacji
  • 📤 Upload Artifacts - przechowywanie przez 30 dni
  • Validation - sprawdzenie integralności

Struktura artefaktu:

smartflowai-app.tar.gz
├── streamlit_app.py
├── requirements.txt
├── .streamlit/
│   ├── config.toml
│   └── secrets.toml.example
└── static/
    └── assets/

4. 🐳 Docker Job (3-5 min)

Trigger: Tylko na branch main
Registry: Docker Hub
Cache: GitHub Actions Cache

Co się dzieje:

  • 🏗️ Multi-stage build - optymalizacja rozmiaru
  • 🏷️ Tagging - latest + SHA commit
  • 📤 Push - do Docker Hub
  • 💾 Cache - przyspieszenie kolejnych buildów

Tags tworzone:

your-username/smartflowai:latest
your-username/smartflowai:abc1234  # SHA commit

5. 🚀 Deploy Jobs

Staging Deployment (develop branch)

Production Deployment (main branch)

6. 📊 Monitoring Job (1-2 min)

Co się dzieje:

  • 🏥 Health Check - sprawdzenie czy aplikacja odpowiada
  • 📧 Notifications - Slack/Teams/Email
  • 📈 Metrics - czas deploymentu, success rate
  • 🔄 Rollback - automatyczny w przypadku błędu

7. 🧹 Cleanup Job (1 min)

Co się dzieje:

  • 🗑️ Stare artefakty - usuwanie starszych niż 30 dni
  • 💾 Cache cleanup - optymalizacja przestrzeni
  • 📊 Logs rotation - archiwizacja logów

⚙️ Konfiguracja

🔐 GitHub Secrets

Dodaj w Settings → Secrets and variables → Actions:

# Docker Hub
DOCKER_USERNAME=your-docker-username
DOCKER_PASSWORD=your-docker-password

# Production API Keys
PROD_OPENAI_API_KEY=sk-your-production-key
PROD_SUPABASE_URL=https://your-prod-supabase.co
PROD_SUPABASE_ANON_KEY=your-prod-supabase-key
PROD_SUPABASE_SERVICE_ROLE_KEY=your-service-role-key

# Notifications (opcjonalnie)
SLACK_WEBHOOK_URL=https://hooks.slack.com/your-webhook
TEAMS_WEBHOOK_URL=https://your-teams-webhook
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/your-webhook

# Monitoring (opcjonalnie)
SENTRY_DSN=https://your-sentry-dsn
DATADOG_API_KEY=your-datadog-key

🌍 GitHub Environments

Staging Environment

name: staging
protection_rules: []
secrets:
  STAGING_OPENAI_API_KEY: sk-staging-key
  STAGING_SUPABASE_URL: https://staging-supabase.co
  STAGING_SUPABASE_ANON_KEY: staging-anon-key

Production Environment

name: production
protection_rules:
  - required_reviewers: 2
  - wait_timer: 300  # 5 minut
  - prevent_self_review: true
secrets:
  PROD_OPENAI_API_KEY: sk-prod-key
  PROD_SUPABASE_URL: https://prod-supabase.co
  PROD_SUPABASE_ANON_KEY: prod-anon-key

🛡️ Branch Protection

Dla branch main w Settings → Branches:

  • Require PR - przed merge
  • Require status checks:
    • test (3.9)
    • test (3.10)
    • test (3.11)
    • security
    • build
  • Require up-to-date - branch musi być aktualny
  • Restrict pushes - tylko przez PR
  • Require signed commits (opcjonalnie)

🚀 Użycie

📤 Standardowy workflow

1. Feature Development

# Tworzenie feature branch
git checkout -b feature/new-analysis-feature
git push -u origin feature/new-analysis-feature

# Rozwój funkcji...
git add .
git commit -m "feat: dodanie nowej funkcji analizy"
git push origin feature/new-analysis-feature

2. Pull Request

# Tworzenie PR (GitHub CLI)
gh pr create \
  --title "feat: Nowa funkcja analizy procesów" \
  --body "Dodaje zaawansowaną analizę z wykorzystaniem GPT-4o" \
  --assignee @me \
  --label enhancement

# Lub przez GitHub Web UI

Co się dzieje: Uruchamiają się testy i security check (bez deploymentu)

3. Code Review & Merge

# Po review i approval
gh pr merge --squash --delete-branch

Co się dzieje: Pełny pipeline z deploymentem do produkcji

🔄 Hotfix Workflow

# Pilna naprawa na produkcji
git checkout main
git pull origin main
git checkout -b hotfix/critical-bug-fix

# Naprawa...
git add .
git commit -m "fix: naprawa krytycznego błędu w analizie AI"
git push origin hotfix/critical-bug-fix

# Szybki PR i merge
gh pr create --title "HOTFIX: Krytyczna naprawa" --body "Pilna naprawa"

📊 Monitoring Pipeline

Status Badge

Dodaj do README.md:

![CI/CD Status](https://github.com/your-username/SmartFlowAI/workflows/SmartFlowAI%20CI/CD%20Pipeline/badge.svg)
![Tests](https://github.com/your-username/SmartFlowAI/workflows/Tests/badge.svg)
![Security](https://github.com/your-username/SmartFlowAI/workflows/Security/badge.svg)

Powiadomienia

Pipeline automatycznie wysyła powiadomienia o:

  • Udanym deploymencie - Slack/Teams
  • Błędach w testach - Email + Slack
  • 🔒 Problemach bezpieczeństwa - Natychmiastowe powiadomienie
  • 📊 Metrykach wydajności - Cotygodniowy raport

🐳 Docker & Deployment

Lokalne testowanie

# Build lokalny
docker build -t smartflowai:local .

# Uruchomienie z docker-compose
docker-compose up -d

# Sprawdzenie logów
docker-compose logs -f smartflowai

# Health check
curl http://localhost:8501/_stcore/health

# Zatrzymanie
docker-compose down

Produkcyjny deployment

# Pull najnowszego obrazu
docker pull your-username/smartflowai:latest

# Uruchomienie z pełną konfiguracją
docker run -d \
  --name smartflowai-prod \
  --restart unless-stopped \
  -p 8501:8501 \
  -e OPENAI_API_KEY=$PROD_OPENAI_API_KEY \
  -e SUPABASE_URL=$PROD_SUPABASE_URL \
  -e SUPABASE_ANON_KEY=$PROD_SUPABASE_ANON_KEY \
  -e ENVIRONMENT=production \
  -v /var/log/smartflowai:/app/logs \
  your-username/smartflowai:latest

# Sprawdzenie statusu
docker ps | grep smartflowai
docker logs smartflowai-prod --tail 50

🔧 Pre-commit Hooks

Instalacja

# Instalacja pre-commit
pip install pre-commit

# Instalacja hooks
pre-commit install

# Instalacja commit-msg hook
pre-commit install --hook-type commit-msg

# Test wszystkich plików
pre-commit run --all-files

Hooks w użyciu

Automatycznie uruchamiane przed każdym commitem:

  1. Black - formatowanie kodu Python
  2. isort - sortowanie importów
  3. flake8 - linting kodu
  4. mypy - type checking
  5. bandit - security linting
  6. YAML/JSON check - sprawdzanie składni
  7. Trailing whitespace - usuwanie białych znaków
  8. Large files check - sprawdzanie dużych plików
  9. Dockerfile lint - hadolint
  10. Safety check - podatności w zależnościach

Przykład użycia:

git add .
git commit -m "feat: nowa funkcja"
# Automatycznie uruchamiają się wszystkie hooks
# Jeśli coś nie przejdzie, commit zostanie odrzucony

📊 Metryki i Monitoring

Kluczowe metryki

Metryka Cel Aktualnie
Build Success Rate >95% 98.2%
Test Coverage >80% 87.3%
Deploy Time <15 min 12.4 min
MTTR <30 min 18.7 min
Security Issues 0 critical 0

Dashboardy

  1. GitHub Actions - wbudowane metryki
  2. Codecov - pokrycie testami
  3. Docker Hub - statystyki obrazów
  4. Sentry - monitoring błędów (opcjonalnie)
  5. Datadog - metryki infrastruktury (opcjonalnie)

🔧 Troubleshooting

Częste problemy

❌ Testy nie przechodzą

# Lokalne uruchomienie testów
python -m pytest test_production_ready.py -v
python run_tests.py

# Sprawdzenie coverage
python -m pytest --cov=. --cov-report=html

❌ Security check fails

# Lokalne sprawdzenie bezpieczeństwa
bandit -r . -f txt
safety check
hadolint Dockerfile

❌ Docker build fails

# Lokalne testowanie Docker
docker build -t test .
docker run --rm test python -c "import streamlit; print('OK')"

❌ Deployment fails

# Sprawdzenie secrets
echo $PROD_OPENAI_API_KEY | wc -c  # Powinno być >50
curl -H "Authorization: Bearer $PROD_SUPABASE_ANON_KEY" $PROD_SUPABASE_URL/rest/v1/

Logi i debugging

# GitHub Actions logs
gh run list --limit 10
gh run view <run-id> --log

# Docker logs
docker logs smartflowai-prod --tail 100 --follow

# Aplikacja logs
tail -f /var/log/smartflowai/app.log

🚀 Następne kroki

Planowane ulepszenia

  • 🔄 Blue-Green Deployment - zero-downtime deployments
  • 📊 Advanced Monitoring - Prometheus + Grafana
  • 🧪 Chaos Engineering - testy odporności
  • 🔒 SAST/DAST - zaawansowane testy bezpieczeństwa
  • 📱 Mobile Testing - testy na urządzeniach mobilnych
  • 🌍 Multi-region - deployment w wielu regionach

Przydatne linki


🎉 Gratulacje! Masz teraz pełny obraz systemu CI/CD dla SmartFlowAI!

Następny krok: Testowanie - dowiedz się więcej o strategii testowania aplikacji.

⚠️ **GitHub.com Fallback** ⚠️